家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

HTTPのメソッドをnetcatで実行する

概要

HTTPにはいくつかのメソッドがあります。この記事ではHTTPのメソッドについてまとめ、また、netcatを使って実際の実行結果を見てみます。

netcatとは

netcatとは、TCPもしくはUDP接続などを利用して、コマンドラインからデータを送受信するためのツールです。

 

 

 

HTTPのメソッド

メソッド 概要 備考
GET リソースの取得を行う GETのリクエストでリソースを更新するということは、原則としてあまりよろしくない
POST リソースの作成・更新等を行う  
PUT リソースの更新を行う あまり使われない
DELETE リソースの削除  
HEAD リソースのヘッダ情報のみ取得
(ボディ部分はなし)
 
OPTION サポートされるメソッドを取得する  
TRACE リクエスト内容をそのまま返す

主に動作の確認等で使用

Cross-Site tracingという、XSSとTRACEを利用してヘッダ内Authorizationに含まれる認証情報を盗む攻撃が有名

https://www.gsx.co.jp/tts/activity/110413.pdf

CONNECT Proxyに対しての通信で使用され、指定したサーバへの接続を要求するもの 主にProxyへの接続で使用

 

各メソッドの実行例

以前に構築したKali Linuxの検証環境で、上記のメソッドをKali Linuxからmetasploitable2に対して送信してみます。

 

GETメソッド実行結果

root@kali:~# echo -en "GET / HTTP/1.1\r\nUser-Agent: nc/0.0.1\r\nHost: 127.0.0.1\r\nAccept: */*\r\n\r\n" | nc 192.168.1.222 80
HTTP/1.1 200 OK
Date: Wed, 11 Nov 2020 11:12:55 GMT
Server: Apache/2.2.8 (Ubuntu) DAV/2
X-Powered-By: PHP/5.2.4-2ubuntu5.10
Content-Length: 891
Content-Type: text/html

<html><head><title>Metasploitable2 - Linux</title></head><body>
<pre>

_ _ _ _ _ _ ____
_ __ ___ ___| |_ __ _ ___ _ __ | | ___ (_) |_ __ _| |__ | | ___|___ \
| '_ ` _ \ / _ \ __/ _` / __| '_ \| |/ _ \| | __/ _` | '_ \| |/ _ \ __) |
| | | | | | __/ || (_| \__ \ |_) | | (_) | | || (_| | |_) | | __// __/
|_| |_| |_|\___|\__\__,_|___/ .__/|_|\___/|_|\__\__,_|_.__/|_|\___|_____|
|_|


Warning: Never expose this VM to an untrusted network!

Contact: msfdev[at]metasploit.com

Login with msfadmin/msfadmin to get started


</pre>
<ul>
<li><a href="/twiki/">TWiki</a></li>
<li><a href="/phpMyAdmin/">phpMyAdmin</a></li>
<li><a href="/mutillidae/">Mutillidae</a></li>
<li><a href="/dvwa/">DVWA</a></li>
<li><a href="/dav/">WebDAV</a></li>
</ul>
</body>
</html>

 

HEADメソッド実行結果

root@kali:~# nc 192.168.1.222 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Wed, 11 Nov 2020 07:08:40 GMT
Server: Apache/2.2.8 (Ubuntu) DAV/2
X-Powered-By: PHP/5.2.4-2ubuntu5.10
Connection: close
Content-Type: text/html

※リクエストを入力後Enter2回押下 

HEADは上記のようにリソースのヘッダ情報のみ応答が返ります。
HEADはバナー取得に使用されることがあります。

 

TRACEメソッド実行結果

root@kali:~# nc 192.168.1.222 80
TRACE / HTTP/1.0

HTTP/1.1 200 OK
Date: Wed, 11 Nov 2020 07:09:35 GMT
Server: Apache/2.2.8 (Ubuntu) DAV/2
Connection: close
Content-Type: message/http

TRACE / HTTP/1.0

※リクエストを入力後Enter2回押下  

 

余談:HTTPSでHEADを送る場合

HTTPSで上記のメソッドを送る場合はopensslコマンドを使用することで実行できます。

openssl s_client -host 宛先 -port 443

 

 

補足:ncの使い方

ncは上記のように、クライアントとして使用することができますが、サーバとしても使用することができます。
以下は、同一端末上でncを使い、サーバとクライアントとして通信させた例です。

f:id:iestudy:20201111201547p:plain

バインドシェルの実行例

オプションは以下の通り

  • -n:DNSによる名前解決を行わない
  • -l:リッスンモード
  • -v:標準メッセージの出力
  • -p:ポートの指定

上記はサーバに対してクライアントがアクセスし、サーバ上でコマンドを実行する構成で、バインドシェルと呼ばれる方法となります。

f:id:iestudy:20201111201728p:plain

バインドシェルのイメージ

 

これとは別にリバースシェルと呼ばれる構成があり、これはサーバ側が接続しに来たクライアント上でコマンドを実行する方法になります。

f:id:iestudy:20201111201816p:plain

リバースシェルのイメージ

f:id:iestudy:20201111201853p:plain

リバースシェル実行例


※ncのオプションで”-e /bin/bash”と指定することでシェルを操作することができます。

今回の試した環境では、Ubuntu側で"-e"が使用できなかったため、バインドとリバースで図が入れ替わっています。

 

参考にさせていただいたサイト

www.intellilink.co.jp