Web 300: Str0ps

By Mexihacks Team

Descripcion:

El reto es muy sencillo, obtén el código fuente de config.php y arrebátanos la bandera!
El reto lo encuentras aquí:
http://x.x.119.26:1392

Resolución:

1. El objetivo como lo plantea el reto es obtener el archivo config.php por lo que accedemos a la dirección que contempla el reto y se encontró el siguiente código:



2. Analizando el archivo se encuentran 3 métodos (__construct, action, __destruct) dentro de la clase HDEF. El comienzo de la clase HDEF es el siguiente:



3. Se inicializan 5 constantes de manera privada:


La siguiente es la función que construye e inicia la clase y sus métodos.



4. Dicha función ejecuta la acción principal de la clase la cual marca que no acepta:

 '.html','.php','.xml','.txt','.','[',']'

Junto con otras validaciones. Cabe destacar lo siguiente dentro de esta función:


5. La función anterior es la que permite obtener el flag, sin embargo, se deben considerar algunos criterios.


La función destruct finaliza la clase y los métodos al cumplir ciertos parámetros, mientras la variable param espera a la clase para comenzar a ejecutarse de manera adecuada y mas importante, se ocupa unserialize() por lo que hay que mandar su contenido serializado.

Tomando en cuenta lo anterior, se debe de ingresar, mediante el parámetro param, el archivo config.php para acceder a su contenido, pero lo interesante recae en que no se puede ingresar ninguna cadena que contenga '.html','.php','.xml','.txt','.','[',']'. Además, se debe notar que la función strpos generara una segunda validación, por lo que el objetivo es generar una petición la cual cumpla esas condiciones y se pueda acceder al archivo config.php.

6. En la web [1], se encuentra lo siguiente para hacer un bypass a la función strpos:



Por lo que en primera se debe de generar un código que ejecute la clase con los parámetros que ingresemos siendo uno de ellos la dirección /var/www/html/config.php.

El “.php” en primera instancia nos dará un resultado negativo si se ingresa de manera manual ya que una validación exige que la cadena no contenga .php.

7. Con el codificador de URL de Burp se obtiene la siguiente conversión:



Quedando el ataque como: /var/www/html/config%2ephp.

8. Se genera la cadena que hará bypass los filtros y así acceder al archivo. Con el apoyo de la función urlencode y serialize se obtuvo dicha cadena, de [2]:



La petición quedó de la siguiente manera ( se agrego double encoding al punto => %252e):

http://x.x.119.26:1392/?param=O%3A4%3A%22HDEF%22%3A5%3A%7Bs%3A9%3A
%22HDEFurl%22%3Bs%3A31%3A%22file%3A%2Fvar%2Fwww%2Fhtml%2Fconfi
g%252ephp%22%3Bs%3A12%3A%22HDEFmethod%22%3Bs%3A6%3A%22actio
n%22%3Bs%3A10%3A%22HDEFaddr%22%3BN%3Bs%3A10%3A%22HDEF
host%22%3BN%3Bs%3A10%3A%22HDEFname%22%3BN%3B%7D

9. Finalmente, se obtiene el archivo config.php junto con el flag al hacer la petición.


Comments