目录
前言
XSS漏洞概述
XSS(跨站脚本攻击,Cross-Site Scripting) 是一种常见的Web安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,恶意脚本会在其浏览器中执行,可能导致数据窃取、会话劫持等安全问题。
XSS漏洞分类
存储型XSS(Stored XSS)
描述:恶意脚本被永久存储在目标服务器上,当用户访问包含该脚本的页面时,脚本被执行。
示例:攻击者在论坛帖子中插入恶意脚本,其他用户查看该帖子时,脚本在其浏览器中执行。
反射型XSS(Reflected XSS)
描述:恶意脚本作为请求的一部分发送到服务器,服务器将其反射回用户的浏览器并执行。
示例:攻击者构造一个包含恶意脚本的URL,诱使用户点击,脚本在用户浏览器中执行。
DOM型XSS(DOM-based XSS)
描述:恶意脚本通过修改页面的DOM结构来执行,不涉及服务器端的反射。
示例:攻击者利用前端JavaScript代码中的漏洞,直接修改DOM元素,导致恶意脚本执行。
通关日记
level1
分析
通过观察URL,发现时GET传参,修改传递的参数时,html页面发生改变,说明是直接传递到了html页面中,没有做过滤
解题
直接修改URL参数,注入恶意js语句
<script>alert(1)</script>
level2
分析
还是一样,我们先在URL处输入我们的恶意语句
http://127.0.0.1/xss/xsslabs/level2.php?keyword=<script>alert(1)</script>
发现没有触发,做了一个实体转换,将标签转换为了一个普通文本,所以在页面显示出来了。
之后我们查看网页源码
发现我们注入的语句被放到了value中,这样浏览器就不会执行我们的注入语句,我们要构造闭合
而这时有两种思路,一种是只闭合双引号,重新写一个属性。另一种是闭合标签,之后再写一个标签
"><script>alert(1)</script>
解题
方法一:闭合标签
"><script>alert(1)</script>
方法二:闭合双引号
" onclick="alert(1)
level3
分析
我们查看源码,发现第三关比第二关多了一个htmlspecialchars函数(将特殊字符转换为HTML实体)默认转义双引号,不转义单引号。加上ENT_QUOTES参数后转义单引号
解题
a' onclick='alert(1)
level4
分析
我首先尝试了一下闭合双引号和单引号,意外的是用第二关闭合双引号的方法竟然也能成功,那它与第二关有什么区别呢?所以我查看源码,发现第四关过滤了'<' '>' 。所以其实它的意思是,不允许我们闭合input标签,不能发生用户交互
解题
a' autofocus onfocus='alert(1)
level5
分析
查看源码,发现第五关过滤了script和on,而且不是过滤为空,那么我们就不能双写绕过了。strtolower函数也防止了我们大小写绕过。那我们就要考虑有哪些标签用不到on了
解题
"><a href="javascript:alert(1)">a</a>
level6
分析
查看源码,发现第六关过滤script、on、src、data和href,但是它没有转小写的操作。那我们就可以使用大小写绕过的方法
解题
a" Onclick="alert(1)
level7
分析
第七关过滤了script、on、src、data和href,也转小写了,但是他过滤是过滤为空,此时我们就可以双写绕过了
解体
a" oonnclick="alert(1)
level8
分析
在第七关的基础上,第八关对双引号做了过滤。我们先随便输入一个恶意语句测试一下
很好看出,input我们已经用不了了,我们可以将目光转向a标签。虽然他对script有过滤但是我们可以将javascript实体编码传入。
解题
javascript:alert(1)
javascript:alert(1)
level9
分析
第九关的源码比第八关多了一个对http://的检查如果没有就会这样输出
那我们不是只需要在第八关的基础上将alert(1)改为alert('http://')不就可以了吗
解题
javascript:alert('http://')
level10
分析
检查网页源码
发现他有三个input标签,但是网页却什么都没有,type=hidden是隐藏的。那我们应该测试这三个input看看有没有变化 。经过测试,只有t_sort有问题
http://127.0.0.1/xss/xsslabs/level10.php?keyword=well%20done!&t_sort=a%22%20type=%22text%22
那接下来我们在t_sort传值不就ok了吗?
解题
http://127.0.0.1/xss/xsslabs/level10.php?keyword=well%20done!&t_sort=a%22%20onclick=alert(1)%20type=%22text
level11
分析
第十一关与第十关相比,它的源码多了t_ref,并且在t_sort进行了过滤,那我们就要在t_ref上下文章了。我们可以从源码看出来 t_ref的value值其实就是HTTP_REFERER。而对于referer我们可以使用hackbar插件来进行设置。那我们把referer改成我们的恶意语句不就成功了?
解题
level12
分析
第12关和第11关相比,只是从修改referer变成了ua
解题
level13
分析
13关与前两关唯一的区别就是,t_cook的value值是接受的user,我们只需要在构造的时候加上user=即可。