Scanner de injeção SQL avançado - IIS e DBO
Mecanismos avançados de injeção de SQL que podem ser usados por usuários maliciosos para obter informações críticas e aproveitar -a para obter o controle completo de um sistema de computador.
Nota explicativa
Este artigo não tenta explicar uma nova técnica de comprometer os sistemas de computadores, a técnica de injeção de SQL é muito antiga e conhecida, mas ao mesmo tempo pode ser muito poderosa. O artigo também não reflete a exploração de uma vulnerabilidade desconhecida, isso é conhecido e já foi relatado, que, se pode refletir, são mecanismos avançados não publicados de injeção de SQL que podem ser usados por usuários maliciosos para obter informações críticas e aproveitar ele para obter o controle completo de um sistema de computador.
A combinação dessa técnica com um servidor da Web do IIS com permissões de usuário elevado (DBO) no banco de dados do Microsoft SQL Server pode levar à perda de controle completa do servidor afetado.
Este artigo tentará explicar o risco potencial causado pela configuração incorreta de um banco de dados SQL que interage com uma página da Web externa através de um servidor da Web do IIS e forneça detalhes de como os usuários maliciosos podem se beneficiar dele.
Resumo curto (Wikipedia)
A injeção de SQL é uma técnica de injeção de código, usada para atacar aplicativos orientados a dados, nos quais as instruções SQL nefastas são inseridas em um campo de entrada para execução (por exemplo, para despejar o conteúdo do banco de dados no atacante). A injeção de SQL deve explorar uma vulnerabilidade de segurança no software de um aplicativo, por exemplo, quando a entrada do usuário é filtrada incorretamente para caracteres de escape literal de string incorporados em instruções SQL ou a entrada do usuário não é fortemente digitada e executada inesperadamente. A injeção de SQL é conhecida principalmente como vetor de ataque para sites, mas pode ser usada para atacar qualquer tipo de banco de dados SQL.
Os ataques de injeção de SQL permitem que os invasores falsificam a identidade, adulterem os dados existentes, causam problemas de repúdio, como transações de exposição ou saldos, permitam a divulgação completa de todos os dados no sistema, destrua os dados ou o tornem indisponíveis e se tornem administradores do servidor de banco de dados.
Vulnerabilidade
Supondo que, na página da web, haja problemas de segurança com a passagem dos parâmetros para permitir a injeção de SQL, o principal problema é que o servidor da Web do IIS pode exibir informações críticas ao usuário usando uma função de conversão de transact-sql inválida. Imagine o seguinte URL em que o parâmetro ID permite a injeção.
https://www.victim.com/index.aspx?id=1
Um usuário malicioso pode substituir o valor do parâmetro ID pela função Transact-SQL Convert
converter (int, (selecione+usuário));--
O URL final seria desse estilo:
https://www.victim.com/index.aspx?id=convert(int, (selecione+usuário));-
A função de conversão tenta converter uma string em número inteiro, o que causa uma exceção em que o servidor da Web do IIS comete um erro grave mostrando o valor da consulta executada.
Uma saída típica seria algo assim:
A conversão falhou ao converter o valor nvarchar '{user}' para o tipo de dados int.
Como podemos ver, o valor {user} corresponde ao valor atual do usuário do banco de dados, além de tudo isso se o valor retornado for DBO nos dirá que o usuário do banco de dados possui privilégios máximos de execução, para que possa executar os comandos do shell usando os comandos xp_cmdshell transact-sql.
O uso de uma página da Web com um usuário de banco de dados com privilégios máximos é um sério erro de segurança em que os administradores do sistema não devem cair.
Em resumo, poderia dizer que a vulnerabilidade consiste em três fatores:
- Erro ao lidar com os parâmetros GET/POST que permitem injeção de SQL. (Desenvolvedor de software)
- IIS Web Server que exibe as informações da função de conversão. (Microsoft)
- Use um usuário de banco de dados na página da web com privilégios máximos. (Administrador do sistema/desenvolvedor de software)
Versão 4.0 (privado)
A versão estendida 4.0 do scanner está em um repositório privado (visível por patrocinadores) com todas as suas funcionalidades.
- https://github.com/iricartb/advanced-sql-injection-scanner-release
Mais informações
https://advanced-sql-injection.blogspot.com/2017/06/ivan-ricart-borges-advanced-sql.html