現在、Metasploit の補助モジュールを作成しようとしています。モジュールは基本的に、ルーターの管理ページへのアクセスを取得するために、複数の既定の資格情報を試行します。認証は Web、つまり 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 に置き換えたことに注意してください。Web ブラウザーを使用して、HTTPS 経由で実際に問題なく (証明書が信頼されていないため例外を追加する必要があることを除いて) ルーターに接続でき、ログイン ページが表示されます。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 が送信されます。
Metasploit の GitHub のこのページに基づいて、HTTPS Web サイトへの接続は基盤となるフレームワークによって処理されているという印象を受けました。そうではないと信じるように導く記事/チュートリアル/ソースは見たことがありません。send_request_cgiに関するドキュメントでは、HTTPS 接続を確立するための特定の要件は指定されていません。他の投稿には、私が抱えているのとまったく同じ問題はありませんでした。この時点で、OS、フレームワーク、または私が何かを有効にするのを忘れていると思われます。私が調べた他のモジュールは、HTTP Web サイトのみをターゲットにするか (疑わしい)、HTTPS 接続を特別に処理していません。
原因を特定するための助けをいただければ幸いです。
Metasploit のバージョン: フレームワーク: 4.9.3-2014060501 コンソール: 4.9.3-2014060501.15168
OS のバージョン: SMP Debian 3.14.5-1kali1 (2014-06-07)