sp_MSforeachtable Abuse (необходима модификация)

Недавно кто-то взломал нашу базу данных, используя sp_MSforeachtableтак что многострочный запрос, если я прав.

Теперь мой вопрос, как я могу изменить sys.sp_MSforeachtableон использует @command1 и другие команды для выполнения запроса, чтобы отбросить наши таблицы.

XXXX=Censored db name
(Somehow also spaces in front of the USE)
 USE XXXX;  
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all";
EXEC sp_MSforeachtable @command1 = "DROP TABLE ?"

Тогда мой SQL Profiler показывает:

select @mscat = ltrim(str(convert(int, 0x0002)))

exec(N'declare hCForEachTable cursor global for select ''['' + REPLACE(schema_name(syso.schema_id), N'']'', N'']]'') + '']'' + ''.'' + ''['' + REPLACE(object_name(o.id), N'']'', N'']]'') + '']'' from dbo.sysobjects o join sys.all_objects syso on o.id = syso.object_id '
         + N' where OBJECTPROPERTY(o.id, N''IsUserTable'') = 1 ' + N' and o.category & ' + @mscat + N' = 0 '
         + @whereand)

declare hCForEachTable cursor global for select '[' + REPLACE(schema_name(syso.schema_id), N']', N']]') + ']' + '.' + '[' + REPLACE(object_name(o.id), N']', N']]') + ']' from dbo.sysobjects o join sys.all_objects syso on o.id = syso.object_id  where OBJECTPROPERTY(o.id, N'IsUserTable') = 1  and o.category & 2 = 0 

exec @retval = sys.sp_MSforeach_worker @command1, @replacechar, @command2, @command3, 0

create table #qtemp (   /* Temp command storage */
                qnum                int             NOT NULL,
                qchar               nvarchar(2000)  COLLATE database_default NULL
        )

Может ли кто-нибудь дать мне знать, как обезопасить эти вещи? SQL Profiler показывает мне, что имя приложения - PHP5, так что, вероятно, регистрация страницы или внедрение панели входа в систему..

0 ответов

Другие вопросы по тегам