ASIS CTF Quals 2015 writeup
先日のasis ctfに参加したので、1問だけですがwriteupを。
Broken Heart (Forensic 100pts)
pcapngファイルを渡されます。
先にチームメンバが内容を読んで報告してくれました。
曰く、Rangeで分割して画像ファイルをダウンロードしているとのこと。
早速pcapに変換してNetworkMinerでファイルを保存します。
計23のファイルをダウンロードしていました。
確かに、データ中にIDATやIENDの文字列が含まれているので、PNG画像のよう。
しかし、パケットのRangeを見ると、ただバラバラなわけではなく、重複した範囲が多くあるようでした。
ダウンロードした全ての情報を網羅する組み合わせを求めます(Excel使用)。
先頭の13バイトが失われていますが、PNGのヘッダなので以下のようなファイルで補えます。
最終的に、PHPで解きました。
<?php $baseDir = $argv[1]; $numarray = array(10,13,21,3,5,7,16,19,1,0,8,2,6,22,18,20,4,11); $index = array(-1,33988,9104,22383,33484,96140,86487,13305,81289,70388,68789,34989,85304,21658,97688,54314,57588,96123); $head = file_get_contents($baseDir."\head"); $fp = fopen($baseDir."\\result.png", "wb"); fwrite($fp, $head); for($i=0; $i<count($numarray); $i++){ fwrite($fp, substr(file_get_contents($baseDir."\LoiRLUoq[".$numarray[$i]."].octet-stream"), $index[$i]+1)); } fclose($fp); ?>
FLAG