从业者-XSS上下文-HTML标签之间-反射型XSS-大多数标签和属性被阻止
# 实验室:XSS上下文-HTML标签间的反射型XSS-大多数标签和属性被阻止
# 题目
此实验室在 搜索功能 中包含一个反射型的 XSS 漏洞,但其使用 Web 应用防火墙(WAF)来防范常见的 XSS 攻击向量。
若要解决实验室问题,请执行跨站脚本攻击,绕过 WAF 并调用print()
函数。
笔记
你的解决方案不能带有任何用户交互。另外,你在自己的浏览器中手动调用print()
无法解决实验室问题。
- name: 实验室-从业者
desc: XSS上下文-HTML标签间的反射型XSS-大多数标签和属性被阻止 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/cross-site-scripting/contexts/lab-html-context-with-most-tags-and-attributes-blocked
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
点击 “ACCESS THE LAB” 进入实验室。
映入眼帘的是一个熟悉的搜索功能。
尝试注入经典的script
载荷,该标签被阻止。
在XSS备忘单 (opens new window)中寻找可用的标签。
经过一段时间的尝试后,发现body
标签可以使用,但某些属性同样会被阻止。
<body onbeforeprint=console.log(1)>
最终,我发现onresize
事件会被放行,可以用来构造载荷。
<body onresize="print()">
在调整窗口大小时,事件中定义的 JavaScript 将会被执行。
但此时有一个问题,我们需要将载荷发送给受害者,他会乖乖地调整窗口大小吗?
问题先放一放,点击 “Go to exploit server” 进入漏洞利用服务器。
进入之后,先看下注意事项,确认一下上面的onresize
载荷是否适用于 Chrome 浏览器。确认过可用,没毛病。
将服务器的 “Body” 修改为攻击载荷,此处将存在漏洞的 URL 嵌入iframe
标签的src
属性中:
<iframe src="https://0a8a0009037475f28454c74e002800d3.web-security-academy.net/?search=<body onresize=print()>">
点击 “Store” 保存更改。
访问漏洞利用 URL,刚刚定义的iframe
被成功解析,但其中的 JavaScript 并没有被执行。
因为onresize
事件只会在窗口大小被更改时触发,而受害者自行调整窗口的概率太低,这个载荷显然是不合理的。
我们可以优化iframe
载荷,为其添加一个onload
事件:
<iframe src="https://0a8a0009037475f28454c74e002800d3.web-security-academy.net/?search=<body onresize=print()>" onload="this.width=1">
当iframe
标签被加载时,onload
事件会被触发 并自动将窗口大小修改为1
,而onresize
由于窗口大小发生变化,也会被触发 从而执行其中的 JavaScript。
点击 “Store” 保存更改。
再次访问漏洞利用 URL,在访问的一瞬间,函数 print 被成功调用。
回到漏洞利用服务器,点击下方的 “Deliver exploit to victim” 将攻击载荷发送给受害者。
发送之后,实验完成。
实验完成。