利用Sboxr自动发现和利用DOM型XSS-Part 1
大家好,我将发布一系列关于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。具体步骤如下:
获取Sboxr——https://sboxr.com/
Sboxr还需要.NET Core SDK的支持。如果是Linux系统,可按照https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current进行安装;而对于Windows系统,可按照https://dotnet.microsoft.com/download上进行操作。
一旦安装完成,运行启动命令
dotnet Sboxr.dll
然后你将在本地3333端口看到Sboxr的Web界面(用于管理和分析),3331端口是代理端口。
如果你希望使用Burp或其他代理,请到http://localhost:3333/console页面单击
HTTP Sensor
去设置代理的IP地址和端口(例如Burp或OWASP ZAP)。
设置完成后,我们还需配置浏览器向Sboxr发送流量(然后再转发到Burp或OWASP ZAP)。
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
。
3.从HTML上下文中可以看出,存在某种输入数据源,涉及location.hash
,并且输入的数据最终被接收器HTMLElement.innerHTML
所利用。
4.单击View Code Execution
,你会看到前端代码的详细执行流程。
5.通过单击View event location details
图标,我们可以清楚地看到我们输入的数据在何处被接收器HTMLElement.innerHTML
所利用。
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)>
演示2
1.单击侧栏上的演示1以加载练习1
2.单击侧栏上的演示2以加载演示2。记住,不能直接通过URL访问,因为这涉及document.referrer
属性。
3.我们按照与上一个演示相同的步骤开始,然后点击Sboxr侧栏中的Code Execution
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,此时弹框出现。
这就是这篇文章的全部内容。我将在接下来的几天内发布后续内容!
参考
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
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
最新评论