玩个闯关小游戏

昨天中午睡了一觉,一个朋友邀请我来玩一个闯关游戏,发过来一看是一个xss闯关小游戏,虽然早有耳闻,但是说实话一次也没玩过;正好下午没什么事情,就玩玩这个游戏,就当打发时间了..(纯玩玩,毕竟不能耽误我刷抖音😊)

第一关

毕竟第一关,估计最简单,总不能在第一关的boss都打不出血吧,直接看源码

果然所有符号都没过滤,也没有转义,那不直接上payload

1
<script>alert("xss")</script>

第二关
在输入框中输入测试语句(如下,后面都用这个做测试)可以看到输入框中没有显示出双引号,此处语句应该是被双引号闭合

1
<script "'/0n>

通过观察源码,可以看到输入的参数是被双引号闭合着带入到input标签中

所以需要在开头构造一个”>把签名input标签闭合掉,在结尾构造一个”<把input剩下的尖括号闭合即可

1
"><script>alert("xss")</script><"

第三关
在输入框中输入测试语句,输入框的内容里没有单引号,此处语句应该是被单引号闭合

观察源码可知,大小于号和双引号被转义,但是单引号没有被转义且参数是用单引号闭合的

由于大于号被转义,我们需要使用哪些不需要用到标签的语句来触发XSS漏洞比如说用事件触发的形式,同时使用单引号来闭合

1
'onmouseover='alert("xss")

第四关
在输入框中输入测试语句,发现搜索框里没有小于号,估计是被转义了,内容也是到script截止,说明内容是由双引号闭合的

在网页源代码第17行中可以发现,大小于号已被过滤,引号没有被过滤或转义,参数采用的是双引号的闭合方式

payload

1
"onmouseover="alert(/xss/)

第五关
在输入框中输入测试语句,发现在r与i之间多了一个_符号,猜测是关键字被转义了

看源码我们发现两个关键字被转义,大小于号和引号没有被过滤与转义,用双引号闭合方式,可利用其他关键字绕过

尝试img标签

1
"><IMG SRC="javascript:alert('XSS');"><"

虽然…但是无法进行弹窗,尝试修改为a标签,成功弹窗

1
"><a href="javascript:alert('XSS');">xss<"

第六关
在输入框中输入测试语句,感觉与上一关貌似是一样的

那直接利用上一关的payload,发现href被转义了….啊。。这。。

采用大小写即可绕过

1
"><a Href="javascript:alert('XSS');">xss<"

第七关
在输入框中输入测试语句,只显示了<括号,猜测可能是script被过滤

看源码可以看到script被过滤,采用双引号闭合

经过尝试可以使用script双写绕过

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

第八关
在输入框中输入测试语句,输入的值均显示在页面上

分析源码可知,大小于号被转义、双引号被转义,语句采用双引号闭合方式,并且在20行可以看到大小于号被转义回来,关键字被插入下划线

可以使用javascript伪协议,javascript中的script会被转义为scr_ipt,源码中会对部分html实体编码转换为正常的字符,所以尝试采用将script htlm实体编码

1
java&#x0073;&#x0063;&#x0072;&#x0069;&#x0070;&#x0074;:alert(/xss/)

点击友情链接成功弹窗
pass!

第九关
在输入框中输入测试语句,输入的值也是显示在页面上

感觉和上一关差不多的情况,大小于号被转义、双引号被转义、、大写变小写,采用双引号闭合,有意思的是:在20行提示“您的链接不合法?有没有!”
what??什么鬼??和链接有关?难不成和http/https有关..

尝试输入一个正常的链接提交试试,发现返回是合法的

所以将http://写入到payload中让他匹配到存在即会返回合法,所以构造pyload

1
java&#x0073;&#x0063;&#x0072;&#x0069;&#x0070;&#x0074;:alert('http://xss')

第十关
在url中输入测试语句,页面显示看不出什么信息

分析源码,发现第15行大小于号被转义、双引号都被转义,语句采用双引号闭合。在第17、18、19行,发现三个输入参数,分别是t_link、t_history、t_sort

输入测试语句

1
?t_history=<script "'/0n>&t_sort=<script "'/0n>&t_link=<script "'/0n>

发现只有t_sort有值,大小于号被过滤,采用双引号闭合

那payload构造的时候,就不需要用><的事件触发方式构造语句

1
2
3
4
5
6
?t_sort=sb" type="button" onclick="alert(/xss/)

# ?t_sort=表示参数是传递给谁
# sb"给input赋值同时闭合双引号
# 修改type属性为按钮方便事件触发
# onclik则表示点击时触发事件

第十一关
在url中输入测试语句,页面显示看不出什么信息

查看源码,发现第15行大小于号被转义、双引号都被转义,语句采用双引号闭合,在第17、18、19、20行,发现另外四个输入参数,分别是t_link、t_history、t_sort、t_ref,考虑将测试语句传入进行测试

构造访问

1
?t_history=<script "'/0n>&t_sort=<script "'/0n>&t_link=<script "'/0n>&t_ref=<script "'/0n>

可以看到大小于号被转义、双引号都被转义,语句采用双引号闭合,然后我尝试了很多绕过都不行,终究还是太菜了…尝试其余参数入手试试吧,可以发现其余参通过url地址栏传递无法传递,这时候就在想t_ref根据命令规则是不是就是http的referer头部信息,抓包尝试一下,发现没有任何过滤

okkkk,那就直接改referer头部信息,但是没有..手动加个referer
pass!

1
referer: referer:click me!" type="button" onclick="alert(/xss/)

第十二关
与关卡11类似,修改t_ua值进行绕过,也就是修改数据包中的UA头,不再多说

第十三关
与关卡11、12类似,修改值进行绕过,也不再多说

payload

1
Cookie: user=click me!" type="button" onclick="alert(/xss/)

第十四关
额…第十四关咋啥东西也没有,就一个跳转,还是404!!源码也没啥东西,我也不知道是要考啥,捣鼓半天放弃..直接下一题吧

第十五关
分析源码发现URL的src参数回显在下面的ng-include

ng-include相当于php的include函数,所以我们只要包含一个有XSS漏洞的URL就可触发这里的XSS,那我们这里包含第一关的XSS试试

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

第十六关
在url中输入测试语句,可以看到script被过滤了

可以看到script被过滤了、并且空格和/被转义了

用img绕过并且空格用%0a替换

1
?keyword=<img%0asrc=x%0aonerror=alert(1)>

到了下一关发现提示“该插件不支持”,这时候我盲猜应该是考Flash XSS,既然提示我没有且加载不出来,那就到此为止吧,也不知道后面有多少关,本来一开始就是打着做着玩的心态,打发一下时间,也就不在这上面浪费时间了,说不定哪天又碰到了或者想起来了,到时候再搞搞玩吧!嗯嗯..就这样

继续刷我抖音了~#$%@……^&*(-+)😊


玩个闯关小游戏
http://example.com/2024/02/29/玩个闯关小游戏/
作者
liuty
发布于
2024年2月29日
许可协议