ksnctfを使ってHTTP通信について学ぶ①(ksnctf-8)
今回はksnctfの問8を題材にする。
ksnctf - 8 Basic is secure?
ここで配布されているpcapファイルで得られるTCPストリームからHTTP通信について学ぶ。
GET /~q8/ HTTP/1.1 Host: ctfq.sweetduet.info:10080 Connection: keep-alive Authorization: Basic cTg6RkxBR181dXg3eksyTktTSDhmU0dB User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch Accept-Language: ja,en-US;q=0.8,en;q=0.6 Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.3
HTTP/1.1 200 OK Date: Sat, 26 May 2012 20:54:05 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Sat, 26 May 2012 12:24:46 GMT ETag: "422da-b8-4c0ef920b3f8e" Accept-Ranges: bytes Content-Length: 184 Connection: close Content-Type: text/html; charset=UTF-8 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Q8</title> </head> <body> <p>Congratulations!</p> <p>The flag is q8's password.</p> </body> </html>
HTTP通信はWebブラウザがWebサーバに送るHTTPリクエストメッセージとWebサーバがWebブラウザに送るHTTPレスポンスメッセージから成り立っている。
・HTTPリクエストメッセージはHTTP要求行とHTTPヘッダから成り立っている。
GET /~q8/ HTTP/1.1
上記がHTTP要求行である。ここではGETメソッドを使い、/~q8/を要求している。
・HTTPレスポンスメッセージはHTTP状態行とHTTPヘッダから成り立っている。
HTTP/1.1 200 OK
上記がHTTP状態行である。状態コード200はブラウザからのリクエストメッセージが正常であることを意味する。
HTTPヘッダには一般ヘッダ、要求ヘッダ、応答ヘッダ、エンティティヘッダがある。
・一般ヘッダ ... リクエスト・レスポンスの両方で使われる
Connection: keep-alive
これはこの通信の終了後も接続を閉じないことを意味する。
Connection: close
これはこの通信の終了後、接続を閉じることを意味する。
Date: Sat, 26 May 2012 20:54:05 GMT
これは日時を表す。
・要求ヘッダ ... リクエストメッセージ特有のヘッダ
Host: ctfq.sweetduet.info:10080
webサーバのホスト名とポート番号を指定。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch Accept-Language: ja,en-US;q=0.8,en;q=0.6 Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.3
どの形式を許容するかを設定。
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19
webブラウザについての情報を記述。
Authorization: Basic cTg6RkxBR181dXg3eksyTktTSDhmU0dB
認証情報を指定する。認証はBasic認証とDigest認証とがある。これはBasic認証であり、今回のflagはこれである。
・応答ヘッダ ... レスポンスメッセージ特有のヘッダ
Server: Apache/2.2.15 (CentOS)
webサーバについての情報を記述。
ETag: "422da-b8-4c0ef920b3f8e"
エンティティの識別子を記述。
・エンティティヘッダ ... エンティティに関するヘッダ
Content-Length: 184 Connection: close Content-Type: text/html; charset=UTF-8
コンテンツの設定を指定する。
Last-Modified: Sat, 26 May 2012 12:24:46 GMT
コンテンツの最終更新日を示す。
(間違い等あればコメントよろしくお願いいたします。)