【Hack The Box】クライアント証明書を作成してごにょごにょ[LaCasaDePapel]
クライアント証明書作る当たりが曖昧だったので、簡単に残しておきます。
hackthebox
でLaCasaDePapel
というリタイアboxがあるのですが、そこのページがクライアント証明書を要求してくる。ので、クライアント証明書を作りたい。別脆弱性を使って認証局(CA)の秘密鍵を入手している状態です。
やること・手順
webページがクライアント証明書を要求してくるのでなんとか発行してページを閲覧したい。
- CAの秘密鍵が手に入ったのでこれを使う
- 自分用の鍵と証明書申請を生成
- webページから証明書内の公開鍵を入手
- CA秘密鍵, CA公開鍵, 自分の申請書より、自分のための公開証明書を作成(本来はCAで発行してもらう)
- ブラウザに設定しページにアクセス
用語・ファイルの説明
ファイル名には決まりはないのでこれに限らない。
用語・ファイル名 | 説明 |
---|---|
CSR(.csr) | 証明書署名要求。証明書の申請時に提出するファイル。このファイルに含まれる情報を元に証明書を発行 |
.crt | 認証局が署名した証明書(公開鍵を含む) |
pkcs12 | 秘密鍵と証明書を 1つのファイルに格納する形式。firefoxは.crt じゃダメらしいのでこの.p12 形式に変換する |
ca.key | 脆弱性をついて入手したCAの秘密鍵。本来は外から入手できてはいけない |
caca.key | 自分の秘密鍵。登録用に今回生成した |
caca.csr | 上で生成した鍵を登録申請するために使う。(公開鍵、所有者情報、秘密鍵を持っていることを示す申請者の署名が記載) |
casadepapel.crt | webページに登録されているCAの公開鍵(証明書) |
pipi.crt | 手元で生成した、クライアント証明書。CAの発行と同じ方法で作られる |
手順
$ls ca.key
CAの秘密鍵が入手されている状態
$openssl req -new -newkey rsa:2048 -nodes -keyout caca.key -out caca.csr
自分の秘密鍵caca.key
と証明書署名要求caca.csr
を生成
$openssl s_client -connect 10.10.10.131:443 -showcerts
対象ページの証明書を表示. その中から公開鍵(.crt)にあたる部分を抽出しcasadepapel.crt
として保存する。(手動) ブラウザから証明書をエクスポートしても良い。
*10.10.10.131は今回のboxの対象サーバ
$ openssl pkey -in ca.key -pubout| md5sum;openssl x509 -in casadepapel.crt -pubkey -noout| md5sum 71e2b2ca7b610c24d132e3e4c06daf0c - 71e2b2ca7b610c24d132e3e4c06daf0c -
入手した秘密鍵の対の公開鍵と証明書内の公開鍵が本当に一致するか確認。
$openssl x509 -req -in caca.csr -CA casadepapel.crt -CAkey ca.key -CAcreateserial -out pipi.crt -sha256
申請書、CAの公開鍵と秘密鍵から、自分のための公開証明書pip.crt
を作成。(CAの秘密鍵で証明書署名要求に署名する。(認証局による公開鍵への署名)本来は認証局がやる作業。で、サーバ側からCAに使われたと思われる秘密鍵を入手できたので、自分の鍵(caca)がCAに認証された様にできるはず)。これがおそらくクライアント証明書。
しかし、firefoxに証明書を登録するにはpkcs12
形式でないとダメらしいので、変換。
$openssl pkcs12 -export -in pipi.crt -inkey caca.key -out pipi.p12
pipi.crt
をPreferences
より登録して、対象ページにアクセスすれば自分をサーバ側が認証してくれる様になるはず。
参考
【用語明解】証明書の申請で登場する各種ファイルの見分け方 | 大手正規SSL証明書が定価よりMAX66%OFFから 【 SSLコンシェル 】