Possível injeção de SQL

0

Eu tenho um software baseado em desktop que é construído sobre o SQL 2005. O servidor SQL está hospedado dentro do meu escritório, e há um site voltado para o público que exibe parte do conteúdo deste banco de dados.

O problema que tenho

  1. O seguinte código HTML foi injetado na coluna de descrição para cada registro em uma das tabelas do meu banco de dados

<div style=position:absolute;top:-9999px;><a href=http://cashfastreiiu.com >cash fast</a><a href=http://guaranteedpaydayloansmsflg.com >guaranteed payday loans</a><a href=http://instantcashroacg.com >instant cash</a><a href=http://paydayloanstorezxucx.com >payday loan store</a><a href=http://paydaylendingvbmpz.com >payday lending</a></div>

  1. Eu fiz uma pesquisa no google apenas pelo link cashfastreiiu.com e parece que vários outros sites têm a mesma string HTML exata em seu banco de dados que até aparece em seu site público.

Minhas perguntas é

Como isso pôde acontecer? Apenas a porta 80 é exposta para o servidor HTTP (IIS 7.5) e esse servidor se conecta ao banco de dados usando apenas o seu IP interno. O servidor SQL não está exposto ao público. O aplicativo cliente de desktop é executado em 8 computadores de funcionários e essas pessoas estão usando computadores com Windows 7 no modo de bloqueio com direitos de administrador zero. Eles não podem instalar aplicativos com aprovação do administrador.

O site público é apenas para visualização, não há nenhum método para atualizar dados do site público. Não há como alguém na internet atualizar ou inserir dados no banco de dados.

Onde devo começar a procurar falhas na minha segurança?

Obrigado

    
por Khalid Rahaman 04.10.2012 / 01:20

1 resposta

1

É, como seu cabeçalho sugere, é muito provável que isso seja causado por injeções de SQL (mas sem ver mais do seu código real para o site, é realmente impossível dizer ...).

Para solucionar problemas, você deseja analisar o código que serve dados para seu website. Eu suponho que você obtenha algum tipo de entrada, uma string de pesquisa ou algo assim, do usuário e, em seguida, use isso para escolher quais dados exibir - nesse caso, você deve verificar como essas escolhas são feitas. Você está filtrando com algo como sqlstring = "SELECT * FROM table WHERE somecolumn LIKE %'" + searchstr + "'" ? Se assim for, você está aberto a injeções de SQL. Também não tem que ser tão óbvio - há muitos erros que alguém pode cometer que expõem o banco de dados ...

Independentemente de como isso aconteceu em primeiro lugar, há uma maneira simples e extremamente vigorosa de evitar que isso aconteça novamente: certifique-se de que a conta que o site usa para obter dados tenha acesso somente de leitura ao banco de dados. Se precisar, crie um novo usuário no SQL Management Studio, forneça a ele privilégios somente leitura nas tabelas necessárias (e não mais!) E altere a string de conexão na configuração do site para usar a nova conta. Dessa forma, não importa quão ruim seja o resto do código do site - os usuários que acessam seu banco de dados pela interface da Web poderiam nunca armazenar qualquer coisa no banco de dados de qualquer maneira.

    
por 04.10.2012 / 01:34