我目前正在尝试为 Metasploit 编写一个辅助模块。该模块基本上会尝试多个默认凭据来访问路由器的管理页面。身份验证是通过网络完成的,即 HTTP POST。
目前,该模块对于纯 HTTP 连接(即不安全的连接)按预期工作,但是每次通过 HTTPS(端口 443)进行的连接尝试都返回 nil。下面是 Metasploit 类中用于检索登录页面的函数:
def get_login_page(ip)
begin
response = send_request_cgi(
'uri' => '/',
'method' => 'GET'
)
# Some models of ZyXEL ZyWALL return a 200 OK response
# and use javascript to redirect to the rpAuth.html page.
if response && response.body =~ /changeURL\('rpAuth.html'\)/
vprint_status "#{ip}- Redirecting to rpAuth.html page..."
response = send_request_cgi(
'uri' => '/rpAuth.html',
'method' => 'GET'
)
end
rescue ::Rex::ConnectionError
vprint_error "#{ip} - Failed to connect to Web management console."
end
return response
end
尝试通过 HTTPS 连接时,第一个 send_request_cgi 调用返回 nil。没有异常被捕获或抛出。我已尝试使用 3 台不同的主机来确保问题不在于特定端点。我的所有 3 次尝试都没有返回响应。每次尝试时,我都将 RPORT 选项设置为 443;
RHOSTS 0.0.0.0 yes The target address range or CIDR identifier
RPORT 443 yes The target port
请注意,我已将真实 IP 替换为 0.0.0.0。使用网络浏览器,我实际上可以毫无问题地通过 HTTPS 连接到路由器(除了必须添加一个异常(exception),因为证书不受信任)并显示登录页面。使用 Wireshark,我试图查看生成的流量。我可以清楚地看到路由器没有发送任何内容。我注意到 3 次握手已完成并且正在发出 HTTP GET 请求:
GET / HTTP/1.1
Host: 0.0.0.0
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
服务器发送 3-4 个 ACK,然后发送一个 FIN/PUSH。
基于 this page在 Metasploit 的 GitHub 上,我的印象是与 HTTPS 网站的连接是由底层框架处理的。我还没有看到任何让我不相信的文章/教程/资源。关于 send_request_cgi 的文档没有指定建立 HTTPS 连接的任何特定要求。其他 posts没有遇到与我完全相同的问题。在这一点上,我怀疑操作系统、框架或我忘记启用某些东西。 Other modules我查看了要么只针对 HTTP 网站(我对此表示怀疑),要么没有对 HTTPS 连接进行任何特殊处理。
如果您能帮助确定原因,我们将不胜感激。
Metasploit 版本: 框架:4.9.3-2014060501 控制台:4.9.3-2014060501.15168
操作系统版本: SMP Debian 3.14.5-1kali1 (2014-06-07)
最佳答案
根据 this post on SecurityStreet ,解决方案是在初始化函数的 DefaultOptions 中将 SSL 设置为 true:
def initialize
super(
...
'DefaultOptions' =>
{
...
'SSL' => true
}
)
...
end
之后使用 HTTPS 连接到路由器。
关于ruby-on-rails - Metasploit:send_request_cgi 为 HTTPS 连接返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26150514/