Pikaboo (2021)

Ключевые моменты прохождения:
✅ Эксплуатируем стандартную Union SQL-инъекцию ✅ Эксплуатируем атаку Off-by-slash (Nginx мисконфиг) ✅ Эксплуатируем LFI ✅ Эксплуатируем LFI -> Log Poisoning через FTP ✅ Вытаскиваем полезную информацию через LDAP(389 порт) ✅ Эксплуатируем уязвимость через perl
Разведка
По дефолту сканируем nmap'ом:

Методом угадывания можно нащупать панель админа с HTTP-авторизацией:

В выводе nmap'а написано, что используется nginx, а на веб-странице, что Apache. Можно предположить, что Nginx является прокси для Apache. Также можно вспомнить очень популярный мисконфиг nginx - "Off-by-slash".
Уязвимость "Off-by-slash" заключается в отсутствии завершающего слэша в location в nginx конфиге, например, может быть так:


Через раздел Typography можно найти LFI:

Разумеется, нужно все делать через php-врапперы, потому что в ином случае код php страниц просто не отобразится:
Теперь можно пробрутить и это:

Тут можно эксплуатировать такую атаку, как Log Poisoning, так как все то, что выведено на странице из логов, может выполняться, как PHP-код.
Делаем такой сплойт и указываем его в качестве имени при подключении по FTP:

Сразу после подключения можно глянуть крон:
csvupdate - это скрипт, написанный на Perl, который читает CSV файлы и добавляет содержимое в PocketApi файлы. Итак, смотрим открытые порты:

389 порт - это LDAP, точнее сервис, который работает на протоколе LDAP.
LDAP - протокол прикладного уровня для доступа к службе каталогов X.500, разработанный IETF как облегчённый вариант разработанного ITU-T протокола DAP. LDAP — относительно простой протокол, использующий TCP/IP и позволяющий производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, изменения или удаления записей. Обычно LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP. Для LDAP-сеансов, инкапсулированных в SSL, обычно используется порт 636. В данном файле мы можем найти креды, которые помогут с ldap'ом:
Теперь смотрим LDAP:
Декодим пароль из base64:
По ssh подключиться не получилось, пробуем FTP:

Чтобы подняться до рута нужно использовать уязвимость в perl функции open(). То есть, мы можем использовать символ | для того, чтобы исполнять различный код. Вот тут можно разобрать подробно данную уязвимость.
Сначала ставим листенер для будущего рута на нашей машине:
Создаем сплойт на нашей машине так:
Подключаемся по FTP, настраиваем домашнюю директорию и загружаем эксплоит:

Last updated
Was this helpful?