本系列文章将会向你展示:怎样利用Sboxr自动识别单页面应用或JavaScript富应用上的DOM型XSS漏洞。为了更好的介绍,我搭建了一套DOM型XSS漏洞演练平台——https://domgo.at,上面有10个练习题和对应的POC。
本篇是第一部分,主要包含前两个练习题的介绍和解题方法。其他题会在之后的文章中介绍。
此外,所有练习题的解题方法会整合在一个gitbook中——https://appsecco.com/books/automating-discovery-and-exploiting-dom-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的复杂程度和实现的功能。
我们使用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端口是代理端口;
Sboxr目前不支持SOCKS代理,所以要用Burp或OWASP ZAP拦截流量。
因为缺少可导入的证书,Https站点可能不支持Sboxr,所以在命令行端口启动chrome时要带上--ignore-certificate-errors 标签来忽略证书错误(Firefox浏览器不支持通过about:config中的network.stricttransportsecurity.preloadlist选项来禁用证书校验,所以我们选择Chrome浏览器)。
这部分内容中,我们会在XSS漏洞演练平台上检测和利用DOM型XSS漏洞。打开https://domgo.at漏洞演练平台。
以下是每个练习题使用Sboxr的解题方法,以及基于源和接收器的POC。由于这些漏洞可以让读者看到正在执行的用户控制数据,所以在提交bug报告时,可以利用这些漏洞创建你自己的POC。
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)>。
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)>访问;
6.HTML页面会加载并立即重定向到练习题页面。这就表明Referrer属性是用户可控的,可以利用这个属性实现代码执行。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2020-1-22 09:31
被Green奇编辑
,原因: 图片过期,更新图片