Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
userland-exec — Пользовательский PoC для exec, используемый как техника вектора атаки | Kitploit
Инструменты/GitHubGitHub/hardenedlinux/userland-exec
ЭксплуатацияОбход IDS/IPSПост-эксплуатацияАнализ Бинарных ФайловRed Teaming
GitHubhardenedlinux/userland-exec

userland-exec

Пользовательский PoC для exec, используемый как техника вектора атаки

Репозиторий
14614115 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Userland Exec

Userland exec заменяет существующий образ процесса в текущем адресном пространстве новым. Он имитирует поведение системного вызова execve, но структуры процесса, описывающие образ процесса, остаются неизменными. Иными словами, имя процесса, отображаемое системными утилитами, сохранит прежнее имя процесса.

Эта техника может использоваться для обеспечения скрытности после получения произвольного выполнения кода. Её также можно использовать для запуска бинарных файлов, хранящихся в разделах noexec.

Первый userland exec был создан grugq. Этот репозиторий во многом вдохновлён библиотекой Rapid7 Mettle, в которой есть подробное описание в блоге этой техники.

Изначально большая часть кода этого репозитория повторяла библиотеку Mettle, но с тех пор он был расширен дополнительной логикой для обхода проверок SELinux.

Обход проверки SELinux

SELinux включает проверку execmem, которая гарантирует:

  • Страница, которая когда-либо была доступна на запись, не может стать исполняемой (то есть изменение PROT_WRITE на PROT_EXEC с помощью mprotect запрещено).
  • Ни одна страница не может быть одновременно доступна на запись и на исполнение (политика W ^ X).

Обход mprotect

Чтобы обойти mprotect, необходимо создать временный файл. Это можно сделать с помощью memfd_create в сочетании с munmap и mmap, полностью избегая системного вызова mprotect.

Обход W ^ X

Пример elf_debugger.c демонстрирует, что любой ELF-файл содержит область PT_LOAD, которая одновременно является исполняемой и записываемой. Эта область необходима для загрузки информации о программе во время выполнения. Для решения этой проблемы была создана реализация bypass_wx.c. Эта конструкция:

  • Помечает страницу как исполняемую.
  • При попытках записи на эту страницу вызывает сигнал SIGSEGV.
  • Перехватывает сигнал и динамически изменяет защиту страницы с PROT_EXEC на PROT_WRITE.

Тестирование

OSАрхитектураРезультат
Ubuntu 24.04x86_64Успешно
Archlinux 6.12.4x86_64Успешно
CentOSx86_64Успешно
Raspberry Pi OSarm64Успешно
S23 Android 14arm64Успешно

Сборка и использование

В этом разделе описана сборка для устройств Android и машин x86. Перед началом убедитесь, что установлен libelf.

x86

Сборка

mkdir build && cd build
cmake ..
make

Использование

desktop % strace ./uexec hello others args here 2>&1 | grep exec
execve("./uexec", ["./uexec", "hello", "others", "args", "here"], 0x7ffc34ec02f0 /* 54 vars */) = 0
desktop % strace bash -c ./hello 2>&1 | grep exec
execve("/usr/bin/bash", ["bash", "-c", "./hello"], 0x7ffebecc3130 /* 54 vars */) = 0
newfstatat(AT_FDCWD, "/desktop/userland-exec/build", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
newfstatat(AT_FDCWD, "/desktop/userland-exec", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
execve("./hello", ["./hello"], 0x5fb22658e2a0 /* 54 vars */) = 0

Отладочная сборка

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Android

Сборка

mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
      -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-30 ..
make

Использование

desktop % adb push uexec hello /data/local/tmp
uexec: 1 file pushed, 0 skipped. 113.9 MB/s (22912 bytes in 0.000s)
hello: 1 file pushed, 0 skipped. 184.9 MB/s (6936 bytes in 0.000s)
2 files pushed, 0 skipped. 0.3 MB/s (29848 bytes in 0.090s)

desktop % adb shell
dm3q:/ $ cd /data/local/tmp
dm3q:/data/local/tmp $ chmod +x uexec
dm3q:/data/local/tmp $ ./hello
Hello World
dm3q:/data/local/tmp $ ./uexec hello
Hello World
dm3q:/data/local/tmp $

Устранение неполадок

В CentOS библиотека libc может вести себя необычно. Для решения этой проблемы предоставлена простая программа "Hello, World" на ассемблере — hello_nolibc.s. Этот пример вместе с cmake демонстрирует, как собрать и запустить программу без связывания с libc.

Если ваша версия CMAKE выше 4.0, при сборке можно добавить -DCMAKE_POLICY_VERSION_MINIMUM=3.5.

Лицензия

Этот репозиторий использует лицензию GPL-3.0.

Скачать инструмент