Sigamos.
Obviamente hay mucho más en este tema, por ejemplo, con un mínimo conocimiento de XPATH se puede extraer la estructura completa del documento XML, este es un método llamado "Inyecciones XPATH ciegas", y se realiza en tiempo de ejecución.
Veamos un ejemplo:
Recordemos la expresión que usamos hace un rato para ingresar al sistema, finalmente resultó en esto,
' OR 1=1 AND '222'='222 cierto? ... claro pes.
Ok, ahora démosle la forma siguiente:
' OR name(//Users/UserName[1]) = 'UserName' AND '222'='222
Observen que el anterior 1=1 ha sido reemplazado por la expresión
name(//Users/UserName[1]) = 'UserName'
Y qué diablos estoy tratando de hacer?
Simplemente estoy intentando adivinar la estructura del documento XML, osea le estoy preguntando si el documento XML incluye en su estructura un nodo de nombre UserName, algo así:
Si la respuesta es afirmativa, mato dos pájaros de un tiro: 1ero. Ingreso al sistema y 2do. Ya sé que el documento tiene un nodo de nombre UserName, y así puedo continuar obteniendo los siguientes nodos.
Obviamente, con nuestro XML no lograrían obtener nada (no creo que a alguien se le ocurra pensar en la estructura Tigrillos > Tigrillo >... jaja).
Aquellas aplicaciones que piden inputs del usuario y no están suficientemente validadas son obviamente las más propensas a este tipo de ataques.
Pero, cómo nos defendemos de las inyecciones XPATH?
Cómo nos defendemos de las inyecciones SQL? es casi lo mismo, van por ahí las respuestas (chequeen los post que en su momento hice al respecto).
-Desconfía de todo, restringe al máximo los inputs del usuario:Controla el ingreso de caracteres no permitidos, esto es: comillas simples, comillas dobles, signo mayor, signo menor, ampersand, punto y coma, espresión " OR ", paréntesis, etc.
-Restringe la longitud de los datos de entrada.
-Si testeas tu aplicación para saber si es vulnerable a una inyección XPATH, y sale un error, significa que tu app es vulnerable.
-Inclusive, puedes implementar la política de prohibir el " OR " como parte del nombre de usuario o password, con eso ya estarías ganando bastante.
-Valida tanto en cliente como en el servidor.
OBS: Tengan en cuenta que muchas veces, los inputs necesariamente incluirán los caracteres prohibidos Por ejemplo, en la descripción de un libro podemos hallar el texto:
"el libro "Las aventuras de Pulgarcito & Barbie O'Tool" es altamente erótico", con lo cual tenemos que vivir... quiero decir que no le vas a decir a los usuarios que tengan cuidado con ingresar caracteres inválidos en cada cosa que escriban, cierto? claro pes, pero ese ya es tema de otro costal... nosotros básicamente nos hemos concentrado en la validación de los inputs de login de un usuario.
Crear una aplicación o sistema requiere una base de datos, y sabemos que usar una base de datos implica costo, y ese costo puede evitarse si usamos una base de datos XML (ya que simplemente es un archivo plano), pero no lo olvides, lo barato sale caro si no previenes tu aplicación de posibles ataques de inyección XPATH.
No hay comentarios.:
Publicar un comentario