Я тестирую на устойчивость к внедрению атак на базу данных SQL Server.
Все имена таблиц в БД строчные, а в сопоставлении учитывается регистр символов Latin1_General_CS_AS .
Строка, которую я могу отправить, указывается в верхнем регистре и может содержать не более 26 символов. Поэтому я не могу отправить DROP TABLE, потому что имя таблицы будет в верхнем регистре, и, следовательно, оператор потерпит неудачу из-за сортировки.
Итак, какой максимальный урон я могу нанести за 26 символов?
РЕДАКТИРОВАТЬ
Я знаю все о параметризованных запросах и так далее - давайте представим, что человек, который разработал интерфейс, который создает запрос для отправки, в этом случае не использовал params.
Я также не пытаюсь сделать что-то гнусное, это система, созданная кем-то еще в той же организации.
источник
Ответы:
Легко:
Или, я думаю, в этом случае это будет
Выберите свой вариант по этому вопросу.
По всей вероятности, вы можете проверить это сейчас на вашей текущей системе, но любое количество небольших изменений в базе данных с течением времени может сделать ваше тестирование недействительным. Строка символов может измениться, кто-то может создать строчную хранимую процедуру, которая имеет разрушительный потенциал - что угодно. Вы никогда не можете сказать со 100% уверенностью, что нет разрушительной атаки на 26 персонажей, которую кто-либо мог бы построить.
Я предлагаю вам найти способ заставить разработчика следовать базовым отраслевым стандартам и наилучшим методам безопасности, хотя бы ради вас самих, поскольку, как я полагаю, кто-то, по крайней мере, частично несет ответственность в случае нарушений безопасности.
Редактировать:
А для злобности / веселья вы можете попробовать включить каждый флаг трассировки. Это было бы интересно наблюдать. Похоже на сообщение в блоге Брент Озар сделает ...
источник
SET LOCK_TIMEOUT 0;
,SET LANGUAGE Malaysian;
,SET ANSI_NULLS OFF:
...SET
влияет только на настройки сеанса, то как изменяются настройки базы данных и сервера (ALTER DATABASE ...;
?)DROP DATABASE ..;
, Если это удастся нанести больше урона, чем тогда;)Команда
SHUTDOWN
илиKILL
Команда (выберите случайное число свыше 50) могут занимать значительно меньше 26 символов, хотя, надеюсь, учетная запись, выполняющая запросы приложения, не имеет достаточных разрешений для их выполнения.источник
Вы можете создать таблицу, которую вы будете заполнять, пока не закончится время или не закончится место на диске, в зависимости от того, что наступит раньше.
источник
while 1=1 insert t values('')
это 30 ...create table x(i int)
=>while 1=1 insert t select 0
это 27x:insert t select 0 GOTO x
ровно 26, хотя.В зависимости от вашего определения ущерба вы можете выполнить следующее: WAITFOR DELAY '23: 59 'Чтобы быть по-настоящему злым, вы можете использовать инструмент нагрузочного тестирования, чтобы запустить его с 32 768 клиентов.
источник
Вариация, основанная на ответе @ MikaelEriksson и ответе @ MartinSmith на мой первоначальный комментарий:
Сначала я пытался сделать оператор WHILE, но лучшее, что я мог сделать, это 27 символов:
Но Мартин указал GOTO:
GOTO ... корень зла и создатель оператора вставки в бесконечный цикл из 26 символов.
С учетом сказанного ... может быть полезно придерживаться CHAR (99) вместо int, поскольку это будет занимать больше места. Другие опции либо используют более длинные имена и будут разбивать ограничение в 26 символов ..., либо используют меньше места для хранения в строке.
Полный код теста:
источник
set @S = 'x:insert t;select 0;GOTO x';
для будущей совместимости вашей инъекционной атаки;);
s ... второй - отлично - заменяет пробел и работает, если не нужен. Первый прерывает запрос - отделяет оператор INSERT от оператора SELECT.В зависимости от того, насколько разрушительным вы считаете отключение питания. :-)
Для этого требуется, чтобы на сервере был включен xp_cmdshell, чего нельзя сказать о последних нескольких версиях SQL Server. Также требуется, чтобы учетная запись службы имела право на отключение, которое может иметь или не иметь.
Включение xp_cmdshell, вероятно, выходит за пределы вашего ограничения в 26 символов. Вы позволите несколько инъекций?
источник