ksnctf 9 Digest is secure!

#ksnctf 9 Digest is secure!
* 問題
    * http://ksnctf.sweetduet.info/problem/9
* Digest認証
    * HTTP認証の一つで、ユーザ名とパスワードをMD5でハッシュ化して送る
* pcap
    * Wiresharkを使ってみる
    * HTTPでソートし、順に見ていく
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416717/b622fc27-bea8-895f-6eda-e83fc2ad0249.png)
    * No. 7
        * 通信要求
    * No. 9
        * 401 Authorization Required
        * サーバがクライアントに、認証が必要なことを教えている
        * 認証領域（realm）やランダムな文字列（nonce）を返す
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416717/baefde26-8cbd-5847-24e3-1b2e6107c9a4.png)
    * No. 14
        * クライアントは認証のための情報を送る
        * realm、nonceはサーバから来た文字列をそのまま返す
        * responceはパスワードを含む文字列をMD5ハッシュ化したもの
    
             > A1 = ユーザ名 ":" realm ":" パスワード
>A2 = HTTPのメソッド ":" コンテンツのURI
>response = MD5( MD5(A1) ":" nonce ":" nc ":" cnonce ":" qop ":" MD5(A2) )

             ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416717/8d470179-8ac7-d20a-ac32-a150eac94467.png)
    * No. 16
        * サーバからの認証成功レスポンス
        * /~q9/flag.htmlにアクセスして認証成功するとフラグが見られそう
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416717/009cb411-3733-08da-e8ae-5c4cc3f46b2a.png)

    * いったんMD5でハッシュ化されたresponseを元に戻す
        * 使ったやつ
            * http://hashtoolkit.com/generate-hash/
        * 復号結果
            * MD5(A1): c627e19450db746b739f41b64097d449
            * MD5(A2): 31e101310bcd7fae974b921eb148099c
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416717/af2e3d3f-7aa8-e4bd-86fc-10046798602c.png)
        * MD5(A2)をさらに復号
            * A2をGET:/~q9/flag.htmlにしてハッシュ化してresponseとしてリクエスト送ればよさそう
            * MD5(A1)の復号はできなかった
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416717/3ecdf524-eb7a-a507-a594-c386a29328aa.png)
    * リクエストを作成して送信
        * Fiddler
            * httpやhttps経由のパケットを監視、改ざんするツール
                * https://www.telerik.com/download/fiddler
        * MD5(A2)
            * A2はGET:/~q9/flag.html
            * ffffdd8b8029499600f95a69beb239c2
        * response作成
            * [http://ksnctf.sweetduet.info:10080/~q9/flag.html](http://ksnctf.sweetduet.info:10080/~q9/flag.html)で「ユーザー名」にq9を入力して「ログイン」を押す
            * そのときのパケットをFiddlerで見る
                * ここでサーバからのレスポンスを使ってリクエストを作成する
            ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416717/5e4bf4e6-a28c-aaa3-1c99-c7b51f75e9f4.png)

            * responceの作り方
                * nonceはサーバから直前に返ってきたものを使う
                * ncはずっといっしょ
                * cnonceはランダム。直前で使ってたやつと同じでよい
                * 最後は全体をMD5でハッシュ化
            * responceの送信
                * Fiddlerの「Inspectors」の「Raw」の中身をコピー
                * 「Composers」の「Raw」に貼り付けて変更すべきところを変更
                * 最終的に送ったもの
                ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416717/7d7b003a-ea80-350c-497d-447d571e4ed6.png)
                * 認証成功しフラグゲット

* 参考リンク
    * https://qiita.com/STomohiko/items/85fc2264c54832c11cbc
    * https://ja.wikipedia.org/wiki/Digest%E8%AA%8D%E8%A8%BC
    * http://x68000.q-e-d.net/~68user/net/http-auth-2.html
    * https://szarny.hatenablog.com/entry/2017/08/26/123910
    * http://hashtoolkit.com/generate-hash/
    * https://troushoo.blog.fc2.com/blog-entry-93.html
    * https://qiita.com/taketakekaho/items/397bc6e9afa32329edd0