2. Определение числа колонок (ORDER BY)
Определение числа колонок: Трюк с ORDER BY
Прежде чем хакер сможет применить UNION, ему нужно узнать точное количество колонок в оригинальном запросе. Для этого используется побочный эффект оператора ORDER BY, который позволяет сортировать данные не только по имени, но и по порядковому номеру колонки.
Изучим этот метод разведки и поймем, как по сообщениям об ошибках вычислить структуру вашего запроса.
1. Механика: "Сортировка по номеру"
Представьте запрос в Go-коде:
SELECT id, title, price FROM products WHERE category = '%s' (через fmt.Sprintf).
Хакер не знает, что в запросе ровно 3 колонки. Он начинает подставлять:
category = 'Electronics' ORDER BY 1--(Сортировка по первой колонкеid) → Работает!category = 'Electronics' ORDER BY 2--(Сортировка по второй колонкеtitle) → Работает!category = 'Electronics' ORDER BY 3--(Сортировка по третьей колонкеprice) → Работает!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.
Продолжить чтение
Что бы прочитать модуль полностью, зарегистрируйтесь/войдите на платформу
Когда закончишь — отметь раздел, чтобы продолжить.