Post49 nn

¿Que son las inyecciones XPath?

Las inyecciones son un tipo de ataque muy peligroso para aplicativos web, ya que permiten a un atacante extraer información relevante sobre la organización. Por eso es muy importante verificar que las aplicaciones que desarrollamos, utilicen un control de sanitización de caracteres, para mitigar vulnerabilidades de este tipo. Hoy veremos un tipo de inyección muy peligroso denominado inyección XPath. La inyección XPath es similar a las Inyecciones SQL, Los ataques de Inyección XPath se producen cuando un sitio web usa datos suministrada por un usuario para construir una consulta XPath para datos XML.Mediante el envío de información intencionalmente mal formada al sitio web, un atacante puede averiguar cómo se estructuran los datos XML, o acceder a datos a los que no se suelen tener acceso. El atacante puede incluso ser capaz de elevar sus privilegios en el sitio web si los datos XML se utilizan para la autenticación (por ejemplo, un archivo de usuario basado en XML).

Las consultas XML se realizan con XPath, un tipo de declaración descriptiva simple que permite la consulta XML para localizar una información. Como SQL, puedes especificar ciertos atributos a encontrar, y los patrones a seguir. Cuando se usa XML en un sitio web es común aceptar algún formulario de entrada de cadena de texto para identificar el contenido de localizar y mostrar en la página. Esta entrada 'debe' ser supervisada para comprobar que no provoca errores en la consulta XPath ni devuelve datos incorrectos.

XPath es un lenguaje estándar; su notación / sintaxis es siempre independiente de la implementación, lo que significa que el ataque puede ser automatizado. No hay comunicaciones diferentes, como ocurre en las solicitudes a las bases de datos SQL.

Debido a que no existe un control de acceso por niveles, es posible obtener el documento completo. No vamos a encontrar ningún tipo de limitación como podía ocurrir en los ataques de inyección SQL.

A continuación tenemos el siguiente escenario.

 

Inyección XPath – Escenario de Pruebas

 

Posteriormente intentamos iniciar una sesión (obviamente desconociendo las credenciales del sistema), usaremos las credenciales admin/admin para ver si logramos tener acceso.

 

Inyección XPath – Inicio de Sesión

 

Aquí nos damos cuentas de dos cosas, la primera y la más obvia, es que las credenciales de acceso no son válidas, la segunda es que los datos están siendo enviados por GET, cosa que no se debe hacer, ya que siempre en una sesión los datos deben ser enviados por POST para que no sean visualizados a través de la URL.

Posteriormente haremos lo que siempre se realiza para testear algún tipo de inyección, agregar una comilla simple en los campos.

 

Inyección XPath – Mensaje de Error Inyección XPath

 

Como es posible visualizar, al ingresar una comilla simple en ambos cambios (user y password) nos devuelve un mensaje de error aludiendo al ingreso de un carácter invalido para la estructura XPath, en otras palabras esto nos retornan un error XPath el cual podemos explotar para extraer información. Pero ¿Por qué se produce esta vulnerabilidad?.

Si observamos el código del archivo xmli_1.php.

 

 

Inyección XPath – Código PHP recurso xmli_1.php
 

En el código php del archivo vulnerable es posible visualizar que se está utilizando una función XML para la llamada  y validación de datos, el problema de de esto, es que no se sanitizan lo datos, y por ende un atacante podría ingresar cualquier tipo de datos, como caracteres especiales, tags html, etc. Siempre que se desarrolle una aplicación web, es necesario escapar todos estos tipos de caracteres, de esta manera se mitigaran posibles intentos de ataques hacia dichos campos.
Al igual que en una inyección SQL, podemos realizar una petición malfomada con una expresión boleana que siempre verdadera. Por lo tanto como la petición va por GET podemos hacer lo siguiente:

 

 

http://172.16.45.167/bWAPP/xmli_1.php?login=' or '1'='1&password=' or '1'='1&form=submit


PD: En caso de que la aplicación utilice el método POST para la inserción de datos, se deberá agregar la expresión boleana en los campos y luego darle al botón submit. Como esta aplicación esta desarrolla de forma erronea, aprovechamos este error para poder introducir datos de inicio de sesión a través del método GET.

 

 

Inyección XPath – Ataque exitoso

Se pudo realizar un ataque exitoso, ya que aparentemente logramos iniciar una sesión ¿con cual usuario?, con el primero de base de datos.
Algunos Dorks para la búsqueda de sitios vulnerables a XPath

"Warning: SimpleXMLElement::xpath()" site:com
"XPath syntax error" site:com inurl:php?id=

 

 

 

 



Artículos que te pueden interesar