Buenas a todos, continuando con la
cadena de artículos sobre la creación de un entorno vulnerable, hoy
vamos a construir una página web sencilla vulnerable a XPath Injections.
En
primer lugar vamos a crearnos un archivo PHP en la raíz de nuestro servidor WAMP, y de igual manera que en las anteriores ocasiones, llamaremos a nuestro archivo "xpath1.php", matizando con el nº 1 el nivel técnico requerido para bypasear la vulnerabilidad.
Dentro del archivo introduciremos el siguiente código PHP, en el que incluiremos una variable con un XML, que a modo de BBDD guardará un usuario y una contraseña, y al que intentaremos acceder más adelante mediante Xpath:
Si intentamos acceder a la URL sin indicar ningún parámetro deberíamos ver un error como el siguiente:
Ya sabemos que la aplicación espera dos parámetros, "user" y "pass".
Si introducimos los parámetros correctamente, veremos por pantalla el mensaje "correcto":
Y de la misma manera, si los introducimos mal, nos saldrá el mensaje "incorrecto":
Si intentamos hacer una inyección sencilla, aunque no consigamos robar el usuario y contraseña, nos cantará la función utilizada para acceder a la BBDD XML:
Con estas pistas ya lo tenemos un poco más facil para acertar con una inyección válida:
Dentro del archivo introduciremos el siguiente código PHP, en el que incluiremos una variable con un XML, que a modo de BBDD guardará un usuario y una contraseña, y al que intentaremos acceder más adelante mediante Xpath:
<?php
$user = $_GET["user"];
$pass = $_GET["pass"];
$string = <<<XML
<users>
<user>
<username>admin</username>
<password>fluprojectmola</password>
</user>
</users>
XML;
$xml = new SimpleXMLElement($string);
$resultado = $xml->xpath("//users/user[username/text()='" . $user . "' and password/text()='" . $pass . "']");
if($resultado)
echo 'Correcto';
else
echo 'Incorrecto';
?>
Si intentamos acceder a la URL sin indicar ningún parámetro deberíamos ver un error como el siguiente:
Ya sabemos que la aplicación espera dos parámetros, "user" y "pass".
Si introducimos los parámetros correctamente, veremos por pantalla el mensaje "correcto":
Y de la misma manera, si los introducimos mal, nos saldrá el mensaje "incorrecto":
Si intentamos hacer una inyección sencilla, aunque no consigamos robar el usuario y contraseña, nos cantará la función utilizada para acceder a la BBDD XML:
Con estas pistas ya lo tenemos un poco más facil para acertar con una inyección válida:
Como veis en este caso ni es necesario introducir valor alguno en la variable "pass", y simplemente con una inyección de tipo "or 1=1" , y añadiendo otra expresión después para cerrar la comilla abierta, es más que suficiente para bypasear esta sencilla autenticación.
Bien, ya tenemos en nuestro entorno vulnerable tres páginas web, con fallos de seguridad de tipo XSS, SQL Injection y Xpath Injection de nivel 1. En el próximo post seguiremos ampliando nuestra máquina.
Saludos!
No hay comentarios:
Publicar un comentario