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

iso60001  1879天前

22.png

大家好,我将发布一系列关于javascript的安全文章,向你展示如何使用Sboxr来自动化识别DOM型XSS。为了更好的展示,我在https://domgo.at上搭建了DOM型XSS漏洞的10个演示,并且放出了简单的PoC。

这篇文章主要包含前两个演示的具体设置和利用方法。剩余的演示我将在接下来的文章中一一说明。此外,我们还有一个gitbook,包含海量的安全演示说明,网址为https://appsecco.com/books/

什么是DOM XSS / Client XSS?

纵观XSS漏洞的历史,DOM型XSS在安全人员的心中都占有特殊的地位。因为一般的XSS检测技术很难检测到这种类型的XSS漏洞,而且这种类型的漏洞也很容易出现使用了众多JS脚本的网站。

DOM型XSS并不会影响服务器本身返回的HTTP响应。只是单纯的改变客户端浏览器的行为。而且,DOM型XSS的攻击角度千变万化,没有具体的定式,完全取决于JS的复杂程度和所实现的功能。

手动或通过代码审查来检测DOM型XSS可能会花费大量时间。因此,最好能有一种自动化监控,测试DOM型XSS的工具。

Sboxr

Sboxr是一种用于调试Web应用的工具,特别是使用了大量javascript代码的Web应用。Sboxr主要通过往浏览器和服务器之间注入自己的JS代码(被称为DOM传感器)来监控JS的使用,源,接收器,变量分配,函数调用等。然后,它通过Web控制台向用户展示所监控数据的变化视图。

设置Sboxr和Chrome

我使用了 Ubuntu 18.04 来安装我们的工具以及Chrome 72。具体步骤如下:

  1. 获取Sboxr——https://sboxr.com/

  2. Sboxr还需要.NET Core SDK的支持。如果是Linux系统,可按照https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current进行安装;而对于Windows系统,可按照https://dotnet.microsoft.com/download上进行操作。

  3. 一旦安装完成,运行启动命令dotnet Sboxr.dll

  4. 然后你将在本地3333端口看到Sboxr的Web界面(用于管理和分析),3331端口是代理端口。

  5. 如果你希望使用Burp或其他代理,请到http://localhost:3333/console页面单击HTTP Sensor去设置代理的IP地址和端口(例如Burp或OWASP ZAP)。

33.png

设置完成后,我们还需配置浏览器向Sboxr发送流量(然后再转发到Burp或OWASP ZAP)。

44.png

Sboxr尚不支持SOCKS代理,因此你需要使用Burp或OWASP ZAP在某些特定的时刻拦截流量。

如果碰到HTTPS站点,Sboxr可能无法正常工作,因此我需要设置Chrome忽略证书错误--ignore-certificate-errors

在Linux上,命令如下:

mkdir -p ~/.chrome;/opt/google/chrome/chrome -incognito --ignore-certificate-errors --proxy-server=http=http://localhost:3331\;https=http://localhost:3331 --user-data-dir=~/.chrome

在Windows上,操作如下(假设是默认安装路径):

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -incognito --ignore-certificate-errors --proxy-server=http=http://localhost:3331;https=http://localhost:3331 --user-data-dir="C:\Users\%Username%\AppData\Local\Temp\TestChromeProxy"

Start

现在,我们要开始挖掘DOM型XSS了,首先从https://domgo.at开始。

以下我将展示我搭建的DOM型XSS演示的前两个,包括发现流程和利用方法,方便你创建自己的PoC。

演示1

1.进入https://domgo.at/,然后单击左侧的演示1,你可以看到很详细的漏洞原理以及简单的利用方式。

2.切换到Sboxr控制台,点击Sboxr侧栏的Code Execution

55.png

3.从HTML上下文中可以看出,存在某种输入数据源,涉及location.hash,并且输入的数据最终被接收器HTMLElement.innerHTML所利用。

66.png

4.单击View Code Execution,你会看到前端代码的详细执行流程。

77.png

5.通过单击View event location details图标,我们可以清楚地看到我们输入的数据在何处被接收器HTMLElement.innerHTML所利用。

88.png

6.为了展示location.hash到底有没有缺陷,我输入一个JS代码看最终是否执行。

7.我插入了<svg onload=alert(document.domain)>,最终成功弹框。PoC为:https://domgo.at/cxss/example/1?payload=abcd&sp=x#<svg%20onload=alert(document.domain)>

99.png

演示2

1.单击侧栏上的演示1以加载练习1

2.单击侧栏上的演示2以加载演示2。记住,不能直接通过URL访问,因为这涉及document.referrer属性。

3.我们按照与上一个演示相同的步骤开始,然后点击Sboxr侧栏中的Code Execution

100.png

4.从演示代码中可以看到,如果referrer中的URL中有一个payload参数,则直接将其提取并传递给接收器。

5.我可以使用简单的HTML页面构建我们的exploit。创建一个exercise2.html文件,其功能是导航到https://domgo.at/cxss/example/2。文件具体代码如下:

<html>
    <body>
        <h2>PoC for Exercise 2 of https://domgo.at</h2>
        <script>
            window.location="https://domgo.at/cxss/example/2"
        </script>
    </body>
</html>

利用方法是点击:http://127.0.0.1/exercise2.html?payload=<svg%20onload=alert(document.domain)>

6.在上一步点击后,页面将立即重定向到演示2,此时弹框出现。

110.png

这就是这篇文章的全部内容。我将在接下来的几天内发布后续内容!

参考

  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. Chrome命令行-https://dev.chromium.org/developers/how-tos/run-chromium-with-flags

感谢你的阅读!

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

最新评论

昵称
邮箱
提交评论