利用Sboxr自动发现和利用DOM型XSS-Part 2

iso60001  2064天前

22.png

Part 1 —— https://nosec.org/home/detail/2421.html

大家好,这是我关于利用Sboxr自动挖掘DOM型XSS的第二部分。在这篇文章中我将继续讲述我所搭建的XSS演示网站https://domgo.at中的4个演示(演示3到演示6)。通过利用Sboxr,我可以自动化挖掘出这四个演示中的隐藏的DOM型XSS漏洞。

当然,我将详细讲述Sboxr的利用方法和漏洞发现流程,并为所挖掘出的XSS创建一个简单的PoC。如果你想了解更多关于安全方面的信息,欢迎光临我的gitbook,https://appsecco.com/books/

演示 3

在许多Web应用中,来自第三方应用的数据会通过接收器成为自身应用的一部分。在这种情况下,第三方应用的XHR端点就可以将恶意代码注入目标应用中。

即使XHR只限于同一站点,也需要验证数据的安全性。在现代应用中,有很多会直接接收未经检查的外部数据,并存储到数据库中,最终导致持久的DOM型XSS。

此练习涉及JSON端点的XHR请求,最终所请求的数据将回应到客户端,然后由HTMLElement.innerHTML接受,形成DOM型XSS。

1.在演示网站左侧点击“Exercise - 3”页面,然后往文本框中输入随机字符串,最后单击Execute Payload按钮。

33.png

2.其中涉及的JSON端点如下 https://domgo.at/data.json?payload=thanos

3.使用Sboxr你可以看到如下数据流

44.png

4.同时我们也可以准确的看到接收器中使用的JSON响应数据,方便创建exploit

55.png

5.最后,payload为<img src=1 onerror=alert(document.domain)>,直接输入到文本框中

66.png

演示 4

与XHR类似,websocket所传递的数据也并不是全可信,在缺乏安全过滤的情况下,很有可能导致DOM型XSS漏洞。

此演示涉及websocket请求所引发的漏洞,其请求的数据将直接返回到客户端,然后被接收器HTMLElement.innerHTML读取,形成XSS。

1.在“Exercise - 4”页面的文本框中输入随机字符串,然后单击Execute Payload按钮。

77.png

2.注意,此时的数据是由Websocketwss://domgo.at/ws提供的

3.使用Sboxr查看数据流

88.png

4.我们可以清楚看到接收器所接受的数据,借此创建exploit

99.png

5.最后,我们在文本框中输入<img src=1 onerror=alert(document.domain)>就可以看到弹框

100.png

演示 5

XHR,fetch API,websockets或postMessage等外部信道经常会被忽视,但都有可能成为DOM型XSS的源头。特别是当数据来自很多不同的来源时,就容易隐藏漏洞。作为安全人员,你必须留时刻意这些数据源。

本演示涉及一个postMessage,它将用户输入的数据发送到window.onmessage,然后再将数据发送到接收器HTMLElement.innerHTML,导致XSS漏洞。

1.在“Exercise - 5”页面的文本框中输入随机字符串,然后单击Execute Payload按钮

110.png

2.在这种情况下,数据源头是来自https://domgo.at(同源)的窗口消息。

3.在Sboxr中查看整条数据流

120.png

4.我们可以直接看到接收器所接受的数据,快速创建exploit

130.png

5.最后,我们在文本框中输入<img src=1 onerror=alert(document.domain)>,就可以看到弹框

140.png

演示 6

另一个不可信的数据源是浏览器的本地存储,例如localStoragesessionStorageIndexedDB。虽然攻击者无法直接控制DOM Storage,但可能能够通过其他HTML元素或JS将恶意数据导入存储中。而这些数据最终可能会被提取出来并渲染,形成DOM型XSS。

一个很好的例子就是Twitter子域上的DOM型XSS——https://hackerone.com/reports/297968

在此演示中,利用的数据源是HTML LocalStorage。页面的JS会从localStorage读取数据,并将其发送到HTMLElement.innerHTML,最终形成XSS。

1.在“Exercise - 6”页面的文本框中输入随机字符串,然后单击Execute Payload按钮。

150.png

2.此时,渲染到页面的数据来自HTML localStorage

3.我们可以在Sboxr查看从源到接收器的数据流

160.png

4.查看漏洞附近的代码,并创建exploit

170.png

5.最后,在文本框中输入<img src=1 onerror=alert(document.domain)>,就可以看到弹框

180.png

这就是这篇文章的全部内容。我将在接下来的几天放出第3部分的文章,再见!

参考

  1. Sboxr-https://sboxr.com

  2. DOM/Client XSS-https://www.owasp.org/index.php/Types_of_Cross-Site_sc ripting#DOM_ba sed_XSS_.28AKA_Type-0.29

  3. xm lHttpRequest(XHR)MDN-https://developer.mozilla.org/en-US/docs/Web/API/xm lHttpRequest

  4. window.postMessage()MDN-https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

  5. WebSocket API MDN-https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

  6. Fetch API MDN-https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API

  7. Web Storage API MDN-https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API

感谢你的阅读!

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://blog.appsecco.com/automating-discovery-and-exploiting-dom-client-xss-vulnerabilities-using-sboxr-part-2-3b5c494148e0

最新评论

昵称
邮箱
提交评论