Как мне использовать "EXEC @sql"? - PullRequest
8 голосов
/ 17 сентября 2010

Мой коллега небезопасен с его кодом и позволяет пользователю загружать файл SQL для запуска на сервере.Он удаляет все ключевые слова в файле, такие как "EXEC", "DROP", "UPDATE", "INSERT", "TRUNC"

Я хочу показать ему ошибку его путей, используя его EXEC ( @sql )

Моя первая попытка будет с 'EXEXECEC (N''SELECT ''You DRDROPOPped the ball Bob!'')'

Но он может отфильтровать все это в цикле.

Есть ли способ, которым я могу использовать код моего коллеги?Или достаточно отфильтровать ключевые слова?

Редактировать: я заставил его проверить свой код.Если код содержит ключевое слово, он не выполняет его.Я все еще пытаюсь понять, как использовать это, используя двоичное преобразование.

Ответы [ 2 ]

5 голосов
/ 17 сентября 2010
  1. Скажите коллеге, что он идиот.

  2. Выполните запутанный SQL-запрос , что-то вроде:

    select @sql = 0x44524f5020426f627350616e7473

Это потребует некоторой настройки в зависимости от того, как выглядит остальная часть кода, но идея состоит в том, чтобы закодировать ваш код в шестнадцатеричном виде и выполнить его (или, скорее, позволитьэто будет выполнено).Есть и другие способы запутать код, который будет введен.

У вас там огромная дыра в безопасности.И самое смешное, что это даже не то, что нужно изобретать заново.Правильный способ предотвратить такие вещи - создать и использовать учетную запись с правильными разрешениями (например: может выполнять только select запросов к таблицам x, y и z).

1 голос
/ 17 сентября 2010

Взгляните на ASCII кодированные / двоичные атаки ...

должен убедить вашего друга, что он обречен ..;)

А здесь немного о том, как кодировать строки ..
Преобразование строки в HEX в SQL

...