HackDef 2017 Quals Round - Web 100

By EvilMachine - Universidad de Guadalajara


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