Pergunta

Recebi a tarefa de manter um site sem fins lucrativos que recentemente foi vítima de um ataque de injeção de SQL.Alguém explorou um formulário no site para adicionar texto a todos os campos semelhantes a texto disponíveis no banco de dados (varchar, nvarchar, etc.) que, quando renderizado como HTML, inclui e executa um arquivo JavaScript.

Uma pesquisa do URL no Google indica que é de spammers de e-mail baseados na Romênia ou na China, mas isso não é o que importa no momento.

Examinei e removi manualmente as informações dos campos de texto renderizados nas páginas mais visíveis e populares do site, mas estou curioso para saber qual seria a melhor forma programática de remover o texto dos outros campos de texto do site .

Obviamente, há mais que precisa ser feito (fortalecer o site contra injeções de SQL, usar algo como markdown em vez de armazenar HTML, etc.) e estou trabalhando nisso, mas por enquanto o que eu realmente preciso é de uma boa maneira de fazer isso. e remova programaticamente o texto injetado.Eu sei qual é o texto exato, é sempre o mesmo e é sempre anexado ao final de qualquer campo de texto.Não posso me dar ao luxo de remover todo o HTML do banco de dados neste momento e não sei exatamente quando isso aconteceu, então não posso simplesmente reverter para um backup.Além disso, o site está em hospedagem compartilhada e não consigo me conectar ao banco de dados diretamente com as ferramentas do SQL Server.Eu posso executar consultas nele, portanto, se houver alguma maneira de construir uma instrução de atualização SQL com o efeito de "ei, encontre todos os campos de texto em todas as tabelas do banco de dados inteiro e faça isso para limpá-los", isso seria o melhor.

Foi útil?

Solução

Restaure os dados de um backup recente.

Outras dicas

Eu fui vítima e você pode usá-lo para limpar

UPDATE Table 
SET TextField = SUBSTRING(TextField, 1, CHARINDEX('</title', TextField) - 1)
WHERE (ID IN (SELECT ID FROM Table WHERE (CHARINDEX('</title', Textfield, 1) > 0)))

Supondo que você tenha sido vítima do mesmo ataque que todos os outros, o código do SQLMenace está próximo.No entanto, esse ataque usa vários URLs de script diferentes, então você terá que personalizá-lo para garantir que corresponda ao URL que você está vendo em seu banco de dados.

Eu escrevi sobre isso também, e meu código de solução incluía uma limpeza mais genérica.

Um ponto importante é que a primeira coisa que você precisa fazer é derrubar o site.No momento, você está fornecendo ativamente malware aos seus usuários, e isso pode colocá-lo em uma situação legal mais tarde.Crie uma página de espaço reservado para que seus usuários não fiquem no escuro, mas não continuem exibindo malware.Depois, você pode consertar o site para garantir que não esteja mais vulnerável à injeção.A maneira mais simples de fazer isso para este ataque específico é apenas desabilitar as permissões sysobjects/syscolumns para o seu usuário da web, mas você também vai querer fazer uma limpeza mais completa ou é apenas uma questão de tempo até que você seja hackeado novamente.Em seguida, você pode usar o código fornecido para limpar o site e colocá-lo novamente no ar.

Isso reverterá isso, também seria aconselhável retirar as permissões de sysobject do nome de usuário com o qual seu site é executado e limpar a entrada, é claro

DECLARE @T VARCHAR(255),@C VARCHAR(4000) 
DECLARE Table_Cursor CURSOR FOR 
SELECT  a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id and a.xtype='u' and
(b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) 
OPEN Table_Cursor 
FETCH NEXT FROM  Table_Cursor INTO @T,@C 
WHILE(@@FETCH_STATUS=0) 
BEGIN 
EXEC('if exists (select 1 from ['+@T+'] where ['+@C+']  like ''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'') begin print ''update ['+@T+'] set ['+@C+']=replace(['+@C+'],''''"></title><script src="http://1.verynx.cn/w.js"></script><!--'''','''''''') where ['+@C+']  like ''''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'''''' end')
FETCH NEXT FROM Table_Cursor INTO @T,@C 
END 
CLOSE Table_Cursor 
DEALLOCATE Table_Cursor

Escrevi sobre isso há um tempo aqui: A Microsoft lançou ferramentas para lidar com ataques de injeção de SQL

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top