Эй, бро, если ты думал, что LDAP — это просто скучная хрень для авторизации, где хранятся логины твоих коллег, то ты глубоко ошибаешься. Это золотая жила для багхантеров, особенно когда админы оставляют дыры в фильтрах. Blind LDAP Injection — это как играть в «горячо-холодно» с сервером, пока он сам не выдаст тебе пароль доменного админа. В этой статье я, твой кореш, покажу, как выудить данные из LDAP, даже если сервер не отвечает тебе прямым текстом. Готовь Burp и кофе, ща будет жарко.
Точка входа
Что вижу: Уязвимость в обработке пользовательского ввода, который идёт в LDAP-фильтр, например, в логин-форме или поисковом эндпоинте. Типичный косяк — строка (&(uid={input})(objectClass=user))
, где {input}
не фильтруется и пихается прямо в запрос.
Как поймал: Инструмент — Burp Suite для перехвата + кастомный фаззер на Python с библиотекой ldap3
для теста инъекций. Метод: подстановка классических LDAP-пейлоадов вроде *)(uid=*
и проверка на различия в ответах сервера (тайминг или коды ошибок).
Чем пахнет: Класс — Blind LDAP Injection с потенциалом дампа учётных данных или эскалации до доменного админа. Вероятность эксплойта — 7/10, если фильтрация на уровне «да похер».
Чё почём
Эксплойт: Держи рабочий подход, братан, без всяких «замени IP на свой». Если у тебя есть логин-форма, которая отправляет username
в LDAP, лови слепую инъекцию для проверки:
1 |
curl -X POST 'http://target.com/login' -d 'username=*)(uid=*&password=whatever' |
Этот пейлоад пытается подставить *)(uid=*
в фильтр, чтобы запрос стал (&(uid=*)(uid=*))(objectClass=user))
, что часто возвращает «успешный» ответ или ошибку, если фильтр сработал. Главное — лови разницу в поведении сервера: если на *)(uid=*
ответ 200, а на *)(uid=admin
задержка или другой код — ты на верном пути.
Обход защиты: Если сервер режет звёздочки или скобки, используй альтернативные кодировки или пробелы:
1 |
curl -X POST 'http://target.com/login' -d 'username=)%28uid%3Dadmin%29%28objectClass%3D*%29&password=whatever' |
WAF’ы часто пропускают URL-encoded пейлоады, думая, что это просто кривой запрос.
Доказательство: Смотри на ответы. Если на пейлоад *)(uid=admin
сервер отвечает 200 или долго думает, а на *)(uid=notadmin
выдаёт 403 — поздравляю, ты вычислил учётку админа слепым методом. Скриншоти тайминг (например, через Burp Repeater с таймером) — это твой PoC для баг-баунти, а не фотка кота.
Советы
LDAP — это как твой старый роутер: выглядит надёжно, а внутри дыры из 2005 года. Если зацепился за Blind Injection, вот три вектора для добивания:
-
Энумерация учёток через тайминг-атаки: Пробуй перебирать имена типа
*)(uid=admin
и*)(uid=user1
, смотри на задержки. Используй скрипт на Python сldap3
для автоматизации. -
Вытаскивание атрибутов: Если сервер выдаёт разные ответы на фильтры, попробуй
*)(sAMAccountName=admin
или*)(userPassword=*
— иногда можно угадать поля через слепую инъекцию. -
Комбинированный подход с Kerberos: Если выудил имя админа, врубай атаку Kerberoasting через
GetUserSPNs.py
из Impacket, чтобы сломать Service Principal Names и вытащить хэши.
План атаки:
-
Перехватывай запросы через Burp, ищи поля (логин, поиск), которые могут идти в LDAP-фильтр.
-
Фаззи их с классикой:
*)(uid=*
,admin)(objectClass=*
, и смотри на ответы (коды, тайминг). -
Если есть различия в поведении — автоматизируй перебор через Python-скрипт или Burp Intruder. Цель — найти валидные учётки (типа
admin
илиservice_account
). -
Используй найденные данные для брута или комбинируй с другими атаками на Active Directory.
Если всё глухо — иди спать, бро. Или попробуй ещё один вектор: пихай пейлоады вида *)(|(uid=admin)(uid=user))
, чтобы обойти простые фильтры через оператор OR.
Бонус:
-
Проверь
robots.txt
иsitemap.xml
— там часто валяются/ldap-debug
или/api/users
, где можно подсмотреть схему запросов. -
Если видишь JWT в куках, ломай через
jwt_tool -I -pc name -pv admin
и ищи слабыйalg: none
. -
Скань на
169.254.169.254/latest/meta-data
— вдруг токены AWS вывалятся, как мой старый доступ к тестовому серверу. -
Если всё плохо — заливай reverse-shell в EXIF картинок для аватарок. Да, это низко. Да, это работает.
Blind LDAP Injection — это как шахматы с сервером: ход за ходом ты выманиваешь у него секреты, пока не станешь королём домена. Пиши отчёт, лови бабки на баг-баунти.