>
Ноябрь 2017
Пн Вт Ср Чт Пт Сб Вс
« Окт    
 12345
6789101112
13141516171819
20212223242526
27282930  

Справочник команд для SQL иньекций.

Справочник команд для SQL инъекций создан для сводного описания технических особенностей различных типов уязвимостей SQL-injection. В статье представлены особенности проведения SQL-инъекций в MySQL, Microsoft SQL Server, ORACLE и PostgreSQL.

Image result for sql injection

0. Справочник команд для SQL иньекций – Введение

В данной статье вы можете найти подробную техническую информацию о различных видах SQL-инъекций. Она может быть полезна как опытным специалистам, так и новичкам в области ИБ.

В настоящий момент памятка содержит информацию только для MySQL, Microsoft SQL Server и некоторые данные для ORACLE и PostgreSQL. Разделы содержат синтаксис, пояснения и примеры инъекций.

Используемые обозначения:
• M (MySQL);
• S (SQL Server);
• O (Oracle);
• P (PostgreSQL);
• + (возможно на других БД);
• * (требуются специальные условия).

1. Строчные комментарии

Комментарии, как правило, полезны для игнорирования части запроса.
Синтаксис:

Пример:
Username: admin' --
Сгенерированный запрос: SELECT * FROM members WHERE username = 'admin'--' AND password = 'password'
Это позволит зайти в систему как пользователь admin, игнорируя проверку пароля.

2. Блочные комментарии

С их помощью можно игнорировать часть запроса, заменять пробелы, обходить чёрные списки, определять версию БД.
Синтаксис:

Это специальный синтаксис комментариев для MySQL. Он позволяет обнаружить версию MySQL. Такой комментарий сработает только в MySQL
Примеры:

Игнорируем оставшуюся часть запроса, также как строчным комментарием.

вы получите такой же ответ, как и при ID=10, если MySQL версии выше 3.23.02

Сгенерированный запрос: SELECT /*!32302 1/0, */ 1 FROM tablename
Возникнет ошибка деления на 0, если на сервере стоит MySQL версии выше 3.23.02

3. Последовательность запросов

Позволяет выполнить более одного запроса за раз. Это полезно в любой точке инъекции.

sql-cheat-sheet
Зелёный — поддерживается; чёрный — не поддерживается; серый — неизвестно.
Синтаксис:

Один запрос закончился, следующий начался.
Пример:

Сгенерированный запрос: SELECT * FROM products WHERE id = 10; DROP members--
Этот запрос удалит таблицу members после обычного запроса.

4. Условные операторы

Получим ответ на запрос при выполнении условия. Это один из ключевых пунктов слепой инъекции. Также помогают точно проверить простые вещи.
Синтаксис:

пример:

выдаст ошибку деления на ноль, если текущий пользователь не «sa» или «dbo».

5. Использование чисел

Используется для обхода magic_quotes() и подобных фильтров, в том числе и WAF.
Синтаксис:

Примеры:

Покажет содержание файла c:boot.ini

6. Конкатенация строк

Операции над строками могут помочь обойти фильтры или определить базу данных.
Синтаксис:

Сработает, если MySQL запущен в режиме ANSI. В противном случае MySQL не примет его как логический оператор и вернёт 0. Лучше использовать функцию CONCAT() в MySQL.

7. Строки без кавычек

Есть несколько способов не использовать кавычки в запросе, например с помощью

Синтаксис:

В MySQL есть простой способ представления строки в виде hex-кода:

Возвращает строку “KLM”:

8. Преобразование строк и чисел.

Синтаксис:

Возвращает ASCII- код самого левого символа. Функция используется для слепых инъекций.

Переводит ASCII-код в соответствующий символ.

9. Оператор UNION

С оператором UNION можно делать запросы к пересечению таблиц. В основном, вы можете отправить запрос, возвращающий значение из другой таблицы.
Пример:

Это позволит объединить результаты из таблиц news и members

10. Обход проверки подлинности (SMO+)

Примеры:

11. Обход проверки подлинности с использованием MD5

Если приложение сначала сравнивает имя пользователя, а потом сравнивает md5-хеш пароля, то вам потребуются дополнительные приёмы для обхода проверки подлинности. Вы можете объединить результаты с известным паролем и его хешем.
Пример (MSP):

12. Error Based
12.1 Определение столбцов с помощью HAVING BY(S)

Пример:
В том же порядке

Продолжайте до тех пор, пока не прекратите получать ошибки.

12.2 Определение количества столбцов с помощью ORDER BY (MSO+)

Поиск количества столбцов с помощью ORDER BY можно ускорить, используя UNION-инъекции.

Продолжайте, пока не получите сообщение об ошибке. Это укажет на количество столбцов.

13. Определение типа данных

Всегда используйте UNION вместе с ALL.
Чтобы избавиться от ненужной записи в таблице, используйте -1 любые не существующие значения в начале запроса (если инъекция в параметре WHERE). Это важно если вы можете извлекать только одно значение за раз.
Используйте NULL в UNION-инъекциях вместо попыток угадать строку, дату, число и прочее. Но будьте аккуратны при слепой инъекции, т.к. вы можете спутать ошибку БД и самого приложения. Некоторые языки, например ASP.NET, выдают ошибку при использовании значения NULL (т.к. разработчики не ожидали увидеть нулевое значение в поле username)
Примеры:

Если вы не получаете сообщение об ошибке, значит столбец является числовым.

Можно использовать CAST() или CONVERT()

Если нет ошибки, значит синтаксис верный, т.е. используется MS SQL Server.

