xss-labs靶场练习

Level 1

1645071060231

观察url的构造,这里是向服务器提交了个名为name的参数,值为text,并且值和值的长度都在页面有回显。

查看网页源码

QQ截图20220217142356

name参数的值直接插入到了

标签之中。那么这样看来这一关主要就是考察反射型XSS。

payload:name=<script>alert('xss')</script>

Level 2

image-20220217143223741

从url地址来看,依然是get方式传递参数,所以猜测考察的还是反射型XSS。只不过这一关将参数名换成了keyword。

查看页面源码

image-20220217143513098

这里有两个地方回显值的地方,利用第一关的payload试试

image-20220217143809347

观察源码,第一处回显处的特殊字符被编码了,不能利用,第二处的回显处可以完整的回显值,可以利用这里构造payload,

这里需要构造闭合

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

Level 3

url构造同上一关

image-20220217144449415

页面源码和上一关的差不多,只是双引号变成单引号

image-20220217144758278

尝试构造payload:

'><script>alert('xss')</script>

发现并没有弹窗,继续观察源码

image-20220217145017841

发现这关的<,>被编码成了html实体。经过查看php文件,在这两处都用htmlspecialchars()函数进行了处理。

image-20220217145359528

所以这里不能用含有<>的payload

这里可以通过<input>标签的一些特殊事件来执行js代码:

' onmouseover=javascript:alert(1) '

Level 4

image-20220217150532899

查看源码

image-20220217150738232

这一关只是把上一关的单引号变成了双引号,payload构造如下

" onmouseover=javascript:alert(1) "

Level 5

ccc

查看页面源码

image-20220217153208676

这和上一关的源码差不多,直接用上一关的payload,无法弹窗

image-20220217153541015

发现onmouseover变成了o_nmouseover,经过测试<script>onclick也被_分隔了

这里不用<input>标签了,把它闭合掉,用a标签试试

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

image-20220217154340891

点击link弹窗。进入下一关

Level 6

image-20220217155856005

源码和上一关差不多

image-20220217160010837

尝试使用上一关的payload,并没有出现弹窗

image-20220217160114004

image-20220217160153498

发现这里的href也被_分隔了

因为html对大小写不敏感,即不区分大小写,这里可以试试下面的payload

"><a Href="javascript:alert(111)">link</a> <"

image-20220217161822841

点击link弹窗。进入下一关

Level 7

image-20220217210116917

页面源码与上一关的雷同,用上一关的payload:"><a Href="javascript:alert(1)">link</a> <"试试

image-20220217210446573

发现这里过滤了scripthref,可以用双写绕过,即在script里面再插入一个script,如scrscriptipt,

当script被过滤后,剩下的拼接起来刚好能组合成script,href也同理

payload

"><a hRhrefef="javascriscriptpt:alert('111')">link</a><"

image-20220217211132648

点击link弹窗。进入下一关

Level 8

image-20220217211535003

这关多了一个“友情链接”,按照套路,这里应该是利用点

首先先查看页面源码

image-20220217212026427

回显值的地方有两个,用上一关的payload试试水

image-20220217212158383

可以发现,第一个回显处被htmlspecialchars()函数进行了处理,第二个回显处href和script都被_分隔了

可以对第二处进行构造payload

javascript:alert(1)

这里的scrpit会被分隔,所以将它进行unicode编码

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

image-20220217213124300

点击友情链接即可弹窗

Level 9

image-20220217214219071

查看源码

image-20220217214603403

这里显示链接不合法,经过测试,提交的内容里只要含有http://就合法,https://不行

image-20220217215516760

尝试payload : javascript:alert(http://)

image-20220217215653634

发现script被分隔了,可以将script进行unicode编码绕过

java&#115;&#99;&#114;&#105;&#112;&#116;:alert('http://')

image-20220217220749312

点击友情链接即可弹窗

Level 10

image-20220217222013957

传递keyword值为<script>alert(111)</script>进行测试

image-20220217222505101

可以看到回显值的地方被htmlspecialchars()函数进行了处理,还有三个隐藏的输入框,尝试向它们传值

?keyword=1111&t_link=222&t_history=333&t_sort=444

image-20220217223126794

发现t_sort有回显,在这里构造payload

t_sort=" onmouseover=javascript:alert(1) " type="text

image-20220217223555926

image-20220217223608521

Level 11

image-20220218080510169

这关的页面源码和上一关的雷同,多了个隐藏的输入框t_ref,value值为上一关的url

image-20220218081735399

这里可以猜测,这个参数的值,是来源于请求头Referer,通过referer来传入payload

" onmouseover=javascript:alert(1) " type="text

image-20220218082110453

可以弹窗进入下一关

image-20220218082133492

Level 12

image-20220218082535475

这一关又多了个隐藏的输入框t_ua,看它的值可以知道它的值来源于User-Agent

image-20220218082846721

通过User-Agent传入上一关的payload即可弹窗

image-20220218083019729

image-20220218083052475

Level 13

查看页面源码,发现这次的隐藏输入框是t_cook,它的值是来自Cookies

同样的套路,吧上一关的payload加到cookie即可

成功弹窗进入下一关

Level 14

这一关是Exif xss,php的exif_read_data函数读出exif信息,读出的值直接未经过滤的输出,就会导致Xss的发生。

网站打不开,这关跳过

Level 15

image-20220218113901942

查看源码发现angular.min.js

image-20220218114103327

URL的src参数回显在下面的ng-include

image-20220218114236036

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

在本地写个html文件,把地址传给src即可

<input type="text" name="" onclick=alert('xss')>
http://localhost/xss-labs/level15.php?src="http://localhost/2.html"

image-20220218114850262

Level 16

image-20220218115116596

观察url构造,发现这一关是通过get一个keyword来传递参数

image-20220218115243816

参数值回显在<center>标签中,使用<img>标签来弹窗

<img src='' onerror=alert(111)>
http://localhost/xss-labs/level16.php?keyword=<img src='' onerror=alert(111)>

传值后没有弹窗,观察页面源码得知,空格被转义了

image-20220218115733037

空格可以用%20 %09 %0a %0b %0c %0d %a0 %00代替,经过测试%0d可以用

所以payload为

http://localhost/xss-labs/level16.php?keyword=<img%0dsrc=''%0donerror=alert(111)>

弹窗成功

Level 17

image-20220218120659720

这有个flash,但是这关和它没有关系

发现url有个?arg01=a&arg02=b,再观察一下页面源码

image-20220218121009693

发现两个参数的值回显在<embed>标签中,可以通过构该标签的特殊事件进行弹窗

?arg01=a%0aonmouseover&arg02=alert(1)

image-20220218122200252

image-20220218122212241

Level 18

这一关的页面源码和上一关的没什么区别,直接用上一关的payload即可

image-20220218122616195

Level 19/20

摆烂!