我正在尝试通过 PHP 会话解决 CTF 上的挑战。目标是使check.php
echo $_PASSWORD
。
我无权访问文件本身,因此无法编辑它们。
我提出的解决方案是:
- 我们希望会话被锁定 20 秒,因此我们需要
eat.php
运行这么多时间。 - 同时,我们需要运行
check.php
,设置好$time
,然后等待会话解锁。 - 现在我们需要解锁会话,这意味着我们需要停止
eat.php
. check.php
将继续运行,以下表达式:$time+20!=$_SESSION['time']
将为 false,PHP 将 echo$_PASSWORD
。
我的提议可行吗?如果是,您将如何实施?我也想听听解决这个问题的其他方向。
获取.php:
<?php
setcookie('id',uniqid());
?>
吃.php:
<?php
$cookie=$_POST['cookie'];
session_save_path('/home/mawekl/timetravel/');
session_start();
echo 'You ate: '.htmlspecialchars($cookie);
echo "\n<br>";
$_SESSION['cookie']=$cookie;
$_SESSION['time']=time();
?>
检查.php:
<?php
$cookie=$_COOKIE['id'];
$time=time();
session_save_path('/home/mawekl/timetravel/');
session_start();
if ($cookie!=$_SESSION['cookie'])
die('Wrong cookie');
if ($time+20!=$_SESSION['time'])
die('You must eat cookie after 20 seconds from now, but you ate it '.($time-$_SESSION['time']).' seconds ago');
echo $_PASSWORD;
?>