Наши разведчики обнаружили магазин по продаже арбалетов.
Мы не смогли найти там уязвимость, но может у тебя получится.
У нас есть исполняемый файл и адрес, где этот магазин находится.
Посмотри, может у тебя получиться найти уязвимость и проэксплуатировать её.
nc <ip> <port>
flag in /tmp/flag.txt
Отдать командам бинарник из deploy/static и ip-адрес сервера
cd deploy
docker-compose up --build -d
ELF 64bit, C, no strip, no pack
Суть задания - проэксплуатировать переполнение глобального буфера через структуру из 4 полей.
Основная концепция решения - это перезапись printf_function_table и printf_arginfo_table для переопределения вызываемых функций для модификаторов формата.
- В функции sell_arbalest, при добавлении нового арбалета (также как и в функции insert_in_list) не проверяется выход за границы индекса g_list_index
- Таким образом мы можем перезаписывать структурой секцию .bss вниз от нашего буфера
- В итоге можно подобрать оффсеты таким образом, что можно переопределить модификатор "%s" с помощью поля "цена" арбалета, которое мы можем контролировать и вводить туда адрес, а "%d" переопределяется указателем на кучу, где хранится имя пользователя.
- Можно найти функцию _dl_make_heap_executable и получить выполнение кода на куче
- После этого располагаем шеллкод в имени пользователя и вызываем метод "view profile info", который последовательно вызывает "%s" и "%d"
- Пример эксплоита представлен ниже
Cup{730ba228a7eb2ab23ce309259ab4a5e83df7d12109a7f170d5c04527882217f5}