Sto provando a risolvere una sfida su un CTF, con sessioni PHP.
L'obiettivo è rendere check.php
echo $_PASSWORD
.
Non ho accesso ai file stessi e quindi non posso modificarli.
La mia soluzione proposta è:
- Vogliamo bloccare la sessione per 20 secondi, pertanto è necessario eseguire
eat.php
per un periodo di tempo così lungo. - Allo stesso tempo, dobbiamo eseguire
check.php
, averlo impostato$time
e quindi attendere che la sessione venga sbloccata. - Ora abbiamo bisogno di sbloccare la sessione, il che significa che dobbiamo interrompere
eat.php
. -
check.php
continuerà ad essere eseguito, la seguente espressione:$time+20!=$_SESSION['time']
sarà false e PHP eseguirà echo$_PASSWORD
.
La mia proposta è possibile? Se lo è, come lo implementeresti? Mi piacerebbe anche conoscere altre direzioni per risolvere questo 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;
?>