STEM CTF: Cyber Challenge 2019 writeup
はじめに
以前延期になったCTFが開催されていたのでやってみた。
In Plain Text Binary RE - 50 points
以下問題文。
Starring: Mary McCormack, Fred Weller, Nichole Hiltz, Todd Williams, Lesley Ann Warren, Paul Ben-Victor, Cristián de la Fuente, Rachel Boston
stringsコマンド実行したらFLAGがあった。
$ strings challenge MCA{y3ah_sur3_here_y0u_g0}
Turing Test Web - 50 points
以下、問題のページ。秘密の質問をパスすれば良いっぽい。
Alan Turingについてググって内容を埋めるだけで良いらしい。難しく考えすぎていて悲しい...
TODO Web - 100 points
アクセスしてみると以下のようなページがあった。
URLhttp://138.247.13.110/todolist/1000/
の1000
の箇所を書き換えると過去のTODOが見れるようだ。
あとは、1000のTODOの中からFLAGが書かれているページを探して終了。以下、solverです。
import requests import re baseurl = 'http://138.247.13.110/todolist/' for i in range(1000): payload = {'page': str(i)} url = baseurl + str(i) + '/' r = requests.get(url) print('[*]Requests: ' + url) if re.search(r'MCA', r.text): print(r.text) break;
http://138.247.13.110/todolist/678/
にFLAGがあったようです。FLAGはMCA{al3x4_5et_a_r3minder}
。
Warm UP Crypto - 50 points
競技時間以内に解けなかった。以下のwriteupを見たらちょっとした気づきがあったのでメモを残す。 github.com
以下問題文。
Description Everyone says that PGP is hard to use. Show ‘em how it’s done.
渡されたファイルは以下の4つ。
flag.html.enc key.enc mitre-ctf-2019-private.asc passphrase.txt
とりあえずパスフレーズを確認する。
$ cat passphrase.txt just use ctfd
適当に秘密鍵をインポートしてみる。
$ gpg --allow-secret-key-import --import mitre-ctf-2019-private.asc gpg: key CB374E23: secret key imported gpg: /home/vagrant/.gnupg/trustdb.gpg: trustdb created gpg: key CB374E23: public key "CTF Competitor (This is private key for a 2019 MITRE CTF Competitor and should not be trusted!) <fake@fake>" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) gpg: secret keys read: 1 gpg: secret keys imported: 1
秘密鍵のインポートができたら、key.encを復号する。パスフレーズは先ほど確認したものを入力すれば良い。
$ gpg key.enc You need a passphrase to unlock the secret key for user: "CTF Competitor (This is private key for a 2019 MITRE CTF Competitor and should not be trusted!) <fake@fake>" 2048-bit RSA key, ID 87BA2B5E, created 2018-12-03 (main key ID CB374E23) gpg: gpg-agent is not available in this session gpg: encrypted with 2048-bit RSA key, ID 87BA2B5E, created 2018-12-03 "CTF Competitor (This is private key for a 2019 MITRE CTF Competitor and should not be trusted!) <fake@fake>" gpg: key.enc: unknown suffix Enter new filename [key]: decrypted_key gpg: Signature made Mon Dec 3 22:48:09 2018 UTC using RSA key ID F2FFFCB4 gpg: Can't check signature: public key not found
これでkey.encの復号は完了。あとは、key.encを復号した結果の鍵を利用してflag.html.encを復号すれば良さそう。
しかし、flag.html.encが何のアルゴリズムで暗号化されているかどうかわからずに競技が終了してしまった。
どうやら鍵長とbinwalkの結果でアルゴリズムを特定することができたらしい。以下、binwalkの実行結果。
$ binwalk flag.html.enc DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 OpenSSL encryption, salted, salt: 0xF61A179-5D7CAE48
最初はファイルサイズからRSAあたりのアルゴリズムかと思っていたが、パスフレーズとソルトを鍵としたAESによって暗号化されているようだ。 ここまでできたら以下のコマンドを実行し、flag.html.encを復号する。
openssl aes-256-cbc -kfile decrypted_key -d -in flag.html.enc -out flag
最後に中身を確認して終了。
<!DOCTYPE html> <html> <head> <title>MITRE CTF 2019 Homepage.</title> </head> <body> <h1>This is an HTML Page</h1> <br> <p>Test Flag please ignore:</p> <p>MCA{0p3n55l_c0mm4nd_l1ne_ch4ll3ng3_fl4g}</p> <p style="display:none;">MCA{66b2f50cd2d6b9622c6be902ee2b0976badb4684}</p> </body> </html>
おわりに
最近のcrypto難しくないですか...
参考
https://wiki.openssl.org/index.php/Enc
https://github.com/swag-wafu/mitre-2019/blob/master/PGP.md
https://jemsec.blog.so-net.ne.jp/2013-02-10
https://gist.github.com/reggi/4459803#file-openssl-list-cipher-commands