Verificar Privilégios de Administrador de Base de Dados com sqlmap

Kali LinuxBeginner
Pratique Agora

Introdução

No domínio da cibersegurança e testes de penetração, compreender o nível de acesso obtido num sistema comprometido é fundamental. Ao lidar com sistemas de bases de dados, uma das informações mais críticas é se o utilizador atual da base de dados possui privilégios de Administrador de Base de Dados (DBA). Um utilizador DBA tipicamente tem controlo extenso sobre a base de dados, incluindo a capacidade de criar, modificar e eliminar bases de dados, tabelas e utilizadores, bem como ler e escrever dados sensíveis.

O sqlmap é uma ferramenta de testes de penetração de código aberto que automatiza o processo de deteção e exploração de falhas de injeção SQL e de tomada de controlo de servidores de bases de dados. Para além de apenas encontrar vulnerabilidades, o sqlmap fornece várias funcionalidades para enumerar e interagir com a base de dados comprometida. Uma dessas funcionalidades cruciais é a capacidade de verificar se o utilizador atual da base de dados tem privilégios de DBA.

Este laboratório irá guiá-lo através do processo de utilização do sqlmap para determinar se o utilizador atual da base de dados tem privilégios de DBA. Aprenderá como estabelecer uma injeção SQL bem-sucedida, compreenderá porque é que os privilégios de DBA são importantes e, em seguida, utilizará o flag --is-dba do sqlmap para realizar a verificação. Finalmente, interpretará os resultados para compreender o nível de acesso.

Estabelecer uma Injeção Bem-sucedida num Alvo

Nesta etapa, simularemos o estabelecimento de uma injeção SQL bem-sucedida num alvo. Para efeitos deste laboratório, utilizaremos um URL vulnerável conhecido que o sqlmap pode explorar. Esta etapa inicial é crucial porque o sqlmap necessita de um ponto de injeção válido para interagir com a base de dados e realizar uma enumeração adicional, incluindo a verificação de privilégios de DBA.

Abra o seu terminal no diretório ~/project. Utilizaremos um URL fictício para fins de demonstração. Num cenário do mundo real, teria identificado um URL vulnerável através de reconhecimento e testes manuais.

Execute o seguinte comando sqlmap para confirmar uma injeção bem-sucedida. Utilizaremos um simples --url e o flag --batch para automatizar o processo e aceitar as escolhas padrão.

sqlmap --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch

