Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/hardenedlinux/userland-exec
ExploitationIDS/IPS EvasionPost-ExploitationBinary AnalysisRed Teaming
GitHubhardenedlinux/userland-exec

userland-exec

Userland exec PoC to be used as attack vector technique

查看仓库
146144个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Userland Exec

Userland exec 在当前地址空间内用一个新的进程映像替换现有的进程映像。它模拟系统调用 execve 的行为,但描述进程映像的进程结构保持不变。换句话说,系统工具报告的进程名称将保留旧的进程名称。

该技术可用于在获得任意代码执行后实现隐蔽性。它还可用于执行存储在 noexec 分区中的二进制文件。

第一个 userland exec 由 grugq 创建。本仓库深受 Rapid7 Mettle library 的启发,其中包含对该技术的全面 博客描述。

最初,本仓库的大部分代码模仿了 Mettle 库,但后来已扩展出额外的复杂性以绕过 SELinux 验证。

绕过 SELinux 验证

SELinux 包含 execmem 验证,该验证确保:

  • 曾经可写的页面不能变为可执行(即,使用 mprotect 将 PROT_WRITE 改为 PROT_EXEC 是不被允许的)。
  • 没有任何页面可以同时可写和可执行(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。

测试

构建与使用

本节介绍如何为 Android 和 x86 机器构建。在继续之前,请确保已安装 libelf。

x86

构建

root@kitploit:~
mkdir build && cd build
cmake ..
make

用法

root@kitploit:~
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

调试构建

root@kitploit:~
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Android

构建

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

用法

root@kitploit:~
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 许可证。

下载工具
操作系统架构结果
Ubuntu 24.04x86_64成功
Archlinux 6.12.4x86_64成功
CentOSx86_64成功
Raspberry Pi OSarm64成功
S23 Android 14arm64成功