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

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

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

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

工具目录

分类

查看所有分类
Loading categories
dlinject — 将共享库(即任意代码)注入到运行中的Linux进程,无需ptrace | Kitploit
工具/GitHubGitHub/davidbuchanan314/dlinject
漏洞利用Shellcode红队
GitHubdavidbuchanan314/dlinject

dlinject

将共享库(即任意代码)注入到运行中的Linux进程,无需ptrace

查看仓库
827861年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

dlinject.py

将共享库(即任意代码)注入到活动的Linux进程中,无需ptrace。灵感来源于Cexigua和linux-inject等。

asciicast

用法

root@kitploit:~
    .___.__  .__            __               __
  __| _/|  | |__| ____     |__| ____   _____/  |_  ______ ___.__.
 / __ | |  | |  |/    \    |  |/ __ \_/ ___\   __\ \____ <   |  |
/ /_/ | |  |_|  |   |  \   |  \  ___/\  \___|  |   |  |_> >___  |
\____ | |____/__|___|  /\__|  |\___  >\___  >__| /\|   __// ____|
     \/              \/\______|    \/     \/     \/|__|   \/

source: https://github.com/DavidBuchanan314/dlinject

usage: dlinject.py [-h] [--stopmethod {sigstop,cgroup_freeze,none}]
                   pid /path/to/lib.so

Inject a shared library into a live process.

positional arguments:
  pid                   The pid of the target process
  /path/to/lib.so       Path of the shared library to load (note: must be
                        relative to the target process's cwd, or absolute)

optional arguments:
  -h, --help            show this help message and exit
  --stopmethod {sigstop,cgroup_freeze,none}
                        How to stop the target process prior to shellcode
                        injection. SIGSTOP (default) can have side-effects.
                        cgroup freeze requires root. 'none' is likely to cause
                        race conditions.

为什么?

  • 因为我可以。

  • 有多种抗ptrace技术,本工具通过不使用ptrace来规避。

  • 我不喜欢ptrace。

  • 使用 LD_PRELOAD 有时会很麻烦或不可能,如果你要注入的进程是由另一个具有干净环境的进程衍生的。

工作原理

  • 向目标进程发送停止信号。(可选)

  • 定位 _dl_open() 符号。

  • 通过 /proc/[pid]/syscall 获取 RIP 和 RSP。

  • 通过读取 /proc/[pid]/mem,备份部分栈以及我们将要用 shellcode 覆盖的代码。

  • 生成主 shellcode 和次 shellcode 缓冲区。

  • 通过写入 /proc/[pid]/mem,在 RIP 处插入主 shellcode。

  • 主 shellcode:

    • 将常用寄存器压入栈。
    • 通过 mmap() 加载次 shellcode。
    • 跳转到次 shellcode。
  • 次 shellcode:

    • 将栈和程序代码恢复到原始状态。
    • 切换栈(以便完全不触及原始栈)。
    • 调用 _dl_open() 加载用户指定的库。其构造函数将在加载时照常执行。
    • 恢复寄存器状态,取消栈切换,并跳回到原始 SIGSTOP 时的位置。

限制:

  • 发送 SIGSTOP 可能会导致不必要的副作用,例如,如果另一个线程正在等待 waitpid()。--stopmethod=cgroup_freeze 选项可以避免这种情况,但需要 root 权限(至少在大多数发行版中是这样)。

  • 我不完全确定这将如何与复杂的多线程应用程序交互。肯定存在破坏的可能性。

  • 仅支持 x86-64 Linux(目前——未来可能会添加 32 位支持)。

  • 需要 root 权限,或放宽的 YAMA 配置(echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope 在测试时很有用)。

  • 如果目标进程被沙盒化(例如 seccomp 过滤器),它可能没有权限对第二阶段的 shellcode 执行 mmap(),或对库执行 dlopen()。

下载工具