Unzip Your .zip Archive Like a Pro.
Hint:
Hint
- (updated at 5/23 17:30) docker-compose.yml
zipを解凍してくれるサービスのようだ。
Unzip
site.png
test.phpファイルを圧縮したtest.zipを解凍させたが動作しない。
Content-Type: text/plain;charset=UTF-8であった。
URLを見ると?filename=test.phpとあったので?filename=../../../../etc/passwdなどディレクトリトラバーサルを試すも失敗に終わった。
docker-compose.ymlを見るとflagは/flag.txtに書かれているようだ。
index.phpを見ると以下の記述があった。
~~~
// prepare the session
$user_dir = "/uploads/" . session_id();
if (!file_exists($user_dir))
mkdir($user_dir);
if (!isset($_SESSION["files"]))
$_SESSION["files"] = array();
// return file if filename parameter is passed
if (isset($_GET["filename"]) && is_string(($_GET["filename"]))) {
if (in_array($_GET["filename"], $_SESSION["files"], TRUE)) {
$filepath = $user_dir . "/" . $_GET["filename"];
header("Content-Type: text/plain");
echo file_get_contents($filepath);
die();
} else {
echo "no such file";
die();
}
}
~~~
セッションに紐付けられているファイル名でディレクトリトラバーサルができそうだ。
../../flag.txtをファイル名にすればよいので、..{..{flag.txtを圧縮し、そのzipファイルをバイナリエディタなどで編集する。
それを解凍させてやればflagが得られる。