Применяется ли SQL-инъекция к запросам WMI? - PullRequest
5 голосов
/ 11 декабря 2010

Является ли SQL-инъекция угрозой с помощью WMI?

Например:

С учетом следующего кода, если domainName предоставляется извне и не подвергается санитарной обработке, чего потенциально может достичь злоумышленник?

string domainName = "user-inputted-domain.com";
string wql = "SELECT * 
    FROM MicrosoftDNS_ATYPE
    WHERE OwnerName = '" + domainName + "'";
// perform WMI query here...

Если это угроза, о которой я думаю, что было бы наилучшим способом защиты от нее вместо использования обычного параметризованного запроса, как это было бы с LINQ?Будет ли просто удаление каких-либо ['] символов сделать трюк?

И на другой ноте, есть ли какие-либо расширения LINQ для запроса WMI, которые будут решать эту проблему?


Редактировать: Найден класс SelectQuery.Еще не пробовал, но, похоже, он обладает более надежными возможностями построения запросов, например, свойство Condition.

1 Ответ

2 голосов
/ 03 января 2011

Точно так же уязвимо, что после этого они могут вводить любые произвольные условия.Подумайте, если они введут foo' OR SomeOtherField='bar в качестве ввода.Тем не менее, я не думаю, что вы можете выполнять несколько запросов WQL в одной строке, поэтому у него может не быть одной и той же «поверхности атаки», так как WQL - это такое небольшое подмножество SQL.

Итак,метод атаки все еще будет работать, да.Какой конкретный риск подвергает вас риску, зависит от некоторых из следующих факторов:

  • Может ли потенциальный злоумышленник досрочно прекратить выполнение вашего оператора WQL, а затем вставить свой собственный?
  • Могут ли они настроитьфильтр для выпуска большего количества данных, чем вы хотите (как я уже упоминал выше)?
  • вероятно, много других, о которых я не думал
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...