MySQL File priv to SSRF/RCE
Este é um resumo das técnicas MySQL/MariaDB/Percona de https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.
Server-Side Request Forgery (SSRF) via SQL Functions
Na exploração da exfiltração de dados SQL Out of Band, a função LOAD_FILE()
é comumente utilizada para iniciar requisições de rede. No entanto, essa função é limitada pelo sistema operacional em que opera e pelas configurações de inicialização do banco de dados.
A variável global secure_file_priv
, se não definida, tem como padrão /var/lib/mysql-files/
, limitando o acesso a arquivos a este diretório, a menos que seja definida como uma string vazia (""
). Essa alteração requer modificações no arquivo de configuração do banco de dados ou nos parâmetros de inicialização.
Dado que secure_file_priv
está desativado (""
), e assumindo que as permissões necessárias de arquivo e file_priv
são concedidas, arquivos fora do diretório designado podem ser lidos. No entanto, a capacidade dessas funções de fazer chamadas de rede depende fortemente do sistema operacional. Em sistemas Windows, chamadas de rede para caminhos UNC são viáveis devido à compreensão do sistema operacional sobre as convenções de nomenclatura UNC, potencialmente levando à exfiltração de hashes NTLMv2.
Esse método SSRF é limitado à porta TCP 445 e não permite a modificação do número da porta, embora possa ser usado para acessar compartilhamentos com plenos privilégios de leitura e, como demonstrado em pesquisas anteriores, para roubar hashes para exploração adicional.
Remote Code Execution (RCE) via User Defined Functions (UDF)
Bancos de dados MySQL oferecem o uso de Funções Definidas pelo Usuário (UDF) a partir de arquivos de biblioteca externos. Se essas bibliotecas estiverem acessíveis dentro de diretórios específicos ou no $PATH
do sistema, podem ser invocadas a partir do MySQL.
Essa técnica permite a execução de requisições de rede/HTTP através de uma UDF, desde que várias condições sejam atendidas, incluindo acesso de gravação ao @@plugin_dir
, file_priv
definido como Y
, e secure_file_priv
desativado.
Por exemplo, a biblioteca lib_mysqludf_sys
ou outras bibliotecas UDF que permitem requisições HTTP podem ser carregadas para realizar SSRF. As bibliotecas devem ser transferidas para o servidor, o que pode ser alcançado através da codificação em hex ou base64 do conteúdo da biblioteca e, em seguida, escrevendo-o no diretório apropriado.
O processo varia se o @@plugin_dir
não for gravável, especialmente para versões do MySQL acima de v5.0.67
. Nesses casos, caminhos alternativos que sejam graváveis devem ser utilizados.
A automação desses processos pode ser facilitada por ferramentas como SQLMap, que suporta injeção de UDF, e para injeções SQL cegas, técnicas de redirecionamento de saída ou de contrabando de requisições DNS podem ser utilizadas.
Last updated