ksnctfを使ってHTTP通信について学ぶ②(ksnctf-9)
ksnctfを解きながら、パケット解析について学ぶ。
今回はksnctfの問9を題材にして引き続き、HTTP通信について学ぶ。
ksnctf - 9 Digest is secure!
下記は今回のpcapファイルから得られたTCPストリームである。
GET /~q9/ HTTP/1.1 Host: ctfq.sweetduet.info:10080 Connection: keep-alive Authorization: Digest username="q9", realm="secret", nonce="bbKtsfbABAA=5dad3cce7a7dd2c3335c9b400a19d6ad02df299b", uri="/~q9/", algorithm=MD5, response="c3077454ecf09ecef1d6c1201038cfaf", qop=auth, nc=00000001, cnonce="9691c249745d94fc" 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:45 GMT Server: Apache/2.2.15 (CentOS) Authentication-Info: rspauth="42b425bdd3ad27086858915611646f7c", cnonce="9691c249745d94fc", nc=00000001, qop=auth Last-Modified: Sat, 26 May 2012 12:28:32 GMT ETag: "422e2-c0-4c0ef9f82a6c7" Accept-Ranges: bytes Content-Length: 192 Connection: close Content-Type: text/html; charset=UTF-8 <!DOCTYPE html> <head> <meta charset="utf-8"> <title>Q9</title> </head> <body> <p>Congratulations!</p> <p>The flag is <a href="flag.html">here</a>.</p> </body> </html>
・前回と異なる部分は下記のDigest認証の部分である。
Authorization: Digest username="q9", realm="secret", nonce="bbKtsfbABAA=5dad3cce7a7dd2c3335c9b400a19d6ad02df299b", uri="/~q9/", algorithm=MD5, response="c3077454ecf09ecef1d6c1201038cfaf", qop=auth, nc=00000001, cnonce="9691c249745d94fc"
それぞれの値の意味を整理する。
username ... ユーザー名
realm ... 認証に表示される文字列
nonce ... ランダム値
uri ... 認証ページのアドレス
algorithm ... アルゴリズム
response ... パスワードをもとに算出された値
qop ... コンテンツ保護の品質
nc ... nouce値の数
cnonce ... ランダム値
Digest認証を用いているのでパスワード部分は暗号化されている。ただし、通信自体は暗号化されないので、おそらくこの通信内容にflagが隠されているのだろう。
やはり、ほかのTCPストリームにヒントが隠されていた。
GET /~q9/htdigest HTTP/1.1 Host: ctfq.sweetduet.info:10080 Connection: keep-alive Authorization: Digest username="q9", realm="secret", nonce="bbKtsfbABAA=5dad3cce7a7dd2c3335c9b400a19d6ad02df299b", uri="/~q9/htdigest", algorithm=MD5, response="d9f18946e5587401c303b34e00a059eb", qop=auth, nc=00000002, cnonce="6945eb2a7ba8cf7f" 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:53 GMT Server: Apache/2.2.15 (CentOS) Authentication-Info: rspauth="022023eac9b9e023d50cca5eef69c287", cnonce="6945eb2a7ba8cf7f", nc=00000002, qop=auth Last-Modified: Sat, 26 May 2012 12:30:54 GMT ETag: "422e4-2b-4c0efa7f441cf" Accept-Ranges: bytes Content-Length: 43 Connection: close Content-Type: text/plain; charset=UTF-8 q9:secret:c627e19450db746b739f41b64097d449
(間違い等あればコメントよろしくお願いいたします。)