Автор: Leofwin (Чуприлин Андрей)
Наши специалисты написали SUPER-MEGA-ЖЕСТЬКАКОЙ-защищенный сервис. В нем можно получить информацию о сотрудниках корпорации. Мы, путем сложного перебора, достали один из аккаунтов: test:test
. Сможете добыть телефон админа сервиса?
Не забудьте обернуть в Cup{...}
Сервис находится в папке service
и обернут в докер.
Внутри докера сервис работает на порту 5000.
Сервис на входе предлагает пройти авторизацию. Успешно авторизовавшись, можно увидеть карточку с информацией о пользователе. Однако, некоторую информацию мы по-прежнему не можем увидеть (например, телефон пользователя).
Авторизация построена на основе поиска LDAP. В сервисе не хватает некоторых проверок, что позволяет нам использовать LDAP-инъекцию. В условии задания сказано добыть номер телефона админа, но посмотреть его в карточке возможности нет, так что будем строить инъекцию с перебором значений для поля mobile
.
Существует некоторое количество payload'ов для LDAP-инъекций, часть из которых можно посмотреть в PayloadAllThings. Использование элементарного %00
в данном случае не проходит - сервис валидирует данный символ.
Попробуем понять как бы выглядел самый простой запрос LDAP с такими параметрами:
(&
(login=$login)
(password=$pass)
)
И при этом мы хотим добавить проверку на поле mobile
. Будем указывать значения логина и пароля в следующем формате:
login=admin)(|(mobile=*
password=1)
Таким образом, у нас получится следующий запрос к LDAP-серверу:
(&
(login=`admin)
(|
(mobile=*)
(password=1)
)
)
Теперь вместо *
можно в поле mobile
можно начать перебирать значение, пока не получим флаг.
Реализацию данной атаки можно посмотреть в файле sploit.py
.
Cup{th3r34r3n0t0nlysql1nj3ct10ns}