49

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

 5 years ago
source link: https://www.freebuf.com/articles/web/199510.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ZBJzeiq.jpg!web

这一系列文章将为大家展示如何在单页或JavaScript富应用上,使用 Sboxr 实现DOM XSS漏洞的自动挖掘与利用。我们将以 https://domgo.at 靶场中的10个DOM XSS的小练习为例,并为检测到的问题创建简单的PoC。

本文包含了前两个练习的设置说明和解决方案。其余的我们将在后续的文章中陆续为大家呈现。我们还将在Appsecco books发布一个gitbook,其中包含了所有练习的解决方案,网址为 https://appsecco.com/books/

什么是 DOM XSS/Client XSS?

纵观XSS的历史, DOM或客户端XSS 在测试者和开发人员的心中都占有着特殊的地位。使用标准的XSS检测技术往往很难检测到它们,这种XSS漏洞大多发生在JS富应用上。

DOM型XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM型XSS漏洞。

Sboxr

Sboxr 是一个用于测试和调试Web应用程序的工具,尤其是那些拥有大量JavaScript的应用程序。Sboxr处在浏览器和服务器之间运作,并注入它自己的JS代码(被称为DOM传感器),来监控JS使用,源,接收器,变量分配,函数调用等。然后,它会通过其Web控制台展示用户控制的数据的视图。

设置 Sboxr 和 Chrome

这里我使用的系统为Ubuntu 18.04,浏览器为Chrome 72。你可以遵循以下步骤进行设置:

获取Sboxr – https://sboxr.com/

Sboxr需要.NET Core SDK的支持,你可以按照 https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current 上的说明,在Linux上进行安装。如果是Windows,请按照 https://dotnet.microsoft.com/download 上的说明进行操作

安装完成后,通过运行dotnet Sboxr.dll启动Sboxr

这将在3333端口上启动Sboxr Web界面(用于管理和分析发现的问题),端口3331为代理端口。

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

UBBfauN.jpg!web

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

2Uzuqqf.jpg!web

Sboxr目前尚不支持SOCKS代理,因此你需要使用Burp或OWASP ZAP拦截流量。

如果是HTTPS站点Sboxr可能无法正常工作,因为没有要导入的证书。因此,我们使用带有–ignore-certificate-errors标记的Chrome忽略证书错误。

在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"

DOM XSS 的检测和利用

下面我将为大家展示前两个DOM型XSS的小练习。

Exercise 1

打开 https://domgo.at/ ,然后单击左侧选项栏中的Exercise 1。

切换到Sboxr控制台,并单击Sboxr侧栏中的Code Execution

zMZZBrR.jpg!web

从HTML上下文中可以看出,数据源是location.hashproperty,执行的接收器是HTMLElement.innerHTML

VFr6Jz7.jpg!web

单击“View Code Execution”图标,你将看到代码执行的详细流程。

ZfyEJbI.jpg!web

通过单击View event location details图标,我们可以清楚地看到JS中我们的数据在哪里被接收器HTMLElement.innerHTML所使用

AZfiEze.jpg!web

为了展示location.hash属性是可利用的,我们通过源传递JS并让它到达接收器以查看它是否被执行。

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

YnEFZbj.jpg!web

Exercise 2

单击侧栏的Exercise 1以加载Exercise 1

单击侧栏上的Exercise 2以加载Exercise 2。记住,必须通过单击访问而不是直接打开URL,因为本练习中的源为document.referrer属性。

单击Sboxr侧栏中的“View Code Execution”图标

A36vUvM.jpg!web

我们从易受攻击的代码中可以看到,如果URL中有一个名为payload的参数,则将其提取并传递给接收器。

我们可以使用以下简单的HTML页面构建我们的exploit。将其保存为exercise2.html并在本地托管(nginx/Apache/python/node/anything),并通过 http://127.0.0.1/exercise2.html?payload= <svg%20onload=alert(document.domain)>链接进行利用:

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

该页面将加载并立即重定向到练习页面,因为referrer属性是用户可控的所以代码执行是可能的。

yymAra2.jpg!web

以上就是本文的全部内容,在接下来的几天内我们将陆续发布剩余的练习演示。感谢阅读!

参考文献

Sboxr — https://sboxr.com

DOM/Client XSS — https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting#DOM_Based_XSS_.28AKA_Type-0.29

Chrome 命令行 — https://dev.chromium.org/developers/how-tos/run-chromium-with-flags

*参考来源: appsecco ,FB小编secist编译,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK