PDF de programación - Introducción a las técnicas de Xpath Injection

Imágen de pdf Introducción a las técnicas de Xpath Injection

Introducción a las técnicas de Xpath Injectiongráfica de visualizaciones

Publicado el 7 de Junio del 2018
384 visualizaciones desde el 7 de Junio del 2018
777,3 KB
8 paginas
Creado hace 17a (26/02/2007)
Introducción a las técnicas
de Xpath Injection

Práctica

Jaime Blasco

Grado de dificultad

Un ataque de tipo Xpath Injection consiste en la manipulación
de las consultas xpath para extraer información de las bases de
datos XML. Esta es una técnica relativamente nueva que tiene
algunas similutes con los ataques Sql injection como veremos
a continuación.

A ntes de empezar a explicar todo lo rela-

cionado con este tipo de ataque, vamos
a explicar toda la base teórica que nos
ayudará a comprenderlo mejor. Estas bases de
las que hablo son principalmente el estándar
XML y el lenguaje XPATH.

Xml son las siglas de Extensible Markup
Language (Lenguaje extensible de marcado),
fue desarrollado por el World Wide Web Con-
sortium.

Este estándar se utiliza para describir datos
llamados documentos XML. Para entender co-
mo funciona Xml lo mejor es ver un ejemplo:

<?xml version="1.0"?>
<persona>
<nombre>Jaime</nombre>
<apellido>Blasco</apellido>
<dni private=”si”>12345678w</dni>
<empresa>Eazel S.L</empresa>
</persona>

Como podemos ver en el ejemplo:



la primera línea define la versión de Xml,
podemos observar que estamos utilizando
la 1.0,

• en la segunda línea describimos un ele-



mento raíz persona,
las cuatro
líneas siguientes describen
cuatro elementos hijo de la raíz (nombre,
apellido, dni, empresa) y el elemento hijo
dni posee un atributo private,

• en la última línea definimos el final del ele-

mento raíz.

Como hemos visto, XML es un lenguaje muy
sencillo e intuitivo que nos permite describir
datos de forma rápida y sencilla.

En este artículo aprenderás...
• Cómo funciona XML y XPATH
• Cómo utilizar técnicas de Xpath injection para
saltarse protecciones en las aplicaciones y
conseguir información de las bases de datos
XML.

Lo que deberías saber...
• Conocimientos básicos de C# (si sabes Java no

te costará nada entender el código).
• Conocimientos del protocolo HTTP.

40

www.hakin9.org

Listado 1. Documento XML de cuentas de usuario

<?xml version="1.0" encoding=
"ISO-8859-1"?>
<datos>
<user>
<name>jaime</name>
<password>1234</password>
<account>cuenta_administrador
</account>
</user>
<user>
<name>pedro</name>
<password>12345
</password>
<account>cuenta_pedro
</account>
</user>
<user>
<name>invitado</name>
<password>anonymous1234
</password>
<account>cuenta_invitado
</account>
</user>
</datos>

Ahora que ya hemos aprendido
como funciona XML necesitamos
algún tipo tipo de mecanismo que
nos permita utilizar estos datos, aquí
es donde entra en juego el lenguaje
Xpath.
El lenguaje Xpath
Xpath son las siglas de XML Path
Language, gracias a Xpath podre-
mos seleccionar informaciñon den-
tro de un documento XML haciendo
referencia a cualquier tipo de datos
contenidos en el mismo (texto, ele-
mentos, atributos, ..).

Xpath puede utilizarse directa-
mente desde una aplicación; por
ejemplo Microsoft .NET o Macrome-
dia ColdFusion tienen soporte nativo
para este propósito.

La manera que utiliza Xpath para
seleccionar partes de un documento
XML es en una representación en
forma de árbol de nodos que es gene-
rada por un parser. En un árbol existen
diferentes tipos de nodos como son:

• raíz,
• elemento,
• atributo,

• comentarios,


texto,

instrucción de procesamiento.

Xpath Injection

Otro de los mecanismos utiliza-
dos por Xpath son los predicados
que nos permiten seleccionar un
nodo con unas características es-
pecíficas:

/persona/dni[@private=”si”]

Esto sirve para seleccionar todos los
elementos hijo de dni cuyo atributo
private sea igual a si.

También cabe destacar los ope-

radores condicionales:

• El operador and se utiliza ence-
rrando entre paréntesis los distin-
tos predicados lógicos,
la operación or se representa por
la barra vertical |,
la operación negación se reserva
a la palabra not.





Uno de los pilares básicos del len-
guaje Xpath son las expresiones,
que vienen a ser como las instruc-
ciones del lenguaje.

En las expresiones se incluyen
operaciones; una de las más im-
portantes son los location path. Un
ejemplo encillo sería:

/persona/nombre

que hace referencia a todos los ele-
mentos nombre que cuelgan de cual-
quier elemento persona que cuelga
del nodo raíz.

Las expresiones en Xpath nos
devuelven una lista con referencias
a los elementos, dicha lista puede
estar vacía o contener uno o más
nodos.

Como veis estamos describiendo
una parte de la sintaxis de Xpath
que nos ayudará a comprender
los ejemplos de inyección contra
aplicaciones que veremos más
adelante.

Para ir familiarizándonos con el
programa que analizaremos luego,
usaremos el mismo fichero xml que
utiliza la aplicación como ejemplo
(ver Listado 1).

