Перейти к содержимому
Назад к пути
Теория 2 мин чтения

2. Определение числа колонок (ORDER BY)

Определение числа колонок: Трюк с ORDER BY

Прежде чем хакер сможет применить UNION, ему нужно узнать точное количество колонок в оригинальном запросе. Для этого используется побочный эффект оператора ORDER BY, который позволяет сортировать данные не только по имени, но и по порядковому номеру колонки.

Изучим этот метод разведки и поймем, как по сообщениям об ошибках вычислить структуру вашего запроса.


1. Механика: "Сортировка по номеру"

Представьте запрос в Go-коде: SELECT id, title, price FROM products WHERE category = '%s' (через fmt.Sprintf).

Хакер не знает, что в запросе ровно 3 колонки. Он начинает подставлять:

  1. category = 'Electronics' ORDER BY 1-- (Сортировка по первой колонке id) → Работает!
  2. category = 'Electronics' ORDER BY 2-- (Сортировка по второй колонке title) → Работает!
  3. category = 'Electronics' ORDER BY 3-- (Сортировка по третьей колонке price) → Работает!
  4. category = 'Electronics' ORDER BY 4-- (Ошибка: The ORDER BY position number 4 is out of range) → НАШЛИ!

2. Результат разведки: "Тройка!"

Как только запрос с ORDER BY 4 упал с ошибкой, хакер понимает: в оригинальном SELECT ровно 3 колонки.

Теперь он знает, что в UNION SELECT ему нужно подставить ровно 3 значения, иначе база выдаст синтаксическую ошибку.


3. Таблица работы: Поиск края

Попытка SQL-запрос (через Sprintf) Итог (Результат)
1 ... ORDER BY 1-- 🟢 Успех (Результат на странице)
2 ... ORDER BY 2-- 🟢 Успех (Результат на странице)
3 ... ORDER BY 3-- 🟢 Успех (Результат на странице)
4 ... ORDER BY 4-- 🔴 ОШИБКА DB (Короткий SELECT)

Как это выглядит в браузере

На практике вы вводите пейлоад прямо в поле поиска каталога и нажимаете Search:

Когда номер колонки превышает реальное количество — база возвращает ошибку. Это означает, что вы нашли верхнюю границу.


4. Почему это работает в Go?

Потому что разработчик не очищает ввод и не использует параметры. Любой текст в URL попадет прямо в тело запроса. Если вы видите в своих логах странные ORDER BY с цифрами — это прямое доказательство того, что кто-то пытается определить структуру вашей базы для UNION-атаки.


ORDER BY — это фонарик, которым хакер освещает темную комнату вашей структуры базы данных.

Знание количества колонок — это только половина дела. Далее нам нужно выяснить, какие из них могут отображать текст, используя технику подбора типов с помощью NULL.

Продолжить чтение

Что бы прочитать модуль полностью, зарегистрируйтесь/войдите на платформу

Когда закончишь — отметь раздел, чтобы продолжить.

🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru