概要
HTTPにはいくつかのメソッドがあります。この記事ではHTTPのメソッドについてまとめ、また、netcatを使って実際の実行結果を見てみます。
netcatとは
netcatとは、TCPもしくはUDP接続などを利用して、コマンドラインからデータを送受信するためのツールです。
HTTPのメソッド
メソッド | 概要 | 備考 |
GET | リソースの取得を行う | GETのリクエストでリソースを更新するということは、原則としてあまりよろしくない |
POST | リソースの作成・更新等を行う | |
PUT | リソースの更新を行う | あまり使われない |
DELETE | リソースの削除 | |
HEAD | リソースのヘッダ情報のみ取得 (ボディ部分はなし) |
|
OPTION | サポートされるメソッドを取得する | |
TRACE | リクエスト内容をそのまま返す |
主に動作の確認等で使用 Cross-Site tracingという、XSSとTRACEを利用してヘッダ内Authorizationに含まれる認証情報を盗む攻撃が有名 |
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を使い、サーバとクライアントとして通信させた例です。
オプションは以下の通り
- -n:DNSによる名前解決を行わない
- -l:リッスンモード
- -v:標準メッセージの出力
- -p:ポートの指定
上記はサーバに対してクライアントがアクセスし、サーバ上でコマンドを実行する構成で、バインドシェルと呼ばれる方法となります。
これとは別にリバースシェルと呼ばれる構成があり、これはサーバ側が接続しに来たクライアント上でコマンドを実行する方法になります。
※ncのオプションで”-e /bin/bash”と指定することでシェルを操作することができます。
今回の試した環境では、Ubuntu側で"-e"が使用できなかったため、バインドとリバースで図が入れ替わっています。
参考にさせていただいたサイト