この大会は2020/9/25 12:00(JST)~2020/9/27 12:00(JST)に開催されました。
今回もチームで参戦。結果は13094点で808チーム中16位でした。
自分で解けた問題をWriteupとして書いておきます。
Source (Web)
User-Agentが数値で、4バイト未満、10000より大きい数値の場合、フラグが表示される。eを使ってべき乗を示すことによって条件を満たす。
$ curl -H "User-Agent: 9e9" http://web.darkarmy.xyz <html> <head> <title>SOURCE</title> <style> #main { height: 100vh; } </style> </head> <body><center> <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <div class="w3-panel w3-green"><h3>Correct</h3> <p>darkCTF{changeing_http_user_agent_is_easy}</p></div></center> <!-- Source is helpful --> </body> </html>
darkCTF{changeing_http_user_agent_is_easy}
linux starter (Linux)
ただ、ディレクトリを移動し、flag.txtファイルを見るだけ。
$ ssh wolfie@linuxstarter.darkarmy.xyz -p 8001 The authenticity of host '[linuxstarter.darkarmy.xyz]:8001 ([52.66.238.72]:8001)' can't be established. ECDSA key fingerprint is SHA256:c89dVKmOwWcuk3nhpaDFytMNR3U8Ph44wwIjTm8VECY. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[linuxstarter.darkarmy.xyz]:8001,[52.66.238.72]:8001' (ECDSA) to the list of known hosts. Password: Welcome to Ubuntu 16.04.7 LTS (GNU/Linux 5.4.0-1024-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage DDDDDDDDDDDDD kkkkkkkk CCCCCCCCCCCCCTTTTTTTTTTTTTTTTTTTTTTTFFFFFFFFFFFFFFFFFFFFFF D::::::::::::DDD k::::::k CCC::::::::::::CT:::::::::::::::::::::TF::::::::::::::::::::F D:::::::::::::::DD k::::::k CC:::::::::::::::CT:::::::::::::::::::::TF::::::::::::::::::::F DDD:::::DDDDD:::::D k::::::k C:::::CCCCCCCC::::CT:::::TT:::::::TT:::::TFF::::::FFFFFFFFF::::F D:::::D D:::::D aaaaaaaaaaaaa rrrrr rrrrrrrrr k:::::k kkkkkkkC:::::C CCCCCCTTTTTT T:::::T TTTTTT F:::::F FFFFFF D:::::D D:::::D a::::::::::::a r::::rrr:::::::::r k:::::k k:::::kC:::::C T:::::T F:::::F D:::::D D:::::D aaaaaaaaa:::::ar:::::::::::::::::r k:::::k k:::::k C:::::C T:::::T F::::::FFFFFFFFFF D:::::D D:::::D a::::arr::::::rrrrr::::::rk:::::k k:::::k C:::::C T:::::T F:::::::::::::::F D:::::D D:::::D aaaaaaa:::::a r:::::r r:::::rk::::::k:::::k C:::::C T:::::T F:::::::::::::::F D:::::D D:::::D aa::::::::::::a r:::::r rrrrrrrk:::::::::::k C:::::C T:::::T F::::::FFFFFFFFFF D:::::D D:::::Da::::aaaa::::::a r:::::r k:::::::::::k C:::::C T:::::T F:::::F D:::::D D:::::Da::::a a:::::a r:::::r k::::::k:::::k C:::::C CCCCCC T:::::T F:::::F DDD:::::DDDDD:::::D a::::a a:::::a r:::::r k::::::k k:::::k C:::::CCCCCCCC::::C TT:::::::TT FF:::::::FF D:::::::::::::::DD a:::::aaaa::::::a r:::::r k::::::k k:::::k CC:::::::::::::::C T:::::::::T F::::::::FF D::::::::::::DDD a::::::::::aa:::ar:::::r k::::::k k:::::k CCC::::::::::::C T:::::::::T F::::::::FF DDDDDDDDDDDDD aaaaaaaaaa aaaarrrrrrr kkkkkkkk kkkkkkk CCCCCCCCCCCCC TTTTTTTTTTT FFFFFFFFFFF Created BY: White_WOlf#1337 Last login: Sat Sep 26 08:14:23 2020 from 95.5.201.212 wolfie@9ad161dbc9ce:~$ ls bin imp wolfie@9ad161dbc9ce:~$ cd imp wolfie@9ad161dbc9ce:~/imp$ ls flag.txt wolfie@9ad161dbc9ce:~/imp$ cat flag.txt darkCTF{h0pe_y0u_used_intended_w4y}
darkCTF{h0pe_y0u_used_intended_w4y}
Simple_SQL (Web)
HTMLソースを見ると、コメントにこう書いてある。
<!-- Try id as parameter -->
id=0から順に試す。http://simplesql.darkarmy.xyz/?id=9にアクセスしたときにフラグが表示された。
Username : flag Password : darkCTF{it_is_very_easy_to_find}
darkCTF{it_is_very_easy_to_find}
haxXor (Cryptography)
フラグは"darkCTF{"から始まることを前提にXOR鍵を求め、復号する。
ct = '5552415c2b3525105a4657071b3e0b5f494b034515'.decode('hex') pre_flag = 'darkCTF{' key = '' for i in range(len(pre_flag)): key += chr(ord(pre_flag[i]) ^ ord(ct[i])) flag = '' for i in range(len(ct)): code = ord(ct[i]) ^ ord(key[i%len(key)]) flag += chr(code) print flag
darkCTF{kud0s_h4xx0r}
Pipe Rhyme (Cryptography)
n = 31415926535897932384626433832795028841 * 56129192858827520816193436882886842322337671
あとはそのまま復号する。
from Crypto.Util.number import * N = 0x3b7c97ceb5f01f8d2095578d561cad0f22bf0e9c94eb35a9c41028247a201a6db95f e = 0x10001 ct = 0x1B5358AD42B79E0471A9A8C84F5F8B947BA9CB996FA37B044F81E400F883A309B886 p = 31415926535897932384626433832795028841 q = 56129192858827520816193436882886842322337671 phi = (p - 1) * (q - 1) d = inverse(e, phi) m = pow(ct, d, N) flag = long_to_bytes(m) print flag
darkCTF{4v0iD_us1ngg_p1_pr1mes}
WEIRD ENCRYPTION (Cryptography)
16で割った商とあまりの組み合わせで暗号化しているため、逆算が可能。"c"と"cr"の区別には注意が必要。
main_string = 'c an u br ea k th is we ir d en cr yp ti on'.split() with open('Encrypted', 'r') as f: enc = f.read().rstrip() hex_msg = '' tmp = '' for i in range(len(enc)): tmp += enc[i] if tmp in main_string: if tmp == 'c' and enc[i+1] == 'r': pass else: hex_msg += hex(main_string.index(tmp))[2:] tmp = '' clear_text = hex_msg.decode('hex') print clear_text
復号結果は以下の通り。
Hello. Your flag is DarkCTF{0k@y_7h15_71m3_Y0u_N33d_70_Br3@k_M3}.
DarkCTF{0k@y_7h15_71m3_Y0u_N33d_70_Br3@k_M3}
Easy RSA (Cryptography)
nは不明だが、nが非常に大きく、eが小さいケースと判断し、Low Public Exponent Attackで復号する。
import gmpy from Crypto.Util.number import * e = 3 cipher = 70415348471515884675510268802189400768477829374583037309996882626710413688161405504039679028278362475978212535629814001515318823882546599246773409243791879010863589636128956717823438704956995941 m = gmpy.root(cipher, e)[0] flag = long_to_bytes(m) print flag
darkCTF{5m4111111_3_4tw_xD}
TRICKY BIT (Forensics)
ステガノグラフィの処理概要は以下の通り。
・オリジナルBMPファイル読み込み ・読み込んだファイルのヘッダサイズ分、新BMP用にセット ・隠し文字列のサイズの後に"$"を結合(A) ・(A)について埋め込み ・2進数にして各ビットごとにオリジナルBMPのLSBに埋め込み ・隠し文字列について埋め込み ・2進数にして各ビットごとにオリジナルBMPのLSBに埋め込み ・以降はオリジナルBMPの同じ箇所以降のデータを結合
このことを元にバイナリファイルのLSBからフラグを復元する。
HEADER_SIZE = 54 DELIMITER = '$' with open('lsb1.bmp', 'rb') as f: stego_image = f.read() counter = HEADER_SIZE size_data = '' while True: bin_data = '' for i in range(8): bin_data += str(ord(stego_image[counter]) & 1) counter += 1 c = chr(int(bin_data, 2)) size_data += c if c == DELIMITER: break print '[+] hidden size data:', size_data size = int(size_data[:-1]) flag = '' for j in range(size): bin_data = '' for i in range(8): bin_data += str(ord(stego_image[counter]) & 1) counter += 1 c = chr(int(bin_data, 2)) flag += c print flag
実行結果は以下の通り。
[+] hidden size data: 37$ DarkCTF{7H!5_0n3_was_4_l!ttl3_TRICKY}
DarkCTF{7H!5_0n3_was_4_l!ttl3_TRICKY}
Feedback (Feedback)
アンケートに答えたら、フラグが表示された。
darkCTF{Thanks_f0r_playing_darkCTF}