Главной задачей было симулировать ситуацию наиболее приближенную к реально возможному сценарию: таким образом программа была скомпилирована со всеми основными флагами безопасности (подробнее про это позже) и запущена в изолированном docker-контейнере, с нулевым числом внешних зависимостей.
Исходный код
программы, которая запущена на удалённом сервереЭксплойт
Описание используемых уязвимостей
Для сборки и деплоя используется система сборки PwnableHarness
. После установки необходимых зависимостей, можно скомпилировать проект и поднять docker-контейнер с приложением одной командой
pwnmake publish
Само приложение представляет из себя довольно простую консольную утилиту, которая способна выполнять некоторые команды с файловой системой
Команда для компиляции
gcc -m64 -I. -O0 -fPIC -DNDEBUG=1 -MD -MP -MF src/*.c.d -c -o src/*.c.o src/*.c
gcc -m64 -Wl,-z,relro,-z,now -pie -o unhackable_bash src/*.o
В итоге получаем 64-битный ELF для x86 с полным набором ограничений для безопасного исполнения
Результатом выполнения эксплойта является доступ к shell на удалённой машине