Olá, tudo bem?
Vamos ver hoje como é um ataque de SQL Injection baseado no tempo de resposta do servidor.
O ataque é semelhante ao BlindSQLi comum, mas ao invés da página ser ou não exibida, você colocará, caso o "chute" esteja correto, um valor altíssimo de demora do servidor SQL, e verá que se o servidor estiver demorando bastante para responder, seu chute estava certo.
Como este tutorial é para aqueles que já tem noção sobre SQL e BlindSQLi, vou apenas norteá-los. Isto quer dizer que darei apenas um exemplo de como obter a resposta. Digamos que já tenhamos uma aplicação vulnerável e que eu esteja tentando obter a primeira letra do nome da primeira tabela (ataques às cegas geralmente são feitas nessas comparações). Veja como eu faria:
Isto significa que eu estou pedindo ao servidor que, caso a condição seja verdadeira, execute 5 000 000 vezes o comando ENCODE(), e isto demorará um pouco.
Neste caso, se o servidor estiver demorando para enviar a resposta, já imaginamos que a primeira letra do nome do primeiro banco de dados é 'A'. O mesmo ocorreria ao obter dados de uma tabela no mesmo banco de dados:
Caso o servidor demore, é provável que o primeiro caractere da senha do primeiro usuário é "0".
É importante ter uma internet que não oscile muito, ou poderá haver confusões.
Outras bases de dados também possuem funções para dar um sleep na base e permitir este tipo de ataque:
MSSQL:
PostgreSQL:
Como se é imaginado, este tipo de ataque é muito demorado e cansativo. Existem ferramentas que automatizam o ataque, como o famoso Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Mas há um problema: estes softwares geralmente não se dão bem com:
Boa noite, boa sorte (vou ser processado por isso?)!
Vamos ver hoje como é um ataque de SQL Injection baseado no tempo de resposta do servidor.
O ataque é semelhante ao BlindSQLi comum, mas ao invés da página ser ou não exibida, você colocará, caso o "chute" esteja correto, um valor altíssimo de demora do servidor SQL, e verá que se o servidor estiver demorando bastante para responder, seu chute estava certo.
Como este tutorial é para aqueles que já tem noção sobre SQL e BlindSQLi, vou apenas norteá-los. Isto quer dizer que darei apenas um exemplo de como obter a resposta. Digamos que já tenhamos uma aplicação vulnerável e que eu esteja tentando obter a primeira letra do nome da primeira tabela (ataques às cegas geralmente são feitas nessas comparações). Veja como eu faria:
Código:
noticia.php?id=1 UNION SELECT IF(SUBSTRING(table_name,1,1) = CHAR(65),BENCHMARK(5000000,ENCODE('MSG', '5 segundos')),null FROM information_schema.tables where table_schema=database() LIMIT 0,1--+
Neste caso, se o servidor estiver demorando para enviar a resposta, já imaginamos que a primeira letra do nome do primeiro banco de dados é 'A'. O mesmo ocorreria ao obter dados de uma tabela no mesmo banco de dados:
Código:
noticia.php?id=1 UNION SELECT IF(SUBSTRING(senha,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE('MSG', '5 segundos')),null FROM usuarios LIMIT 0,1--+
É importante ter uma internet que não oscile muito, ou poderá haver confusões.
Outras bases de dados também possuem funções para dar um sleep na base e permitir este tipo de ataque:
MSSQL:
Código:
'WAIT FOR DELAY '0:0:10
Código:
pg_sleep()
Boa noite, boa sorte (vou ser processado por isso?)!