Попытка SQL-инъекции на моем сервере - PullRequest
2 голосов
/ 02 июня 2010

Я немного знаю об SQL-инъекциях и декодировании URL, но может ли кто-нибудь, кто в этом вопросе более эксперт, чем я, взглянуть на следующую строку и сказать мне, что именно он пытается сделать?

Какой-то парень из Пекина пару недель назад попробовал несколько инъекций, подобных приведенным ниже.

% 27% 20and% 20char (124)% 2Buser% 2Bchar (124) = 0% 20and% 20% 27% 27% = 27

Ответы [ 4 ]

4 голосов
/ 02 июня 2010

Он делает предположение о виде оператора SQL, в который подставляются данные формы, и предполагает, что он будет плохо очищен на каком-то этапе пути. Рассмотрим программу, общающуюся с сервером SQL (например, Cish-код):

fprintf(sql_connection, "SELECT foo,bar FROM users WHERE user='%s';");

Однако в приведенной выше строке SQL-сервер видит:

SELECT foo,bar FROM users WHERE user='' and char(124)+user+char(124)=0 and ''='';

Упс! Это было не то, что вы хотели. Что произойдет дальше, зависит от серверной части базы данных и от того, включен ли подробный отчет об ошибках.

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

Теперь рассмотрим имя пользователя '; DESCRIBE TABLE users; SELECT 1 FROM users WHERE 'a'='. И так далее ... Здесь есть несколько разных стратегий, в зависимости от того, как именно выходят данные. Существуют наборы инструментов для внедрения SQL, которые могут автоматизировать этот процесс и пытаться автоматически выгружать все содержимое базы данных через незащищенный веб-интерфейс. Сообщение в блоге Рафаля Лоса содержит немного больше технической информации.

Вы не ограничены кражей данных; если вы можете вставить произвольный SQL, то обязательная ссылка xkcd иллюстрирует это лучше, чем я.

2 голосов
/ 02 июня 2010

Другие люди рассказали о том, что происходит, поэтому я воспользуюсь моментом, чтобы сесть на своего высокого коня, и настоятельно рекомендую, чтобы, если вы этого еще не сделали (я подозреваю, что не из комментария ниже), вы используйте параметризованные запросы . Они буквально делают вас невосприимчивым к SQL-инъекциям, потому что они приводят к тому, что параметры и запрос передаются совершенно отдельно. Есть также потенциальные преимущества производительности, Ядда Ядда и т. Д.

А если серьезно, сделай это.

2 голосов
/ 02 июня 2010
' and char(124)+user+char(124)=0 and ''='

это странно .. однако, убедитесь, что вы избегаете строк, чтобы не было инъекций sql

2 голосов
/ 02 июня 2010

Подробную информацию вы найдете здесь:

http://blogs.technet.com/b/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.aspx

Эти строки имеют двойное кодирование - первый набор закодированных символов, который будет переведен IIS, являются обозначается% XX. Например,% 20 является пространство. Второй набор не предназначен для переводить, пока они не доберутся до SQL Server, и они используют символ (ххх) функция в SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...