segunda-feira, 25 de março de 2013

SQLi X Blind SQLi







Nos últimos posts falei sobre ataques do tipo SQLInjection, que se resume a ataques em aplicações web, em que os bancos de dados web estão vulneráveis, seja na entrada de dados, seja na mensagem de erro que retorna para o usuário quando suas credenciais são inseridas erroneamente, entre outros.

Só para lembrar: nesse tipo de ataque, o hacker consegue acesso a nome de usuários, tabelas, manipulando os dados dessa aplicação, inclusive podendo até alterar e excluir as tabelas do banco de dados.

Mas, então o que é Blind SQLi???? O que esse tipo de ataque difere de um ataque SQLi?

O Blind SQLi é usado quando uma aplicação web está vulnerável a um ataque de SQL Injection, porém diferente de ataques com SQLi, os resultados retornados por ataques Blind SQLi não são visíveis para o invasor (daí o nome BLIND SQLi).

*BLIND significa cego em inglês.

O invasor não consegue acessar os dados diretamente, porém o código malicioso injetado altera o comportamento da aplicação, dependendo da declaração SQL chamada para essa página.

Basicamente, esse tipo de ataque procura por diferenças entre o código de injeção verdadeiro (1=1, “true answer pages”) e o código falso (1=2; “false answer pages"). Apesar de não trazer nenhuma informação sobre a aplicação ou mensagem de erro, o hacker pode analisar as diferenças das informações retornadas a partir do código de injeção verdadeiro (true answer pages) e o falso (false answer pages):

    - Diferentes Hashes;
    - Diferenças nas estruturas HTML;
    - Diferentes padrões de senhas;
    - Diferenças lineares em somas de caracteres ASCII;
    - Diferentes comportamentos, como tempo de resposta da aplicação.

Caso essas diferenças sejam encontradas na aplicação, o invasor por extrair toda informação do banco de dados usando consultas booleanas. Abaixo, segue o exemplo dessas consultas em três diferentes bancos de dados:

MySQL:
- Program.php?id=1 and 100>(ASCII(Substring(user(),1,1)))
-“True-Answer Page”  or “False-Answer Page”?

MSSQL:
- Program.php?id=1 and 100>(Select top 1 ASCII(Substring(name,1,1))) from sysusers)

ORACLE
- Program.php?id=1 and 100>(Select ASCII(Substr(username,1,1))) from all_users where rownum<=1)

Várias ferramentas podem automatizar esse tipo de ataque, localizando a vulnerabilidade e os dados a serem atacados.

Uma das ferramentas que automatizam esse tipo de ataque é chamada de Marathon Tool. Desenvolvida em .NET,  e pode atacar banco de dados SQL Server, MySQL, MS Access e Oracle. Seu código fonte pode ser baixado no site http://www.codeplex.com/marathontool

Segue a tela inicial da ferramenta:








Um grande abraço a todos!

Nenhum comentário:

Postar um comentário