• 【Burpsuite靶场】XSS专题精讲


    个人】:NEUQ大一学生

    专业】:通信工程 (Communication Engineering)

    个人方向】:网安、开发双管齐下

    座右铭】:真正的英雄主义,就是看清生活的真相后依然热爱生活 -- 罗曼.罗兰

     一、认识XSS(跨站脚本攻击):

    1、什么是XSS:

    XSS,全称 “Cross-Site Script”,burp官方的解释是允许攻击者与应用程序进行交互。攻击者可以利用XSS伪装成受害者,从而利用受害者身份执行其身份下能够执行的任何操作,包括查看其权限下任何数据,所以XSS的危害还是可大可小的,主要取决于受害者的权限大小。

    2、XSS如何进行攻击:

    XSS就是将恶意的JS脚本投放到受害者端,当受害者端触发到投放的恶意脚本后即会执行攻击者进行构造的操作,从而达到某种恶意目的。

    3、XSS的三种类型:

    (1)反射型XSS(Stored XSS):

    攻击者构造一个包含恶意脚本的链接,诱使用户点击该链接。当用户点击链接并将包含恶意脚本的参数发送给服务器时,服务器会将恶意脚本反射回给用户的浏览器,浏览器执行该脚本。这种攻击通常通过钓鱼链接、恶意广告等方式传播

    (2)存储型XSS(Reflected XSS):

    攻击者将恶意脚本代码存储在服务器端的数据库或文件中,当其他用户访问包含这些恶意脚本的页面时,恶意代码会被服务器返回并执行。这种攻击通常用于留言板、论坛、博客等允许用户输入内容的地方。

    (3)DOM型XSS(DOM-based XSS):

    这种类型的攻击不涉及服务器端,而是利用浏览器端解析HTML和执行JavaScript的过程中的漏洞。攻击者构造一个包含恶意代码的URL,当用户访问包含这个URL的页面时,浏览器在解析URL时会执行恶意代码,从而导致攻击。这种攻击方式涉及到客户端的DOM操作,因此称为DOM型XSS。

    (4)self型XSS:

    对进行的XSS攻击只有自己可见,其他人不受影响,故危害很小。


    二、基于source和sink的DOM型XSS:

    1、无编码操作的HTML上下文中的反射型XSS:

    (1)反射型XSS原理:

    反射型XSS就是应用程序接收到一个HTTP请求,然后以不安全的方式映射到响应中,例如某应用程序构造以参数值为索引的HTTP请求
    https://insecure-website.com/search?term=gift
    然后应用程序会将参数值拼接到响应中

    You searched for: gift


    现在还属于是正常的参数值,那么如果我们将参数值设置为这个呢
    https://insecure-website.com/search?term=
    映射到响应中就会变成这样

    You searched for:


    这条响应如果被受害者打开,在经过浏览器的解析后,遇到闭合的script标签,会将其中内容按照JS脚本来解析,这就使得攻击者达到了其目的,执行了恶意的JS脚本。

    (2)靶场复现:

    进入靶场,发现搜索框:

    搜索数字1并进行抓包,发包到repeater进行查看:

    可以发现,参数 search 的值可以被映射到响应中,那么我们可以修改参数 search 的值为 等恶意代码,则会造成大范围影响,每一个到达评论区接收到此响应的用户都会被波及。

    (2)靶场复现:

    在靶场评论区进行评论 

    证明:存在存储型XSS漏洞。


    什么是基于DOM型的XSS:

    DOM有一个 source 和 一个sink。

    source指可以接收用户输入或其他不受信任的数据的地方,例如 URL 查询字符串、表单输入等。

    sink指对这些输入进行处理的地方,如果没有适当的验证和过滤,可能导致安全漏洞,例如 document.writeinnerHTMLeval 等方法

    DOM型XSS漏洞就是在 source输入点处的输入在被传递给出口点sink的时候,被出口点sink处的函数执行导致触发XSS。

    3、基于location.search和document.write使用的DOM型XSS漏洞:

    (1)漏洞原理:

    location.search:返回 URL 中的查询字符串部分。攻击者可以构造一个包含恶意脚本的 URL,并将其发送给受害者。

    http://example.com/page?name=<script>alert('XSS')script>

    document.write():将字符串写入到 HTML 文档中,攻击者可以通过 document.write 在页面中直接插入恶意脚本。

    1. <script>
    2. var query = location.search;
    3. document.write(query);
    4. script>

    (2)靶场复现:

    进入靶场,查看页面源代码,发现了如下代码:

    审计代码:发现 URL中的search参数不经过任何处理便被赋值给 query,然后调用 trackSearch()函数直接将 参数query 拼接至标签中。

    我们可以构造 search参数的值对 标签进行闭合,再跟上想要执行的恶意代码,来构造payload。

    将 payload : ">  赋值给 search。

    闭合后效果如下:

    出现弹窗,证明存在XSS漏洞。

    4、HTML--select元素中基于location.search和document.write使用的DOM型XSS漏洞:

    (1)HTML中的元素,用于创建下拉列表,允许用户从预定义的选项中选择一个或多个值。下拉列表通常用于表单中,让用户从一组选项中进行选择。

     

    代码示例:

    执行效果:

    (2)靶场复现:

    进入靶场,view points,查看页面源代码:

    代码中使用 window.location.search 来获取URL中的 参数search 的值,并将其赋值给 store。

    然后利用document.write将其与标签 拼接后写入HTML文档。

    构造payload: &storeId=

    拼接后效果如下:

    出现弹窗,证明存在XSS漏洞。


    5、基于location.search和innerHTML使用的DOM型XSS漏洞:

    (1)什么是innerHTML:

    innerHTML 是一个 JavaScript 中的 DOM 操作方法,用于设置或获取指定元素的 HTML 内容。攻击者可能会尝试利用 innerHTML 来注入恶意脚本或其他不安全的内容到页面中,从而进行 XSS(跨站脚本攻击)等攻击。

    (2)innerHTML的特性:

    1、innerHTML不接受