XSS-labs(反射型XSS) 靶场 1-13关 通关

发布于:2025-03-24 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

前言

XSS漏洞概述

XSS漏洞分类

通关日记

level1

分析

解题

​level2

分析

 解题

 方法一:闭合标签

方法二:闭合双引号

level3

分析 

解题

level4

分析

解题

level5

分析

解题

level6

分析

解题

level7

分析 

解体

level8

分析

解题

level9 

分析

解题

level10

分析

解题

level11

分析 

解题

level12

分析

解题

level13

分析 

解题


前言

XSS漏洞概述

XSS(跨站脚本攻击,Cross-Site Scripting) 是一种常见的Web安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,恶意脚本会在其浏览器中执行,可能导致数据窃取、会话劫持等安全问题。

XSS漏洞分类

  1. 存储型XSS(Stored XSS)

    • 描述:恶意脚本被永久存储在目标服务器上,当用户访问包含该脚本的页面时,脚本被执行。

    • 示例:攻击者在论坛帖子中插入恶意脚本,其他用户查看该帖子时,脚本在其浏览器中执行。

  2. 反射型XSS(Reflected XSS)

    • 描述:恶意脚本作为请求的一部分发送到服务器,服务器将其反射回用户的浏览器并执行。

    • 示例:攻击者构造一个包含恶意脚本的URL,诱使用户点击,脚本在用户浏览器中执行。

  3. 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实体编码传入。

解题

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(1)

javascript:alert(1)

level9 

分析

第九关的源码比第八关多了一个对http://的检查如果没有就会这样输出

 那我们不是只需要在第八关的基础上将alert(1)改为alert('http://')不就可以了吗

解题

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;: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=即可。

解题


网站公告

今日签到

点亮在社区的每一天
去签到