Каков наилучший способ очистки после SQL-инъекции?

StackOverflow https://stackoverflow.com/questions/32412

Вопрос

Мне было поручено поддерживать некоммерческий веб-сайт, который недавно стал жертвой атаки с использованием SQL-инъекций.Кто-то воспользовался формой на сайте, чтобы добавить текст в каждое доступное текстовое поле в базе данных (varchar, nvarchar и т.д.), Которое при отображении в виде HTML включает и выполняет файл JavaScript.

Поиск в Google по URL-адресу показывает, что он от спамеров электронной почты из Румынии или Китая, но сейчас важно не это.

Я просмотрел и вручную удалил информацию из текстовых полей, которые отображаются на большинстве видимых и популярных страниц сайта, но мне любопытно, каков был бы наилучший программный способ удаления текста из других текстовых полей сайта.

Очевидно, что нужно сделать еще кое-что (защитить сайт от SQL-инъекций, использовать что-то вроде markdown вместо хранения HTML и т.д.), И я работаю над этим, но на данный момент мне действительно нужен хороший способ зайти и программно удалить введенный текст.Я знаю, каков точный текст, он каждый раз один и тот же, и он всегда добавляется в конец любого текстового поля.В данный момент я не могу позволить себе удалить весь HTML-код из базы данных, и я не знаю, когда именно это произошло, поэтому я не могу просто откатиться к резервной копии.Кроме того, сайт находится на общем хостинге, и я не могу подключиться к базе данных напрямую с помощью инструментов SQL Server.Однако я могу выполнять запросы к нему, поэтому, если есть какой-либо способ создать инструкцию SQL update с эффектом "эй, найдите все текстовые поля во всех таблицах во всей базе данных и сделайте это, чтобы очистить их", это было бы лучше всего.

Это было полезно?

Решение

Восстановите данные из недавней резервной копии.

Другие советы

Я был жертвой, и ты можешь использовать это, чтобы очиститься

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

Предполагая, что вы стали жертвой той же атаки, что и все остальные, тогда код SQLMenace близок.Однако эта атака использует несколько разных URL-адресов скрипта, поэтому вам придется настроить его, чтобы убедиться, что он соответствует URL-адресу, который вы видите в своей базе данных.

Я тоже писал об этом, и мой код решения включал более общую очистку.

Один важный момент заключается в том, что самое первое, что вам нужно сделать, это снесите сайт.Прямо сейчас вы активно распространяете вредоносное ПО среди своих пользователей, и позже это может привести к судебному разбирательству.Создайте страницу-заполнитель, чтобы ваши пользователи не оставались в неведении, но не продолжайте распространять вредоносное ПО.Затем вы можете исправить сайт, чтобы убедиться, что он больше не уязвим для инъекций.Самый простой способ сделать это для этой конкретной атаки заключается в том, чтобы просто отключить разрешения sysobjects / syscolumns для вашего веб-пользователя, но вы также захотите выполнить более тщательную очистку, или это только вопрос времени, пока вы снова не будете взломаны.Затем вы можете использовать предоставленный код для очистки сайта и возобновления его работы.

Это изменит ситуацию, также было бы разумно отобрать разрешения sysobject у имени пользователя, с которым работает ваш сайт, и, конечно, очистить ввод

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

Я писал об этом некоторое время назад здесь: Microsoft Выпустила Инструменты Для Борьбы С Атаками с использованием SQL-инъекций

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top