xss-labs是一个专门练习xss的靶场
搭建
下载链接:GitHub-xss-labs
(1)下载后直接解压到phpstudy的www目录下,名字改为xss-labs。
(2)打开浏览器,直接进入http://127.0.0.1/xss-labs/,即可访问靶场。
level-1
可以看到参数传入name,所以直接在name后参数写上js代码。完美通关。
<script>alert("xss")</script>
level-2
多了一个搜索框,输入上一关的js代码试试看,发现没有什么卵用。应该是代码经过了过滤。
查看源代码发现内容在value里面,所以我们尝试用>闭合input,构造js代码为:
"><script>alert("xss")</script>
完美通关。
level-3
继续输入前两关的代码,都没有用哎。
查看源代码,发现<>全都被转义了。
至于为什么被转义,看了半天也看不出来,然后直接看这关的后端代码了。
网上查了一下htmlspecialchars()函数会将特殊字符进行转义,把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体。
所以这里就不能用 < >标签了,那怎么办呢,由于它不会对 ’ 进行转义,所以这里可以用事件闭合标签。这里可以用onclick事件,它可以在用户单击按钮时执行js代码。
所以构造onclick事件代码为:
'οnclick='alert("xss")
记得要用’进行闭合。将代码输入搜索框。还要点击一下搜索框触发onclick事件。完美通关。
除了onclick以外还可以使用onmouseover,'οnmοuseοver='alert(“xss”),只需要把鼠标放上去就可以了。
level-4
输入第三关的代码发现没用。查看源代码发现要用双引号闭合
直接把上一关的代码单引号改为双引号闭合,这里不知道为什么"onclick="alert(xss)
无法通关,而"onclick="alert(1)
就可以
完成的不错。
level-5
输入第四关的payload,一如既往的没用。看一下前端,发现onclick变成了o_nclick。
原因也很简单,看一下后端代码,直接把on转换成了o_n,所以什么onclick、onmouseover都没用,也尝试了大小写ON和<script>
也还是没用用,肯定是经过了转换。前面几关的方法都不管用那怎么办呢。
这里可以使用使用a标签href
构造超链接,利用javascript伪协议进行绕过。参考xss篇幅-JavaScript伪协议
构造一个超链接代码:
"><a href='javascript:alert(1)'>
这里出现超链接标签,点击,完美通关。
level-6
把第五关的payload丢进来,失败,看一下前端。href直接变成了hr_ef。。。。
一看后端,发现script、on、src、data、href什么的都被转换了。
尝试了很多方法,发现没有管大小写,直接构造payload:
"><SCRIPT>alert(1)</SCRIPT>
完成的不错。
level-7
老规矩将上一关payload放进去,发现直接变成了空值,看一下后端就明白了。
上一关的大小写一样没有用,正确的解法是双写绕过。直接构造payload:
"><scscriptript>alert(1)</scscriptript>
完美通关。
level-8
这关看到了和前面完全不同的东西,看到这个友情链接,有点像href了
把"><a href='javascript:alert(1)'>
放进去,没什么用还是被过滤。
其实这关要用到编码绕过,利用unicode在线编码网站https://www.matools.com/code-convert-unicode
由于这里本身存在<a href=
所以只需要编码javascript:alert(1)
,编码后为javascript:alert(1)
放进去试试看。完美通关
level-9
直接放第八关payload,没用。看一下后端,不仅有好多过滤,还多了一个strpos()函数,strpos()介绍,说是查找字符串在另一字符串中第一次出现的位置,在这关中就是用来判断有没有http://
所以构造一个payload为:
javascript:alert('xsshttp://)'
but页面还是没有反应,原因是忘了还有过滤,所以用第八关的思路将关键词javascript部分字符编码一下:
javascript:alert('xsshttp://')
level-10
没有输入框了,url上玩一波payload也没什么用
<script>alert(1)</script>
毫无头绪,看一下后端吧。看到了这些东西。
可以看到这关是要通关t_sort表单提交数据。而且有一个函数str_replace,不懂得可以看看str_replace()函数介绍,总之告诉我们payload中是不能含有<>的。所以构造一个"onclick="alert(1)
放进url中,注意是要用t_sort提交数据:
?keyword=<script>alert(1)</script>&t_sort="οnclick="alert(1)
但好像没有地方点击来触发onclick啊,所以还得把hidden取消掉。
修改一下payload:
?keyword=<script>alert(1)</script>&t_sort=" type="text" οnclick="alert(1)
发现出来了一个文本框,点击一下,完美通关。
level-11
第十关后难度就很大了,我们直接查看源码吧。
这两个地方让人怀疑。先看$str11=$_SERVER['HTTP_REFERER']
,HTTP_REFERER是获取http请求中的Referer字段的,也就是链接到当前页面的前一页面。从这里下手。用burp抓个包看看。
可以看到没有referer的消息,构造一个referer发送过去可以看到被t_ref获取了。
尝试构造代码:
" οnclick="alert(1)" type="text
直接在proxy模块数据包中加上referer:" onclick="alert(1)" type="text
发送过去,页面出现一个文本框,点击一下,通关。
再看一下前端,出现了这样的信息
level-12
直接看源码,这次是$_SERVER['HTTP_USER_AGENT']
抓个包先。看到UA消息让t_ua获取了。
直接把UA内容改为" onclick="alert(1)" type="text
发送,通关辣!
level-13
先看源码,有了前两关的经验,一眼就能发现问题,没错就是cookie。
老规矩先抓包。cookie消息被t_cook接收。这里还多了一个参数user,所以用hackbar和modify headers构造的同学要注意一下。
我们直接修改cookie为user=" onclick="alert(1)" type="text
level-14
6,啥都没有。
看源码吧。只有这点,好像要跳转,可这个网站怎么也打不开。
F12看了一下网络有一个404的东西,网站跳转不了这关也没法完成。
网上查了一查,是什么exif xss,有兴趣的同学可以看一下exif xss 复现
level-15
啥都没有。。
直接看源码
ng-include是AngularJS的指令,完全没有接触过,有兴趣的可以看看AngularJS ng-include 指令,总之就是类似于include函数,用于包含外部的 HTML文件。还要注意:
1.ng-include,如果单纯指定地址,必须要加引号
2.ng-include,加载外部html,script标签中的内容不执行
3.ng-include,加载外部html中含有style标签样式可以识别
源码中可以发现是通过src传参,还对 < > 进行了过滤,既然类似于包含,那我们就包含一个level1.php,构造payload:
'level1.php?name=<a href="javascript:alert(1)">'
点一下蓝色的标签,完美通关。
level-16
url里面写上最简单的xss先试一试。
发现<script>alert(1)</script>
变成了< >alert(1)< >
,看一下源码。发现是把script,空格,/,都转换成了 , 就是空格字符。
这里用onerror事件进行绕过
<img src=1 onerror=alert(1)>
这串代码意思就是如果在加载src给的图片时发生错误则执行 js。通过源码看到空格被过滤,那么最常用的就是用回车来代替空格。
<img
src=1
onerror=alert(1)>
回车的url编码为%0A,所以最终payload为:
<img%0Asrc=1%0Aonerror=alert(1)>
通关通关。
level-17
看一下url应该是arg01和arg02进行传参。
试一下onclick事件。
点一下图片会跳转发现没什么用。换成onmouseover试试。
鼠标移到图片上,成功通关。
level-18
一片黑。。。而且通关url看到和上一关一样用arg01,arg02传参。
继续用onmouseover事件
?arg01= onmouseover&arg02=alert(1)
,直接就过了???
level-19/20
url里还是有arg01和arg02传参,继续用上一关的payload。什么都没有。看一下前端,奥原来在双引号里,需要闭合。试了一下也没什么用,原因就是这里依然有htmlspecialchars()函数进行处理,所以无法成功闭合。
网上查了一下,要用到flash反编译,这方面的知识还是空白,先学习一下,后边再发出来。20关也是一样。有兴趣的同学可以看一下别的大佬的writeup:XSS-labs Level 19 Flash XSS
结语
这次的xsslabs通关耗费了挺多时间,由于本人才学疏浅,难免会有一些错误,希望大家能指正批评,如有疑问,可在下方留言,会第一时间进行回复!
感谢同学愿意花时间阅读这篇文章,希望可以对你有所帮助!