DOM型xss靶场实验

作者 : admin 本文共1682个字,预计阅读时间需要5分钟 发布时间: 2024-06-8 共1人阅读

DOM型xss可以使用js去控制标签中的内容。

我使用的是一个在线的dom型xss平台,靶场链接:Challenges

DOM型xss靶场实验插图

第一关Ma Spaghet!:

Ma Spaghet! 关卡

DOM型xss靶场实验插图(1)

(new URL(location).searchParams.get(‘somebody’) || “Somebody”) + ” Toucha Ma Spaghet!” 这里的意思为获取url中的get参数somebody,如果有那么就设置h2的值为get参数的值,如果没有则设置h2的值为Somebody”) + ” Toucha Ma Spaghet!

(1):当get参数中存在somebody时,h2回显

DOM型xss靶场实验插图(2)

(2):当get参数中不存在somebody时,h2回显

DOM型xss靶场实验插图(3)

这里存在一个问题,somebody传谁就显示谁,那么我们传递给js代码给h2时:

DOM型xss靶场实验插图(4)

从上面可以看到,当?somebody=时,并没有弹窗,正常在h2标签中会执行,但是这里不能执行的原因为:

spaghet.innerHTML = (new URL(location).searchParams.get('somebody') || "Somebody") + " Toucha Ma Spaghet!"

h2的id为spaghet,我们使用innerHTML将我们get参数传递到h2标签中。

我们去官网查看可以发现:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/innerHTML

在html 5中指定不执行由 innerHTML 插入的 标签,这就是不能弹窗的原因。

DOM型xss靶场实验插图(5)

innerHTML 只过滤了

当我们将innerHTML 换为innerText后,再次传第相同的somebody参数。

传递后发现:并没有触发。所以innerText才是真正可以用来防止xss的。当我们写页面元素时建议使用innerText。

DOM型xss靶场实验插图(6)

第二关Jefff:

Jefff 关卡

DOM型xss靶场实验插图(7)

eval ---js中的一个执行函数。 setTimeout ---定时器,上面表示在1秒后执行定时器中的动作。 分析:我们可以看到给h2传参使用的是innerText,所以我们想在maname.innerText = ma上面做基本不可能了。 我们只能考虑在eval中做。

解决方法1: 尝试闭合双引号,之后在其中闭合单引号。所以我们需要在传递的变量jeff上做。

jeff=asd" ;alert(12);//

eval(`ma = "Ma name asd" ;alert(12);//"`)     --- // 可以将后面多出的双引号注释掉。

我们可以看到,传递的值jeff=asd” ;alert(12);// 时就会弹窗,说明这里存在DOM型xss的漏洞

DOM型xss靶场实验插图(8)

解决方法二:

可以使用连接符的方式来做:

jeff=asd" ;-alert(12)-" 

DOM型xss靶场实验插图(9)

第三关:


wey = wey.replace(/[]/g, ”) —– 过滤了 ;

解决方法:

闭合双引号。

wey=asd" onclick="alert(12)

DOM型xss靶场实验插图(10)

虽然上面可以触发,但是需要用户的参与(点击输入框),与自动触发不符合。所以我们需要使用下面的一个方法。

onfocus

是获取焦点的意思,获取焦点以后就可以触发它的动作(弹窗)。onfocus不可以自动聚焦,所以我们还需要一个函数autofocus来自动聚焦,这样就不需要用户的参与就可以触发了。

wey=asd" onfocus="alert(12)"  autofocus="true

DOM型xss靶场实验插图(11)

这样就可以不需要用户的参与就可以弹窗了。

第四关:



    



这段代码的意思为在2秒后对from表单进行提交,提交的位置就是ricardo.action 接收到的路径,路径由get参数中的ricardo提供。
在action中可以识别js伪协议,那么就好办了。

解决方法:

ricardo=javascript:alert(12)

DOM型xss靶场实验插图(12)

第五关:


smith = smith.replace(/[\(\`\)\]/g, '') -----过滤了( , ) ,反引号,转义字符。 分析: 虽然使用smith.replace进行了过滤,但是我们可以使用编码的方式来绕过它的过滤。

解决方法:

markassbrownlee=DOM型xss靶场实验插图(13)

本站无任何商业行为
个人在线分享 » DOM型xss靶场实验
E-->