iwasiblog

イワシブログ - Activity log of an iwasi -

ASIS CTF Quals 2015 writeup

先日のasis ctfに参加したので、1問だけですがwriteupを。

Broken Heart (Forensic 100pts)

pcapngファイルを渡されます。
先にチームメンバが内容を読んで報告してくれました。
曰く、Rangeで分割して画像ファイルをダウンロードしているとのこと。

早速pcapに変換してNetworkMinerでファイルを保存します。
計23のファイルをダウンロードしていました。

f:id:kuroiwasi:20150513015304j:plain

確かに、データ中にIDATやIENDの文字列が含まれているので、PNG画像のよう。
しかし、パケットのRangeを見ると、ただバラバラなわけではなく、重複した範囲が多くあるようでした。

f:id:kuroiwasi:20150513015747j:plain

ダウンロードした全ての情報を網羅する組み合わせを求めます(Excel使用)。
先頭の13バイトが失われていますが、PNGのヘッダなので以下のようなファイルで補えます。

f:id:kuroiwasi:20150513020145j:plain

最終的に、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

f:id:kuroiwasi:20150513020525j:plain