chinda_fall_desu’s diary

竹内豊の日記

ヒューマンコンピューターインターフェースをもっと知りたいなー

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

コンテンツの最終更新日を示す。


(間違い等あればコメントよろしくお願いいたします。)