利用Sboxr自动发现和利用DOM型XSS-Part 2
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
按钮。
2.其中涉及的JSON端点如下 https://domgo.at/data.json?payload=thanos
3.使用Sboxr你可以看到如下数据流
4.同时我们也可以准确的看到接收器中使用的JSON响应数据,方便创建exploit
5.最后,payload为<img src=1 onerror=alert(document.domain)>
,直接输入到文本框中
演示 4
与XHR类似,websocket所传递的数据也并不是全可信,在缺乏安全过滤的情况下,很有可能导致DOM型XSS漏洞。
此演示涉及websocket请求所引发的漏洞,其请求的数据将直接返回到客户端,然后被接收器HTMLElement.innerHTML
读取,形成XSS。
1.在“Exercise - 4”页面的文本框中输入随机字符串,然后单击Execute Payload
按钮。
2.注意,此时的数据是由Websocketwss://domgo.at/ws
提供的
3.使用Sboxr查看数据流
4.我们可以清楚看到接收器所接受的数据,借此创建exploit
5.最后,我们在文本框中输入<img src=1 onerror=alert(document.domain)>
就可以看到弹框
演示 5
XHR,fetch API,websockets或postMessage等外部信道经常会被忽视,但都有可能成为DOM型XSS的源头。特别是当数据来自很多不同的来源时,就容易隐藏漏洞。作为安全人员,你必须留时刻意这些数据源。
本演示涉及一个postMessage,它将用户输入的数据发送到window.onmessage
,然后再将数据发送到接收器HTMLElement.innerHTML
,导致XSS漏洞。
1.在“Exercise - 5”页面的文本框中输入随机字符串,然后单击Execute Payload
按钮
2.在这种情况下,数据源头是来自https://domgo.at
(同源)的窗口消息。
3.在Sboxr中查看整条数据流
4.我们可以直接看到接收器所接受的数据,快速创建exploit
5.最后,我们在文本框中输入<img src=1 onerror=alert(document.domain)>
,就可以看到弹框
演示 6
另一个不可信的数据源是浏览器的本地存储,例如localStorage
,sessionStorage
和IndexedDB
。虽然攻击者无法直接控制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
按钮。
2.此时,渲染到页面的数据来自HTML localStorage
。
3.我们可以在Sboxr查看从源到接收器的数据流
4.查看漏洞附近的代码,并创建exploit
5.最后,在文本框中输入<img src=1 onerror=alert(document.domain)>
,就可以看到弹框
这就是这篇文章的全部内容。我将在接下来的几天放出第3部分的文章,再见!
参考
Sboxr-https://sboxr.com
DOM/Client XSS-https://www.owasp.org/index.php/Types_of_Cross-Site_sc ripting#DOM_ba sed_XSS_.28AKA_Type-0.29
xm lHttpRequest(XHR)MDN-https://developer.mozilla.org/en-US/docs/Web/API/xm lHttpRequest
window.postMessage()MDN-https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
WebSocket API MDN-https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API
Fetch API MDN-https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
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
最新评论