Назад | Перейти на главную страницу

Можно ли использовать xp_cmdshell для форматирования жесткого диска?

Я просматривал некоторые стандарты кодирования в своей работе и наткнулся на это:

string query = "SELECT * FROM USERS WHERE USER_ID='" + userIdFromWebPage + "'";

userIdFromWebPage - это переменная, содержащая ненадежные данные, которые не были проверены.

Представьте, что он содержит одно из следующего:

Окончательный запрос может выглядеть так.

string query = "select * FROM USERS WHERE USER_ID='';exec xp_cmdshell('format c:') -";

Это приводит к формату диска c: \ на сервере базы данных.

Это правда?

Настоящий вопрос can that code be used for SQL Injection? и ответ - абсолютно да. Дни вандалов, которые форматировали ваш диск только для того, чтобы сеять хаос, давно прошли, в наши дни атаки осуществляют люди, заинтересованные в финансовой выгоде, они обычно используют вектор SQL-инъекций, как правило, для добавления вашего хоста в свой ботнет, иногда для кражи информации Иногда приходится брать свои данные в заложники и требовать выкуп (зашифровать их и попросить компенсацию за расшифровку). Так что вряд ли они выдадут format c:.

Жестяная банка xp_cmdshell использоваться для выполнения такой команды, как format c:? Не по умолчанию, начиная с SQL 2005 движок отключает xp_cmdshell по умолчанию и администратор должен явно включить его обратно. Но если это является включен, можно ли его использовать? Да. Отформатирует ли ОС диск c:? Вряд ли. Сегодня ни одна операционная система не поддерживает формат системного тома.

Но в конечном итоге дело в том, что ваш код должен не допускать SQL-инъекций.