WriteUp – beepbeep – #wgsbd2

Bueno, desde el grupo Insanity, puesto 10º en el wargame 2 de @secbydefault para la Campus Party Valencia 2011, formado por @ca0s, @JKS, @0verflow y @xassiz, os traemos el solucionario del reto “beepbeep“.

Bien, revisando la web por encima no encontramos nada raro, pero si nos fijamos podemos ver algunas pistas. En los textos aparecían resaltadas (ya sea tachado, negrita, subrayado, etc.) palabras como “ayudar” o “Pena de idiomas”.

Esto nos llevó a hacer click en el apartado “Ayuda” de la web. Mirando el código fuente de ayuda.php encontramos algo curioso:


// todavia en test
<div>
<ul>
<li><a href="#"><img src="images/es.png" /></a></li>
<li><a href="#"><img src="images/uk.png" /></a></li>
</ul>
</div>
-->

Nos pusimos a pensar y dimos con ello, probamos:

/ayuda.php?lang=en

y bingo!, el menú (entre otras cosas) cambió a inglés. Tras pasar un rato pensando que hacer con una variable por GET probamos bugs como LFI. En las cabeceras pudimos comprobar que el servidor era Unix (más concretamente Mathopd), así que buscamos el famosísimo /etc/passwd dimos con él:

/ayuda.php?lang=../../../../../../../../etc/passwd

En él podíamos ver una cuenta llamada “youAREgettingCLOSERplzCONTINUE“, así que seguimos rompiéndonos la cabeza :-)

Tras un rato recordando formas de explotar un LFI dimos con el clavo: Proc self environ method. Se trata de utilizar el archivo /proc/self/environ, que imprime datos como nuestro User-Agent, para modificar las cabeceras pudiendo ejecutar código PHP en el servidor.

Mirando phpinfo() comprobé que funciones como ejecución de comandos estaban deshabilitadas, así que escribí un pequeño script para listar los archivos del directorio web (/opt/reto/www/, que aparecía en la información mostrada). Así que en el User-Agent puse algo así:


<?php $dir=dir(“/opt/reto/www/”);while ($x = $dir->read()) echo $x."<br>";$dir->close();?>

Y ahí apareció ante mis ojos un archivo llamado “_clave_.php”. En él aparecía un mensaje tal que así:

pero… no esperarás en serio que la imprima por pantalla, verdad? venga que ya casi estás!

Así que si no me la imprime, me imaginé que estaría en el código fuente *-)

Pues manos a la obra!


<?php echo file_get_contents(“/opt/reto/www/_clave_.php”); ?>

Y vemos que la clave era: “Environment_Rulz_by_Acme”.

Saludos!