Deverá ver o sqlmap a realizar vários testes e, eventualmente, a confirmar que o alvo é vulnerável a injeção SQL. Procure por saídas que indiquem a deteção bem-sucedida de vulnerabilidades.

        _
       ___| |_____ ___ ___ ___ {1.6.11.1#dev}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --[sqlmap]--
                         |_|

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[SNIP]

[INFO] GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N/q] N
sqlmap identified the following injection point(s) with a total of 18 HTTP(s) requests:
---
Parameter: cat (GET)
    Type: error-based
    Title: MySQL >= 5.0 error-based - Parameter replace (FLOOR)
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 AND (SELECT 1 FROM(SELECT COUNT(*),CONCAT(0x7178717871,(SELECT (ELT(1337=1337,1))),0x717a7a7171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)

    Type: UNION query
    Title: MySQL UNION query all columns - 10 columns
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10--

    Type: Stacked queries
    Title: MySQL > 5.0.11 stacked queries (comment)
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1;SELECT SLEEP(5)--

    Type: Time-based blind
    Title: MySQL >= 5.0.12 time-based blind - Parameter replace
    Payload: http://testphp.vulnweb.com/listproducts.php?cat=1 AND (SELECT 1337 FROM (SELECT(SLEEP(5)))a)
---
[INFO] the back-end DBMS is MySQL
[INFO] fetched data:
[INFO] the web server is Apache
[INFO] you are not using the latest version
[INFO] for the latest stable version, visit the official repository at 'https://github.com/sqlmapproject/sqlmap/'

A saída confirma que o parâmetro cat é vulnerável a vários tipos de injeção SQL. Isto significa que o sqlmap pode agora interagir com a base de dados.

Compreender a Importância dos Privilégios de DBA

Nesta etapa, discutiremos brevemente porque é que a verificação de privilégios de DBA é importante no contexto de uma avaliação de segurança ou teste de penetração. Compreender as implicações de ter acesso de DBA ajuda-o a priorizar as suas ações e a avaliar o impacto potencial de uma exploração bem-sucedida.

Um Administrador de Base de Dados (DBA) detém tipicamente o nível mais elevado de privilégios dentro de um sistema de base de dados. Estes privilégios incluem frequentemente:

  • Controlo total sobre os dados: A capacidade de ler, escrever, modificar e eliminar quaisquer dados dentro da base de dados, incluindo informações sensíveis como credenciais de utilizador, registos financeiros ou dados pessoais.
  • Modificação do esquema: O poder de criar, alterar ou eliminar tabelas, vistas, procedimentos armazenados e outros objetos da base de dados. Isto pode levar à manipulação de dados ou mesmo à negação de serviço.
  • Gestão de utilizadores: A capacidade de criar, modificar ou eliminar outros utilizadores da base de dados e atribuir ou revogar os seus privilégios. Isto pode ser utilizado para criar backdoors ou escalar privilégios ainda mais.
  • Acesso a nível de sistema (em alguns casos): Dependendo do sistema de base de dados e da sua configuração, os privilégios de DBA podem estender-se à execução de comandos do sistema operativo ou ao acesso a ficheiros no servidor, levando à compromissão total do sistema.

Se descobrir que o utilizador atual da base de dados tem privilégios de DBA, isso significa uma vulnerabilidade crítica. Significa que tem um controlo extenso sobre a base de dados, que pode ser aproveitado para ataques adicionais, exfiltração de dados ou compromisso do sistema. Pelo contrário, se o utilizador não tiver privilégios de DBA, o seu acesso é limitado e poderá ter de procurar oportunidades de escalada de privilégios.

Esta etapa não envolve comandos diretos, mas é crucial para compreender o contexto das próximas etapas.

Utilizar o Flag --is-dba para Verificar os Privilégios do Utilizador Atual

Nesta etapa, aprenderemos sobre o flag específico do sqlmap utilizado para verificar privilégios de DBA: --is-dba. Este flag foi concebido para determinar rapidamente se o utilizador atual da base de dados, identificado através da injeção SQL, possui direitos administrativos.

O flag --is-dba é uma opção booleana. Quando utilizado, o sqlmap realizará uma série de verificações na base de dados para apurar se o utilizador tem permissões de nível DBA. O resultado será uma saída simples True ou False, indicando a presença ou ausência destes privilégios.

É importante notar que o sqlmap precisa de ter estabelecido com sucesso um ponto de injeção (como fizemos na Etapa 1) antes de poder utilizar eficazmente o flag --is-dba. Sem uma injeção válida, o sqlmap não consegue comunicar com a base de dados para realizar as verificações necessárias.

A sintaxe para utilizar este flag é simples:

sqlmap --url "<target_url>" --is-dba

Onde <target_url> é o URL vulnerável que identificou. No nosso caso, será http://testphp.vulnweb.com/listproducts.php?cat=1.

Esta etapa é também primariamente conceptual, preparando-o para a execução real na próxima etapa.

Executar o Comando para Verificar o Status de DBA

Agora que compreendemos o flag --is-dba, vamos executar o comando sqlmap para verificar os privilégios de DBA no nosso alvo.

Abra o seu terminal no diretório ~/project. Utilizaremos o mesmo URL vulnerável da Etapa 1.

Execute o seguinte comando:

sqlmap --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --is-dba --batch

O flag --batch é adicionado novamente para automatizar o processo e aceitar as escolhas padrão, impedindo que o sqlmap solicite entrada do utilizador durante o processo.

O sqlmap realizará agora as suas verificações. Observe atentamente a saída. Deverá ver o sqlmap a testar vários privilégios e, eventualmente, a fornecer uma resposta clara sobre o status de DBA.

        _
       ___| |_____ ___ ___ ___ {1.6.11.1#dev}
      |_ -| . |     | . | . |
      |___|_|_|_|_|_|___|  . |   --[sqlmap]--
                         |_|

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. sqlmap developers assume no liability and are not responsible for any misuse or damage caused by this program.

[SNIP]

[INFO] GET parameter 'cat' is vulnerable. Do you want to keep testing the others (if any)? [y/N/q] N
[INFO] the back-end DBMS is MySQL
[INFO] fetched data:
[INFO] the web server is Apache
[INFO] you are not using the latest version
[INFO] for the latest stable version, visit the official repository at 'https://github.com/sqlmapproject/sqlmap/'
[INFO] checking if the current user is DBA
[INFO] the current user is not a DBA
[INFO] fetched data:
[INFO] the current user is DBA: False

Na saída, procure a linha que declara explicitamente "the current user is DBA: False" ou "the current user is DBA: True". Este é o resultado da nossa verificação.

Interpretar o Resultado Verdadeiro ou Falso do sqlmap

Nesta etapa final, interpretaremos o resultado True ou False obtido da verificação --is-dba do sqlmap e compreenderemos as suas implicações.

Após executar o comando na Etapa 4, o sqlmap apresentará uma linha semelhante a:

[INFO] the current user is DBA: False

ou

[INFO] the current user is DBA: True

Interpretação do Resultado:

  • [INFO] the current user is DBA: False: Isto indica que o utilizador atual da base de dados, através do qual o sqlmap está a interagir com a base de dados, não possui privilégios de Administrador da Base de Dados (DBA). Embora tenha explorado com sucesso uma injeção SQL, o seu acesso é limitado. Num teste de penetração real, isto significaria que precisa de procurar outras vias, como técnicas de escalonamento de privilégios, para obter acesso superior.
  • [INFO] the current user is DBA: True: Isto indica que o utilizador atual da base de dados possui privilégios de Administrador da Base de Dados (DBA). Esta é uma descoberta significativa, pois implica um controlo extenso sobre a base de dados. Com privilégios de DBA, poderia potencialmente:
    • Ler, modificar ou eliminar quaisquer dados.
    • Criar novos utilizadores com direitos administrativos.
    • Executar comandos do sistema operativo (se a configuração da base de dados o permitir).
    • Realizar uma enumeração adicional para descobrir informações sensíveis.

Para o alvo http://testphp.vulnweb.com utilizado neste laboratório, o resultado esperado é False, o que significa que o utilizador com o qual o sqlmap está a operar não tem privilégios de DBA. Este é um cenário comum em aplicações do mundo real, onde os utilizadores de bases de dados são frequentemente configurados com o princípio do menor privilégio.

Compreender este resultado é crucial para planear os seus próximos passos numa avaliação de segurança. Ajuda-o a avaliar a gravidade da vulnerabilidade de injeção SQL e o impacto potencial no sistema alvo.

Resumo

Neste laboratório, aprendeu com sucesso como verificar os privilégios de Administrador da Base de Dados (DBA) utilizando o sqlmap. Começou por estabelecer uma injeção SQL bem-sucedida num alvo, que é um pré-requisito para o sqlmap interagir com a base de dados. Discutimos depois a importância crítica de identificar os privilégios de DBA num contexto de segurança, destacando o controlo extenso que tais privilégios concedem sobre um sistema de base de dados.

Aprendeu sobre o flag específico do sqlmap, --is-dba, concebido para este fim. Finalmente, executou o comando e interpretou o resultado True ou False, compreendendo as suas implicações para testes de penetração adicionais ou avaliações de segurança. Esta competência é fundamental para avaliar com precisão o impacto das vulnerabilidades de injeção SQL e planear ações subsequentes num envolvimento de cibersegurança.