Continuemos con mas pin-
celadas sobre el lenguaje Xpath;
podemos utilizar una doble barra
// (descendant) para seleccionar
todos los nodos que desciendan del
conjunto de nodos contexto:

//user/name

Que seleccionará todos los names
de los users.

Figura 1. Pantalla de Login

www.hakin9.org

41

Técnica

Listado 2a. Aplicación index.aspx

<%@ Page Language="C#" %>
<html>
<head>
<script runat="server">
void Button1_OnClick
(object Source, EventArgs e)
{
System.Xml.XmlDocument XmlDoc =
new System.Xml.XmlDocument();
XmlDoc.Load("datos.xml");
System.Xml.XPath.XPathNavigator nav =
XmlDoc.CreateNavigator();
System.Xml.XPath.XPathExpression expr =
nav.Compile("string(//user[name/text()=
'"+TextBox1.Text+"' and
password/text()='"+TextBox2.Text+"']
/account/text())");
String account=Convert.ToString
(nav.Evaluate(expr));
if (Check1.Checked) {
cadena.Text = expr.Expression;
} else {
cadena.Text = "";
}
if (account=="") {
Label1.Text = "
Access Denied";
} else {
Label1.Text = "Acces Granted\n" +
"Has entrado en la cuenta: "
+ account;
}
}

</script>
</head>
<body>
<body BGCOLOR="#3d5c7a">
<br clear="all">
<font color="white"><center>
<h3>Acceso al sistema:</h3></center>
<center><form id="
ServerForm" runat="server">
<p>
Usuario:
<p>
<asp:TextBox id=
"TextBox1" runat
"server">
</asp:TextBox>
<p>
Password:
</p>
<asp:TextBox id=
"TextBox2" runat="server">
</asp:TextBox>
<p>
<button id=Button1 runat=
"server" OnServerClick=
"Button1_OnClick">
Entrar
</button>
<br>
<br>

Otra de las herramientas con que
cuenta Xpath es node() que se utiliza
para seleccionar todos los nodos de
todos los tipos:

//user/node() o //user/child::node()

Que seleccionaría todos los nodos
descendientes de user de cualquier
tipo (en nuestro caso tenemos tres
en cada user de tipo text()).

Podemos también referirnos al

tipo de nodo y así tenemos:

• text(): Nodos de tipo texto,
• comment(): Nodos de tipo comen-

tario,

• processinginstruction(): Nodo de

tipo instrucción de proceso.

La última parte sintáctica que descri-
biremos son predicados con funcio-
nes de cardinalidad:

//user[position()=n]/name

Seleccionará el nodo name del
usuario n. U otro ejemplo sería:

//user[position()=1]/
child::node()[position()=2]

que seleccionaría el segundo nodo (en
este caso password) del primer user.

Para acabar vamos a describir
tres funciones que usaremos a lo
largo de la prueba de concepto:

• count(expression): Cuenta el nú-
mero de nodos según la expre-
sión que le demos:
count(//user/child::node())



Contará el número de nodos de
todos los users (en este caso
serían nueve).

• stringlength(string): Nos devuelve
el tamaño de la string que le espe-
cifiquemos:
stringlength(//user[position()=1]/
child::node()[position()=1])



Nos devolverá el tamaño de la
string presente en el primer nodo
del primer usuario (“jaime” que
será cinco).

• substring(string, number, number):
Nos devuelve la subcadena del

42

www.hakin9.org

Técnica

Listado 2b. Aplicación index.aspx

<asp:CheckBox id=
Check1 runat="server" Text=
"XPath Debug" />
<font color =
"red"><h2><asp:Label id=
"Label1" runat="server">
</asp:Label></h2></font>
<span id=Span1 runat="server" />
</form></center></font>
<br clear="all">
<br>
<br>
<br>
<font color="#11ef3b">
<asp:Label id="cadena" runat="server">
</asp:Label></font>
</body>
</html>

primer elemento empezando por
la posición indicada en el segundo
argumento con el tamaño especifi-
cado en el tercer argumento:
((//user[position()=1]/child::
node()[position()=1),2,1)



Con esto obtendremos la segunda
letra del primer nodo (name) del pri-
mer user. Sería “a”.
Ejemplo práctico
de una aplicación
vulnerable
A continuación pasaremos a trabajar
con una aplicación vulnerable a Xpath
injection especialmente creada para
el caso de la forma más didáctica
posible.

Antes de empezar quiero comen-
tar que los ejemplos que usaremos
a lo largo del artículo han sido pro-
gramados con el lenguaje C# en la
plataforma Mono que nos permite
utilizar aplicaciones .NET y es so-
fware libre y multiplataforma (Linux,
Windows, Mac OS).

Para la programación se ha utiliza-
do monodevelop y para su ejecución
el servidor XSP que es un servidor
web ligero que soporta asp.net.

Primera toma de contacto
La aplicación que utilizaremos es la
que veis en el Listado 2.

Al conectarnos con el navegador
al servidor xsp nos aparecerá la pá-
gina que vemos en la Figura 1.

La aplicación está escrita en
asp.NET y ejecutada en xsp(mono)
además vemos que está utilizando
Mono.Xml.Xpath. En este caso no
será más fácil romper la lógica de la
aplicación ya que en el error se nos
muestra la consulta xpath completa:

string(//user[name/text()=
'' and password/text()='']
/accou
  • Links de descarga
http://lwp-l.com/pdf11651

Comentarios de: Introducción a las técnicas de Xpath Injection (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad