By EvilMachine - Universidad de Guadalajara
El escaneo nos dio como resultado que existía un archivo llamado index.php.bak, extensión la cual se utiliza para realizar copias de seguridad de archivos en plataformas web, el cual contenía el código de la pagina web que se mostraba al inicio:
El reto consistía en encontrar una vulnerabilidad web dentro de un sitio
web el cual solo nos presentaba una imagen de PHP y una leyenda que indicaba
“Este sitio tiene una vulnerabilidad encuéntrala”.
Utilizando la herramienta dirsearch: https://github.com/maurosoria/dirsearch sobre el sitio web para realizar un escaneo de directorios y archivos
con extensión PHP dentro del dominio de la dirección:
El escaneo nos dio como resultado que existía un archivo llamado index.php.bak, extensión la cual se utiliza para realizar copias de seguridad de archivos en plataformas web, el cual contenía el código de la pagina web que se mostraba al inicio:
Pero este archivo nos mostraba el código PHP, el cual contenía una serie
de condiciones, donde después de analizar el método que se utilizaba para
enviar información al servidor con Burp Suite
se encontró que era un método GET, por lo cual nos retornaba el error die($_100)
que era la página que mirábamos al inicio. Al cambiar el método de envió
a POST nos retorna el error $_403 y $_200:
Figura X - Codigo de comparacion
Donde el método de envió de datos es POST y el nombre del parámetro
esperado es "flag" como se requiere en las 2 primeras condiciones (ver Figura X arriba) y para la
comparación de las cadenas de texto, en base a el funcionamiento de la función
"strcmp" descrito en la página de Oficial de PHP http://php.net/manual/en/function.strcmp.php, solo es posible tener 3 tipos de valores de retorno:
- Returns < 0 - if str1 is less than str2
- Reurns > 0 if str1 is greater than str2
- Returns 0 if they are equal
Por lo cual en PHP un carácter nulo es
igual a 0 se modificó el envió de datos de tal manera que se mandara un arreglo
nulo en el parametro "flag" via Burp Suite:
flag[]=flag&ps[]=flag&login=Login
De tal modo que al recibir estos valores, la función lo toma como cero por ende al
comparar con un null el resultado es cero por lo cual pasa la condición de
comparación y nos muestra la bandera que es:
flag{M3x1c4n_PHP_1s_re4lly_fun_!!!}



Comments
Post a Comment