Кому сегодня нужны торты — Mini Cakes(TM) намного компактнее.

http://ctf.kaf.sh:1170

Мы вводим вызов и получаем подсказку:

Давайте попробуем ввести имя пользователя: TEST12345, мы получим следующие новые файлы cookie:

шоколадные чипсы=8986be71408ace74486e35bd17c4ea6bc7fe5f020be9ab46f2f5dfd73f28a397; шоколадный чип=TEST12345

Кроме того, мы получаем новый экран меню с различными типами файлов cookie, в которые можно добавить 1.

Если мы посмотрим на исходный код, мы сможем найти сценарий, который больше не используется.

Здесь мы можем найти разные функции — некоторые из них интересны, а другие нет. Самое интересное из сценария это

Секретное значение SERVER_SIGNATURE, тип «FLAG», который, вероятно, является флагом, который мы пытаемся получить. И мы можем увидеть новую функцию, которую мы не видели раньше — функцию renameBox, и новый интересный путь files/boxes/?name

Итак, давайте попробуем получить доступ к files/boxes/?name=TEST12345&type=Flag&secret=8986be71408ace74486e35bd17c4ea6bc7fe5f020be9ab46f2f5dfd73f28a397, и мы получим пустую HTML-страницу, хммм, я думаю, нам действительно нужно быть администратором. Давайте проверим, работает ли это на самом деле, и попробуем получить доступ к файлам cookie biscotti с помощью files/boxes/?name=TEST12345&type=Biscotti&secret=8986be71408ace74486e35bd17c4ea6bc7fe5f020be9ab46f2f5dfd73f28a397 OK. Получаем следующий код:

<! —

?php
const BOX_NAME = «По умолчанию»;
const BOX_AMOUNT = 1;
const BOX_NAME_HASH = «f450ec01252f13caa8e516c174ceee9d2b314cba47e9cae33b1c3330f9e93b2a»; --›

Хммм. Похоже, он пытается очистить имя ящика (по умолчанию) из файла PHP. Что бы мы хотели там увидеть? То, что мы хотели бы приобрести, это:

<! —

?php
const BOX_NAME = SERVER_SIGNATURE;
const BOX_AMOUNT = 1;
const BOX_NAME_HASH = «f450ec01252f13caa8e516c174ceee9d2b314cba47e9cae33b1c3330f9e93b2a»; --›

К счастью, мы помним, что есть функция renameBox, которая позволяет изменять эту переменную BOX_NAME. Давайте попробуем вызвать поле переименования и протестировать PHP-инъекцию:

новое_имя = "\".SERVER_SIGNATURE.\""

секрет = «f450ec01252f13caa8e516c174ceee9d2b314cba47e9cae33b1c3330f9e93b2a»

renameBox("Бискотти", новое_имя, секрет);

Хммм, но мы, кажется, получаем ошибку:

Хммм, кажется, секрет, который мы предоставляем, проверяется с помощью имени пользователя, давайте попробуем создать пользователя с именем “.SERVER_SIGNATURE.” (мы используем SERVER_SIGNATURE, а не $SERVER_SIGNATURE, потому что это постоянное значение) и создадим повторную атаку с секретом. (Если пользователь уже существует, вы можете использовать“.SERVER_SIGNATURE."".”и добавлять столько .””., сколько хотите) Мы входим с помощью ".SERVER_SIGNATURE.”и получаем следующий секрет: choclatechips= 529d9e01daaf7176ae424b337d84a45df5aeb70390f3343b2f749fc42eefeccb

Давайте попробуем изменить имя ящика сейчас:

new_name = "\".SERVER_SIGNATURE.\""
secret="529d9e01daaf7176ae424b337d84a45df5aeb70390f3343b2f749fc42eefeccb"
renameBox("Biscotti", new_name, secret);

Это сработало!

Теперь мы можем подписать наш собственный файл cookie и войти в систему как администратор, чтобы получить флаг. Я использовал этот онлайн-инструмент для создания нового подписанного файла cookie (используйте режим sha256). Мы подписываем файл cookie с именем admin, а секрет будет 6b9fe740f2589d560d09f7bc3041e9ab7c41138aae20d8f89e83b8dd1b7d7d14.

Давайте попробуем получить доступ к files/boxes/?name=admin&type=Flag&secret=6b9fe740f2589d560d09f7bc3041e9ab7c41138aae20d8f89e83b8dd1b7d7d14 Это работает! И получаем флаг: KAF{_w00ps_f0rg0t_t0_d0_s3cur1ty}

Сводка

Мы использовали повторную атаку, чтобы использовать PHP-инъекцию в функции renameBox, оттуда мы подписали наш собственный файл cookie от имени администратора и использовали его для просмотра флага.

Это мой первый обзор Medium CTF, спасибо, что нашли время прочитать его! Я надеюсь написать еще много таких, не стесняйтесь писать мне @guysudai1 в твиттере или по электронной почте [email protected]