复现DOM型XSS攻击(1-8关)

目录

第一关:​

分析代码:

第二关:

分析代码:

第三关:

分析代码:

第四关:

分析代码:

第五关:

分析代码:

第六关:

分析代码:

第七关:

分析代码:

第八关:

分析代码:


使用的靶场环境在这个网站XSS Game - Learning XSS Made Simple! | Created by PwnFunctionXSS Game: Learn Cross Site Scripting (XSS) by completing challenges!icon-default.png?t=N7T8https://xss.pwnfunction.com/

第一关:

分析代码:

是将网页中一个特定 <h2> 元素的内容更新为一个字符串,通过<script> 标签中的 JavaScript 代码获取当前网页 URL 的查询参数 "somebody"。如果查询参数存在,则将其值和字符串 " Toucha Ma Spaghet!" 连接;如果不存在,则使用默认值 "Somebody"

未传参

将somebody参数设置为aaa

可以看出它根据 URL 查询参数 "somebody" 的值直接填充到 <h2> 元素的内容

同时根据它的要求:不能和用户交互,必须要弹出1337

尝试使用<script>alert(1337)</script>

很明显的可以看出这块是有标签的但是就是没有触发

通过查看官方文档发现,官方觉得innerHTML这个标签是一个危险的标签,所以禁用了这个方法,但是也只禁用了这一个方法。

使用img标签

?somebody=<img src=1 οnerrοr="alert(1337)">

成功

第二关:

分析代码:

从当前网页的 URL 中获取查询参数 "jeff" 的值。如果没有该参数,则默认值为 "JEFFF"。初始化一个空字符串变量 ma。使用 eval 函数将 jeff 的值插入到字符串中,赋值给 ma,最后是设置一个延迟 1 秒的定时器,定时器到期后将 ma 的值设置为 maname 元素的文本内容。总的来说就是从 URL 中获取参数 "jeff",生成一个字符串并在 1 秒后显示在网页上。

我们可以考虑在eval中做。

?jeff=aaa";alert(1337);"

使用连接符-来做

?jeff=aaa"-alert(1337);-"

第三关:

分析代码:

通过URL中的查询参数提取名为wey的参数,如果没有这个参数,则使用默认值“do you know da wey?”。将wey参数中的所有尖括号去掉,在uganda这个<div>元素中插入一个文本输入框,并将其占位符设置为处理后的wey参数值。最终效果是在页面中显示一个带有占位符的文本框。

同样闭合双引号,使用onfocus和autofocus避免和用户交互

?wey=aaa" οnfοcus=alert(1337) autofocus"

第四关:

分析代码:

首先是定义一个表单,ID为“ricardo”,使用GET方法提交数据,然后在表单中添加一个文本输入框,名称为“milos”,默认值为“True”,设置表单的提交地址为当前URL中名为“ricardo”的查询参数的值,如果没有该参数,则默认为“#”,并且在2秒后自动提交表单,提交到指定的URL

这个就好办,用action中的javascript

?ricardo=javascript:alert(1337)

第五关:

分析代码:

和之前差不多,只不过通过正则表达式过滤了smith字符串中的括号、反引号和反斜杠。将处理后的 smith 内容设置为前面创建的 <h2> 标签的内部 HTML。

可以看到这关用的也是innerHTML标签,尝试使用img,发现括号被删除了

先对()进行实体编码,在对实体编码进行url编码

%26%2340%3b  ---(

%26%2341%3b  ---)

然后再使用location解析

?markassbrownlee=<img%20src=1 οnerrοr=location="javascript:alert%26%2340%3b1337%26%2341%3b">

第六关:

分析代码:

使用正则表达式将balls中的所有字母和数字替换为空字符串。最后使用eval函数执行balls中的代码。

这种类型的基本上有固定的解法,就是编码

https://jsfuck.com/ 网站

因为在url查询字符串部分(?后面的部分)时,+通常会被解码为空格,所以我们要对这些符号再次编码

第七关:

分析代码:

这一关比前一关过滤了更多的字符串中的特定字符(包括反引号、单引号、双引号、加号、减号、感叹号和方括号)替换为下划线 。同时还限制长度在50之内,将字符串中的 alert 关键字替换为下划线,最后使用eval执行处理后的字符

使用Function构造函数,Function()可以直接执行,如果不赋值的话在后加一个括号Function()(),就可以执行,同时因为js严格区分大小写,所以Function(/ALERT(1337)/)()识别失败,但是由于Function()()中可以定义函数,所以可以对前边定义的函数进行转小写操作

命令如下:

Function(/ALERT(1337)/.source.toLowerCase())()

第八关:

分析代码:

大体和前边一样,不过它使用 DOMPurify.sanitize 过滤框架对获取的内容进行清理,会把你的危险属性过滤完了,最后将结果赋值给ID为“boomer”的元素的内部HTML。因为这个框架是由全球最顶尖的一批安全研究员合力开发的,所以几乎不可能去绕过这个框架。所以这个innerHTML标签就利用不了。

我们就只能往下考虑,看这个setTimeout函数,setTimeout函数在2秒后调用名为ok的函数

但是我们执行后可以发现这个函数就不存在

同时这也是个注入点,使用dom破坏的技术。

?boomer=<a id=ok href="tel:alert(1337)">

这里之所以使用tel不使用javascript是因为javascript对于这个框架而言在黑名单里,所以我们就需要找这个框架的白名单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值