Какой лучший способ очистки после инъекции SQL? - PullRequest
8 голосов
/ 28 августа 2008

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 28 августа 2008

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

2 голосов
/ 09 октября 2010

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

UPDATE Table 
SET TextField = SUBSTRING(TextField, 1, CHARINDEX('</title', TextField) - 1)
WHERE (ID IN (SELECT ID FROM Table WHERE (CHARINDEX('</title', Textfield, 1) > 0)))
1 голос
/ 28 августа 2008

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

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

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

0 голосов
/ 28 августа 2008

Это перевернет это, также было бы разумно убрать разрешения 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-инъекций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...