首页
论坛
课程
招聘
[翻译]使用Sboxr自动发现和利用DOM型XSS攻击漏洞(第一部分)
2019-4-30 16:10 10479

[翻译]使用Sboxr自动发现和利用DOM型XSS攻击漏洞(第一部分)

2019-4-30 16:10
10479
使用Sboxr自动发现和利用DOM型XSS攻击漏洞(第二部分)—— 待翻译
原文链接:https://blog.appsecco.com/automating-discovery-and-exploiting-dom-client-xss-vulnerabilities-using-sboxr-part-2-3b5c494148e0

使用Sboxr自动发现和利用DOM型XSS攻击漏洞(第三部分)——待翻译
原文链接:https://blog.appsecco.com/automating-discovery-and-exploiting-dom-client-xss-vulnerabilities-using-sboxr-part-3-2ea910dfb429


本系列文章将会向你展示:怎样利用Sboxr自动识别单页面应用或JavaScript富应用上的DOM型XSS漏洞。为了更好的介绍,我搭建了一套DOM型XSS漏洞演练平台——https://domgo.at,上面有10个练习题和对应的POC。

本篇是第一部分,主要包含前两个练习题的介绍和解题方法。其他题会在之后的文章中介绍。

此外,所有练习题的解题方法会整合在一个gitbook中——https://appsecco.com/books/automating-discovery-and-exploiting-dom-client-xss/


什么是DOM型XSS/Client型XSS

纵观跨站脚本攻击的历史,DOM/Client型XSS漏洞在安全人员的心中一直都有特殊的地位。一般的检测技术很容易忽略这种类型的XSS漏洞,而这种漏洞又很容易发生在使用了大量JS的应用中。

OWASP中定义DOM型XSS漏洞为:通过改变受害者浏览器中用于原始客户端脚本的DOM环境,使客户端代码以“意外”的方式执行。这意味着,不是因为页面本身(即HTTP响应)改变,而是因为DOM环境被恶意修改,导致客户端代码以不同的方式执行。

简而言之,当来自DOM源(比如location.hash)的用户输入,找到了通往DOM接收器(比如HTMLElement.innerHTML)的方法时,DOM型XSS漏洞就会出现。DOM型XSS攻击千变万化,因为DOM源和接收器的类型多种多样,取决于JS的复杂程度和实现的功能。

通过手动检测或代码审查的方式检测DOM XSS漏洞需要花费很多时间。所以需要一种自动化的检测工具,通过注入自己的JS来监视DOM的变化,通过浏览站点来获得所有源和接收器。

什么是Sboxr

Sboxr是一种用于调试Web应用的工具,特别是使用了大量JavaScript代码的Web应用。通过在浏览器和服务器之间注入自己的JS代码(称为DOM传感器),当站点被访问时,Sboxr可以对JS的使用、源、接收器、变量赋值、函数调用等内容实现监控,然后通过web控制台向用户展示所监控数据的变化视图。

设置Sboxr和Chrome

我们使用Ubuntu 18.04和Chrome 72安装工具。设置的步骤如下:

1.下载Sboxr——https://sboxr.com/download(Sboxr是收费的,可以用企业邮箱注册试用账号)

2.安装.NET Core SDK(需安装与Sboxr相匹配的SDK版本,译者安装v2.1.302)

Linux系统可参考:https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current

Windwos系统可参考:https://dotnet.microsoft.com/download

3.安装完成后,运行 dotnet Sboxr.dll 启动Sboxr;

4.然后会在3333端口开启Sboxr的web页面(用于管理和分析),3331端口是代理端口;

5.如果想链接到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 标签来忽略证书错误(Firefox浏览器不支持通过about:config中的network.stricttransportsecurity.preloadlist选项来禁用证书校验,所以我们选择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

这部分内容中,我们会在XSS漏洞演练平台上检测和利用DOM型XSS漏洞。打开https://domgo.at漏洞演练平台。

以下是每个练习题使用Sboxr的解题方法,以及基于源和接收器的POC。由于这些漏洞可以让读者看到正在执行的用户控制数据,所以在提交bug报告时,可以利用这些漏洞创建你自己的POC。


练习题1

1.打开https://domgo.at/,左侧菜单中选择练习题1,就可以用命令行启动Chrome中的第一个练习了;

2.切换到Sboxr控制台,点击导航栏中的“代码执行”;

 

3.在HTML内容中明显可以看到,数据源是Location.hash.property,导致漏洞的接收器是HTMLElement.innerHTML ;


4.点击“代码执行”图标打开“代码执行详细信息”窗口;

 

5.点击“查看事件位置详细信息“图标,可以看到在JS中的数据被接收器HTMLElement.innerHTML使用;


6.为了确保Location.hash.property是可利用的,让JS代码从源到接收器并查看执行情况;

7.该练习题的解题方法是,通过location.hash属性传送<svg onload=alert(document.domain)>。最终的漏洞利用POC是——https://domgo.at/cxss/example/1?payload=abcd&sp=x#<svg%20onload=alert(document.domain)>



练习题2

1. 左侧菜单中点击练习题1,加载第一个练习题;

2. 左侧菜单中选择练习题2,加载第二个练习题。必须通过点击操作进入题目,不能直接通过浏览器打开题目URL,因为本练习中的源是document.referrer属性;

3.像上一个练习题一样,点击Sboxr导航栏中的“代码执行”;


4.从漏洞代码中可以看出,如果referrer的URL中有一个名为 payload 的参数,则将其提取并传递给接收器;

5.可以通过以下简单的HTML页面实现漏洞利用。将该文件另存为 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>

6.HTML页面会加载并立即重定向到练习题页面。这就表明Referrer属性是用户可控的,可以利用这个属性实现代码执行。



这篇文章就先介绍到这。我会在接下来的系列文章中介绍其他练习题。

如果你喜欢这篇文章,请在评论中告诉我们。愉快的Hacking吧!!


参考:

1.Sboxr官网—— https://sboxr.com

2.DOM型XSS(维基百科)——  https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting#DOM_Based_XSS_.28AKA_Type-0.29

3.谷歌浏览器的命令行开关 —— 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

翻译:Green奇

校对:lumou



第五届安全开发者峰会(SDC 2021)议题征集正式开启!

最后于 2020-1-22 09:31 被Green奇编辑 ,原因: 图片过期,更新图片
收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 1818
活跃值: 活跃值 (5178)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2019-5-2 09:28
2
0
图片失效了
雪    币: 1450
活跃值: 活跃值 (23)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
Green奇 活跃值 2019-5-5 09:09
3
0
谢谢大大~图片已正常
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
freekey000 活跃值 2020-1-3 09:07
4
0
您好,可以更新下图片吗( •̥́ ˍ •̀ू )
雪    币: 1450
活跃值: 活跃值 (23)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
Green奇 活跃值 2020-1-22 09:33
5
0
freekey000 您好,可以更新下图片吗( •̥́ ˍ •̀ू )
抱歉哈,图片已更新
雪    币: 2497
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_xghoecki 活跃值 2020-1-26 19:08
6
3
是需要翻墙吗,网站打不开呢!
雪    币: 1450
活跃值: 活跃值 (23)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
Green奇 活跃值 2020-4-16 16:25
7
0
部分链接需要翻墙
游客
登录 | 注册 方可回帖
返回