在线XSS-labs靶场:https://xssaq.com/yx/
靶场搭建
靶场是直接使用docker搭建的
- docker pull vulfocus/xss-labs
复制代码 启动靶场
- docker run -p 8005:80 vulfocus/xss-labs
复制代码 浏览器访问IP+8005

windows搭建
使用phpstudy_pro搭建
下载地址:https://github.com/do0dl3/xss-labs

解压文件放入www文件夹下,开启服务

浏览器访问127.0.0.1/xss-labs

level1

仔细观察看到在url栏中传了一个参数,所以在该参数处进行尝试传入其它参数


发现页面有所变化,在 “欢迎用户” 后有一个显示位能对传入的参数进行输出
构造poc- [/code][img]https://i.328888.xyz/2023/04/26/ivXsCU.png[/img]
- 源码分析
- 程序将用户以GET方式提交的参数name赋给$str获取name的值,直接返回前端使用,没有对其进行过滤导致恶意代码可以在前端执行
- [img]https://i.328888.xyz/2023/04/26/ivXvXv.png[/img]
- [size=6]level2[/size]
- [img]https://i.328888.xyz/2023/04/26/ivgLMd.png[/img]
- 来到第二关有搜索框,直接使用第一关的poc,没有弹窗,代码原样输出
- [code]
复制代码
右键查看源码发现都被过转义了

回到页面F12定位到搜索框,发现是标签可以利用
利用:闭合标签

构造poc:
源码分析
程序没有对value属性使用htmlspecialchars() 函数进行处理,只对处进行过滤处理
知识补充

level3

先输入字符串test进行尝试,传入的参数和搜索框的一样

查看源代码和第二关差不多

使用第二关的poc没有弹窗

查看源代码,发现两处都被HTML实体化,可以推测这两处都使用了htmlspecialchars()函数
标签无法闭合,可以绕开标签去使用新标签,标签的一些特殊事件来执行js代码
使用单引号闭合属性value,添加事件执行js

poc- 'onfocus=javascript:alert('xss') >
复制代码 onfocus是javascript中在对象获得焦点时发生的事件,最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了

源代码分析
刚刚的推理正确,这两处都使用了htmlspecialchars()函数

level4

这个和上两关类似,直接丢入poc查看- [/code]查看源代码发现[size=5](标号1)使用了使用了htmlspecialchars()函数处理
- 标号2处< 和 >被删除
- [img]https://picgo-1314950753.cos.ap-hongkong.myqcloud.com/img/1678606403590-0d10d898-405d-4885-a13f-ce3a06ab006f.png[/img]
- 很明显和第三关差不多,使用事件来触发js,唯一不同的是使用双引号闭合
- poc
- [code]"onfocus=javascript:alert('xss') >
复制代码 填入poc点击搜索框触发事件

源代码分析
keyword参数的值赋给str变量,然后经过1处理将变量值中包含的符号删除
2处对变量值进行编码处理之后显示在页面之上
最后处将去除特殊符号后的变量值插入到标签的value属性值中

level5

此题和上一关卡变化不大,但不知道服务器端对其是怎么处理的,直接丢入poc查看源代码- [/code]根据上几题第一处很明显使用htmlspecialchars()函数处理过才返回到浏览器显示的
- 二处可以看到<script>标签被插入了一个_(下划线)符号
- 可以简单的推测一下服务器在2处使用了正则匹配,匹配到<script>标签插入_符号
- [img]https://picgo-1314950753.cos.ap-hongkong.myqcloud.com/img/1678607341941-30e94806-9b4d-4c4e-acbd-d0bf4860dad7.png[/img]
- <script>标签无法使用,可以使用其他的标签绕过,使用事件进行绕过测试
- [code]"onfocus=javascript:alert('xss') >
复制代码 测试发现没有弹窗,查看源代码onfocus事件也被插入了_(下划线)符号

再次尝试其他的标签:
使用新标签要先闭合标签构造poc- "><a target="_blank" href=javascript:alert("xss")>xss</a>
复制代码 填入poc,点击链接触发弹窗


源代码分析
1标号处GTE入参数给str,分别对on 和<script>进行了过滤,,过滤之后再见值传给了srt3

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |