Estoy tratando de resolver un desafío en un CTF, con sesiones de PHP.
El objetivo es hacer que check.php
echo $_PASSWORD
.
No tengo acceso a los archivos y, por lo tanto, no puedo editarlos.
Mi solución propuesta es:
- Queremos que la sesión se bloquee durante 20 segundos, por lo tanto, necesitamos que
eat.php
se ejecute durante tanto tiempo. - Al mismo tiempo, necesitamos ejecutar
check.php
, habiéndolo establecido$time
y luego esperar a que se desbloquee la sesión. - Ahora necesitamos desbloquear la sesión, lo que significa que debemos detener
eat.php
. -
check.php
continuará ejecutándose, la siguiente expresión:$time+20!=$_SESSION['time']
será falsa, y PHP hará eco de$_PASSWORD
.
¿Es posible mi propuesta? Si es así, ¿cómo lo implementarías? También me gustaría conocer otras instrucciones para resolver este problema.
get.php:
<?php
setcookie('id',uniqid());
?>
eat.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();
?>
check.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;
?>