Explotar una Inyección XPath en XVWA

  • Posted on: 27 September 2016
  • By: ReYDeS

Similar a una inyección SQL, un ataque de inyección XPath ocurre cuando un sitio web utiliza información proporcionada por el usuario para construir una consulta XPath por datos XML. Enviando información intencionalmente deformada hacia el sitio web, un atacante puede encontrar como se estructuran los datos XML, o acceder hacia datos los cuales normalmente no debería acceder. El atacante puede incluso ser capaz de elevar sus privilegios en el sitio web, si los datos XML están siendo utilizados para la autenticación (como un archivo de usuario basado en XML).

La consulta XML se realiza con un XPath, un tipo de sentencia sencilla descriptiva, la cual permite a la consulta XML localizar una pieza de información. Como en SQL, se puede especificar ciertos atributos a encontrar y patrones a coincidir. Cuando se utiliza XML para un sitio web, es común aceptar alguna forma de entrada sobre la cadena de consulta para identificar el contenido a localizar y mostrar sobre la página. Esta entrada debe ser sanitizada para verificar no se pierda tiempo en la consulta XPath y devuelvan datos incorrectos.

XPath es un lenguaje estándar ; su notación/sintáxis es siempre independiente de la implementación, lo cual significa el ataque puede ser automático. No hay diferentes dialectos como si ocurre en peticiones hacia las bases de datos SQL.

Debido a la no existencia de control para el nivel de acceso, es posible obtener el documento completo. No se deberían encontrar limitaciones como los encontrados en los ataques de inyección SQL.

Para la siguiente demostración se utiliza la versión de XVWA más reciente disponible al momento de realizar la presente publicación.

Ingresar a XVWA.

En el panel derecho hacer clic en la opción “XPATH Injection”.

En el recuadro donde se solicita ingresar el café a buscar “Search Your Cofee”, ingresar el texto “americano para luego hacer clic en el botón “Search” o Buscar.

Si la aplicación no filtra adecuadamente las entradas del usuario será factible inyectar código Xpath, e interferir con el resultado de la consulta. Ingresar en el recuadro de búsqueda lo siguiente.

americano' or '1

Al revisar el código fuente de la aplicación web, es factible conocer como se construye la consulta en base a los datos ingresados por el usuario.

$query = "/Coffees/Coffee[@ID='".$input."']";

Cuando se realiza la inyección XPath, se cambia la semántica original de la consulta, de tal manera siempre es verdadero, lo cual devuelve todo el contenido del documento XML. Es decir todos los cafés.

$query = "/Coffees/Coffee[@ID='americano' or '1']";

Fuentes:

https://www.owasp.org/index.php/XPATH_Injection
https://github.com/s4n7h0/xvwa
https://www.owasp.org/index.php/Testing_for_XPath_Injection_(OTG-INPVAL-010)
https://www.w3.org/TR/xpath/
https://github.com/s4n7h0/xvwa/blob/master/vulnerabilities/xpath/home.php

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Suscribete