調査対象のサーバーで使われている公開鍵を入手した。噂によると、この鍵には問題があるらしいが...。なんとかして侵入しなければ。
Target: frt.hongo.wide.ad.jp
>Port: 30022
※対象のポート以外はアクセスしないようにしてください。
不備がある RSA 暗号を解読させる問題は CTF 頻出ですが、私は 20 年以上生きていて n = ○○ や e = xx という形で RSA 暗号を扱ったことがありません。脆弱な RSA 暗号を実際に解いてもらうことを目的として出題しました。
公開鍵の先頭を見ると ssh-rsa
と書かれているので、これがおそらく RSA 暗号の公開鍵であることがわかります。ということは、この鍵の正体は n と e のはずです。また、鍵の末尾にはtsukushi@frt.hongo.wide.ad.jp
と書かれているので、この鍵の所有者がtsukushi
であろうことも推定ができます。
まず、この鍵が文字列のままではよくわからないので、ここから n と e を取り出します。AAAA
から始まる鍵の本体を base64 で decode すると、公開鍵のフォーマットを定めたRCF4253に従うバイト列になるので、これをもとに n と e を計算します。
あるいは単にssh-keygen -f crackssh.pub -e -m pem | openssl asn1parse
としてもよいです。
n = 360925413365609656207284763303112593050686426607629131354843699618905677197872793512380288223361149508460688151102823348462592916817609977273908821217493993702786929282477487755465976082059834867631026295714550319202482180891845062064382568022072228888091051431136923983143306662931216184662445381040847666201 e = 248940659700671391171916045022225211367167934215525303038734152650593067612113589541083076628705613883775652505492831370527586438096113903892713520850387855997035509546247913887222055672708066391999421835495881798128330308530099218984443115901043292942963247939575084326452874538239309850357410618060448737279 であることがわかります。 e の値がとても大きいので、Wiener's attack が可能なのではないか? と思えてきます。 Wiener's attack は、RSA 暗号の秘密鍵 d の値が小さいときに成立する攻撃です。今回 e が異常に大きいということは、相対的に d は小さいのではないかと期待できます。Wiener's attack の実装はインターネットに落ちています。私はhttps://github.com/pablocelayes/rsa-wiener-attackを使わせていただきました。これにより、 d = 23740595481413555083001316385586537295798010164154043863363374388086679976575 であるとわかります。
これにて秘密鍵の情報が入手できたので、実際に ssh が読めるカタチに鍵のフォーマットを整えていきます。
RFC を見ながら頑張ってもいいですし、https://github.com/ius/rsatool.gitとかを使ってもいいです。
最終的に鍵を作成したら、ssh -i <<復元した秘密鍵>> -p 30022 tsukushi@frt.hongo.wide.ad.jp
とすることで、サーバーにログインできます。ログイン先にはflag.txt
が置かれており、この中身が答えです。
TsukuCTF{D0nt_use_w34k_RS4_key_generat10n}