
DirtyPipe (CVE-2022-0847) exploit written in Rust
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
Этот код предназначен только для образовательных и исследовательских целей.
Не используйте его на системах, которыми вы не владеете или на тестирование которых у вас нет разрешения.
Автор не несет ответственности за любое неправомерное использование, ущерб или юридические последствия, возникшие в результате использования этого кода.
Смотрите разбор этой уязвимости в моем блоге. Это реализация эксплойта DirtyPipe (CVE-2022-0847), написанная мной на Rust на основе разбора Макса Келлермана. Программа позволяет перезаписывать определенные файлы или перезаписывать SUID-бинарник для повышения привилегий.
passwd) для получения root/tmp перед эксплуатациейСначала создайте входной файл. Данные в этом файле будут использованы для перезаписи целевого. Затем просто выполните:
./dirtypipe_exploit -m overwrite -i input.txt -o target_file -b offset
Где offset — это смещение в байтах, с которого начать запись в файл. Смещение не должно находиться на границе страницы, и запись не может пересекать границу страницы из-за природы уязвимости.
Режим SUID заменяет указанный SUID-бинарник заданным ELF-пейлоадом. ELF-файл suid предоставлен в релизе этого репозитория и будет использован эксплойтом, если не указано иное в параметрах.
Кроме того, вы можете сгенерировать его самостоятельно или изменить пейлоад с помощью скрипта gen_suid.py (pwntools) и файла loader.asm. Этот вариант будет рассмотрен ниже.
Эксплойт по умолчанию устанавливает цель /usr/bin/passwd.
Выполните следующее, чтобы заменить /usr/bin/passwd на предоставленный пейлоад (запускает shell от root):
./dirtypipe_exploit -m suid
Затем выполните /usr/bin/passwd, чтобы получить root-shell.
Чтобы сгенерировать собственный пейлоад, выполните следующие шаги:
gen_suid.py, который использует pwntools для генерации пейлоада (shellcode.bin), запускающего root-shell. Измените его по своему усмотрению.nasm -f bin -o [ИМЯ_ПЕЙЛОАДА] loader.asm. Это превратит файл shellcode.bin в исполняемый файл../dirtypipe_exploit -m suid -i [ИМЯ_ПЕЙЛОАДА] -o [ЦЕЛЕВОЙ_ФАЙЛ].Спасибо автору STALKR's BLOG за 64-битный крошечный ELF-заголовок (здесь).