Если нет ошибки, значит первый столбец является числом.

Если появилась ошибка, значит второй стоблец не является числом.

Если нет ошибки, значит второй столбец является строкой.

14. Простая вставка (MSO+)

Пример:

15. Сбор информации

Синтаксис:

Вы можете узнать версию БД и более подробную информацию.
Пример:

16. Сложная вставка (S)

Позволяет вставить содержимое файла в таблицу. Если вы не знаете внутренний путь web-приложения, вы можете прочитать метабазу IIS (только IIS 6).
Синтаксис:

Затем вы можете в ней найти пути приложения.
Пример:
1. Создать таблицу foo( строка типа varchar(8000) )
2. Вставить в таблицу foo содержимое файла ‘c:inetpubwwwrootlogin.asp’
3. Удалите временную таблицу и повторите для другого файла.

17. BCP (S)

Записывает текстовый файл. Для этого требуются учётные данные.
Пример:

18. VBS, WSH в SQL Server (S)

Вы можете использовать VBS, WSH скрипты в SQL Server.
Пример:

19. Выполнение системных команд (S)

Известный приём, по умолчанию функция отключена в SQL Server 2005. Вам необходимы права администратора.
Пример:

20. Специальные таблицы в SQL Server (S)

Примеры:
Сообщения об ошибках: master..sysmessages
Связанные серверы: master..sysservers
Password SQL Server 2000: masters..sysxlogins
Password SQL Server 2005 : sys.sql_logins

21. Несколько хранимых процедур для SQL Server (S)
Синтаксис:

Примеры:

22. MSSQL Bulk Notes

Примеры:

23. SQL-инъекция в LIMIT (M) запросах

Пример:

Чтобы обойти оператор LIMIT, вы можете использовать UNION или комментарий.

24. Выключение SQL Server (S)
Пример:

25. Enabling xp_cmdshell in SQL Server 2005

Синтаксис:
По умолчанию xp_cmdshell и пара других потенциально опасных функций отключены вSQL Server 2005. Обладая правами администратора, вы можете их включить.

26. Поиск структуры БД в SQL Server (S)

Примеры:

Получение пользовательских таблиц

Получение названий столбцов

27. Перемещение записей (S)

Примеры:

Используйте WHERE вместе с NOT IN или NOT EXIST

28. Быстрый способ извлечь данные из Error Based SQL-инъекции в SQL Server (S)

29. Поиск структуры БД в MySQL (M)

Примеры:

Получение пользовательских таблиц

Получение названий столбцов

30. Поиск структуры БД в Oracle (O)

Примеры:

Получение пользовательских таблиц

Получение названий столбцов

31. Слепые инъекции

В качественном приложении вы не сможете увидеть сообщения об ошибках. Вы не сможете использовать оператор UNION и Error Based атаки. Вам придётся использовать слепые SQL-инъекции для извлечения данных. Существует два типа слепых инъекций.

Обычная слепая инъекция: вы не можете видеть результаты запросов на странице, но можете определить результат из ответа или HTTP-статуса.
Полностью слепая инъекция: Вы не увидите никакой разницы в выходных данных.
В обычных слепых инъекциях вы можете использовать операторы IF и WHERE, в полностью слепых инъекциях вам нужно использовать некоторые функции ожидания и сравнивать время отклика. Для этого можно использовать WAIT FOR DELAY ‘0:0:10’ в SQL Server, BENCHMARK() и sleep(10) в MySQL, pg_sleep(10) в PostgreSQL.
Пример:
Этот пример основан на реальной эксплуатации слепой инъекции на SQL Server.

Исходя из двух последних запросов мы точно знаем значение первого символа в ascii – это 80. Значит, первый символ это P. Таким образом мы можем узнать названия таблиц и их содержимое. Другой способ – читать данные побитово.

32. Полностью слепая инъекция
Используйте данный метод только в случае действительно слепой инъекции. Будьте осторожны со временем ожидания.
Синтаксис:

Функция просто ждёт указанное время, не загружая процессор.
Примеры:

Синтаксис:

Пример:

Проверяем наличие пользователя root.

Проверяем наличие таблицы в MySQL
Синтаксис:

Пример:

{INJECTION} – ваш запрос.
Если условие истинно, отклик будет 10 секунд. В противном случае отклик будет 1 секунду.

33. Полезные функции MySQL

Синтаксис:

34. Second Order SQL Injections

Обычно, вы вставляете запрос для SQL-инъекции в поле и ожидаете, что он не отфильтруется.
Пример:

Если приложение использует имя поля хранимой процедуры или функции, то вы можете использовать это для инъекции.

35. Использование SQL Server для извлечения NTLM-хешей

Данная атака поможет получить через SQL Server пароль пользователя Windows целевого сервера, если нет доступа извне. Мы можем заставить SQL Server подключиться к Windows по UNC-пути и извлечь NTLM-сессию специальными инструментами, например Cain & Abel.

Синтаксис:

36. Другие примеры инъекций

{INJECTION} — ваш запрос.

Создаёт NBNS/DNS-запрос к yourhost.com

Записывает данные в ваш файл
{INJECTION} — ваш запрос.
Oracle:

Сниффер будет сохранять результаты

Результаты будут сохранены HTTP-логи

Вам нужно анализировать трафик DNS-запросов к yourhost.com

Вам нужно анализировать трафик DNS-запросов к yourhost.com
{INJECTION} — ваш запрос.

[Всего голосов: 13    Средний: 3.8/5]
Share Button

Вам может быть интересно также:

Last updated by at .

Leave a Reply

You can use these HTML tags

<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">