目录
一、web靶场-xss-labs靶机平台的搭建
1、将下载好的压缩包放置php的WWW根目录下
2、配置网站
3、启动MYSQL和Nginx
4、完成后我们就可以在浏览器输入127.0.0.1:8088进入靶场
二、xss-labs靶场通关攻略
第一关:
1、输入代码进行测试:源代码
我们直接将参数插入标题试一试
第二关:
1、尝试插入代码
2、查看网页源码
3、查看源代码
4、绕过思路
方法一:input标签
方法二:使用onclick点击事件
第三关:
1、尝试插入代码
2、查看网页源码
3、查看源码
4、绕过思路
方法一:onmouseover事件
方法二:onclick函数
第四关:
1、输入代码进行测试:
2、查看页面源码
3、查看源码
4、绕过思路
方法一:onmouseover标签:
方法二:onfocus标签:
第五关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
4、绕过思路
第六关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
4、绕过思路
第七关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
4、绕过思路
第八关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码:
4、绕过思路
方法一:
原理:
第九关:
1、输入代码进行测试
2、查看网页源码
3、查看源码
4、绕过思路
方法一:
方法二:
第十关:
1、输入代码进行测试
2、查看网页源码
3、查看源码
4、绕过思路
方法一:
方法二:
第十一关:
1、输入代码进行测试
2、查看网页源码:
3、查看源码
4、绕过思路
方法一:
方法二:
第十二关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
4、绕过思路,参考第十关
方法一:
方法二:
第十三关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
4、绕过思路
方法一:
方法二:
第十四关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
4、绕过思路
第十五关:
1、输入代码进行测试
2、查看网页源码
3、查看源码
4、绕过思路
方法一:
方法二:
第十六关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
4、绕过思路
方法一:
方法二:
第十七关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
< embed >:外部内容嵌入元素
4、绕过思路
方法一:
方法二:
第十八关:
1、输入代码进行测试:
2、查看网页源码
3、查看源码
4、绕过思路
第十九关:
1、不管了,直接查看源码
2、绕过思路
第二十关:
1、直接查看源代码
2、绕过思路
githhub下载连接:https://github.com/do0dl3/xss-labs
配置环境:
php小皮面板下载:小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp.cn)
具体配置教程:VScode的PHP远程调试模式Xdebug奈何@@的博客-CSDN博客
这里我为了区别其他配置环境,新建了一个网站,
注意:
端口号选择一个不被占用的端口
根目录:‘\phpstudy\phpstudy_pro\WWW\xss-labs-master’
最好使用5.xx本版
通关成功!!!
过关总结: JS弹窗函数alert()
可以看到这一关多了一个搜索框
我们尝试注入:
可见一些关键字可能被过滤了
htmlspecialchars函数对<>实体化转义
构造闭合input标签,将导致<转义的”闭合住,再次进行XSS注入
">
aa"οnclick="alert(1)
点击搜索框:
通关成功!!!
本关小结:闭合绕过
个人感觉是第一关和第二关的结合体
"'
但是我发现即使闭合后提交搜索仍旧无法撤销,可以看到点击搜索框提交无法触发XSS
onmouseover事件的效果是当我们的鼠标碰到input标签的位置,也就是搜索框时,会执行onmouseover事件。最常与 、
' οnmοuseοver=javascript:alert(1) '
提交后我们把鼠标移到搜索框触发onmouseover事件。
aa’οnclick=‘alert(1)
点击搜索框:
通关成功!!!
本关小结: onfocus和onclick可以绕过html实体化(即<>号的过滤)
我们尝试使用onmouseover进行XSS测试
无法触发
可见这关将双引号给过滤了
过滤< > 大于小于号
我们尝试使用双引号进行闭合
" οnmοuseοver=javascript:alert(1) "
" οnfοcus=javascript:alert() "
通关成功!!!
本关小结:onmouseover标签和onfocus标签+双引号闭合绕过
尝试上一关XSS注入漏洞方式:
尝试上一关XSS注入漏洞方式:发现on 被过滤
尝试用
通关成功!!!
本关小结:大小写法绕过str_replace()函数
老规矩,把上一关的代码进行测试:
可以发现,script直接变成了空值
将所有字母转小写
过滤以下关键字:script、on、src、data、href
我们换个思路——双写来对应替换成空值这一注入绕过问题
例如:script,可以写成scscriptipt,当script被删掉的时候,就变成了script
注意这个加入的script不能分开,识别到后这个加入的script会被替换成空值,剩下的部分自动拼接,执行时空格会被自动忽略。
">
alert(1)
通关成功!!!
关小结:双拼写绕过删除函数
输入任意字符,查看其输出路径:
可见在href下输出
尝试使用javascript注入:
javascript:alert(1)
发现javascript被过滤了
尝试大小写绕过:
发现大小写也被过滤:
将所有字母转换成小写
将单引号 ' ' 替换为实体字符双引号 " "
过滤以下关键字:script、on、src、data、href
尝试将javascript编写成urlcode代码进行绕过
javascript:alert(1)
javascript%3Aalert%281%29
绕过失败,无法解析
尝试利用利用href的隐藏属性自动Unicode解码,插入一段js伪协议尝试
编码顺序:urlcode html unicode javascript
因此,在使用html实体编码转义后javascript后,执行时首先将html 转换成javascript,从而绕过
javascript:alert(1)
可见应该javascript已经插入到href中:
通关成功!!!
本关小结: href属性自动解析Unicode编码
aaaa
连接不合法?那我们加上合法连接模式
http://www.baidu.com JavaScript:Alert(1);
可见javascript被过滤了
可以看到和上一关差不多:
将所有字母转换成小写
将单引号 ' ' 替换为实体字符双引号 " "
过滤以下关键字:script、on、src、data、href
但是其中加了一个if条件判断语句,如果传入的值中没有http://就会返回false
如果我们要想构造payload进行绕过,必须加入http://字符,但同时还要注释掉,否则无法触发
由于javascript被过滤了,我们尝试将script进行html编码,尝试绕过,同时将http://进行注释,从而构造payload进行绕过
Javascript:Alert(1);//http://
没有报错
绕过成功!!!
将http:// 放在alert(’ ‘)进行注释:
javascript:alert('http://'
绕过成功!!!
本关小结:将javascript进行编码绕过,同时将指定必须要的字符http://加入并且注释掉即可
这一关没有input,我们首先在浏览框输入代码进行测试
可以看见这一关有三个隐藏表单
没办法,我们来查看以下源码吧
可以看到:
将所有字母转换成小写
过滤tsort
过滤>转义成空
过滤<转义成空
同时还有三个隐藏表单
我们将隐藏表单的关键字拿出来依次尝试:
关键字t_link,传参失败
关键字t_history,传参失败
关键字t_sort,传参成功
由此可见传参值是t_sort
由于这里的输入框被隐藏了,我们使用onclick标签。添加type="text"来构造payload进行绕过
http://127.0.0.1:8088/level10.php?t_sort=aaaaa%22%20type=%22text%22%20onclick=%22alert(1)
过关成功!!!
也可以使用onfocus事件构建payload进行绕过
http://127.0.0.1:8088/level10.php?t_sort=aaaaa%22%20onfocus=javascript:alert()%20type=%22text
过关成功!!!
本关小结:根据隐藏form表单的参数名,尝试哪一个是正确的传参值,之后在隐藏的input标签中插入type="text显示输入框,构造闭合payload进行绕过
没有反应
出现了熟悉的隐藏表单
可以看到:
将所有字母转换成小写
过滤tsort
过滤HTTP_ERFERER
过滤>转义成空
过滤<转义成空
同时还有四个隐藏表单
按照上一关的思路来
关键字t_link,传参失败
关键字t_history,传参失败
关键字t_sort,传参成功
关键字t_ref,传参失败
但是按照上一关尝试发现无法绕过:
发现这一关将双引号 " " 给转码了,导致无法闭合
我们换个思路,这一关有四个标签的值都做了隐藏处理,最后一个t_ref的标签是http头referer的参数
我们的传参思路出现错误,我们不应该在get里面传参,而是伪造http的head头,即REFERER进行传参
这时候我们需要使用一个很好用的渗透工具——Hackbar在firefox浏览器下安装老版本hackbar_奈何@_@的博客-CSDN博客
我们首先测试一下前三个是否能够在REFERER传参
在尝试t_ref下传参
可见传参成功
之后就和上一关思路大致相同
使用onclick标签,添加type="text"来构造http头进行绕过
Referer:"type="text" onclick="alert(1)
过关成功!!!
使用onfocus标签,构造一个http头进行绕过
Referer: " onfocus=javascript:alert(1) type="text
过关成功!!!
本关小结:本关主要是referer,伪造http的head头,在隐藏的input标签中插入type="text显示输入框,构造闭合payload进行绕过
又出现四个隐藏
根据上一关经验,肯定是User-Agent头,我们使用Hackbar工具插入测试代码
可见我们的猜想是正确的
可以看到:
将所有字母转换成小写
过滤tsort
过滤HTTP_USER_AGENT
过滤>转义成空
过滤<转义成空
同时还有四个隐藏表单
使用onclick标签,添加type="text"来构造UA头进行绕过
aaa"type="text" onclick="alert(1)
过关成功!!!
使用onfocus标签,构造一个UA头进行绕过
" onfocus=javascript:alert(1) type="text
过关成功!!!
本关小结:思路和10,11关大致相同,主要是http头部传参
没什么头绪,我们来看一下网页源码:
我们又看到了熟悉的配方——直接看一下cook
使用Hackbar进行测试
好了,到了这里思路就简单明了了
照例再查看一下源码
可以看到:
将所有字母转换成小写
过滤tsort
过滤>转义成空
过滤<转义成空
同时还有四个隐藏表单
参考10,11,12,13关
使用onclick标签,添加type="text"来构造USER头进行绕过
user=" onclick=alert() type="text
过关成功!!!
使用onfocus标签,构造一个USER头进行绕过
user=" onfocus=javascript:alert(1) type="text
过关成功!!!
本关小结:思路和10,11,12关大致相同,主要是http头部传参
由于这一关网站挂了,所以不在演示了
说一下思路吧
这一关是利用转跳的网站,在那网站去上传一个,属性里面含有xss代码的图片,以达到弹窗的效果
没什么思路,直接看一下网页源码
在如图所示的ng-include下输出,但是ng-include是什么?
ng-include指令就是文件包涵的意思,用来包涵外部的html文件,如果包涵的内容是地址,需要加引号
既然ng-include指令就是文件包涵的意思,而这一关需要我们自己走出去,,并且ng-include可以包涵的内容是地址,需要加引号
因此,我们尝试采用ng-include包含一下第一关的html,看能否绕过这一关
127.0.0.1:8088/level15.php?src='/level1.php'
可以看见我们已经将第一关的html包含到第十五关,那么接下来我们该怎么做呢?
我们先测试一下这一关过滤了那些东西
src= ' " <>%20 AAaa OnCliCK