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

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

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

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

工具目录

分类

查看所有分类
Loading categories
pkwned — CVE-2021-4034 的概念验证(含实验性无痕利用) | Kitploit
工具/GitHubGitHub/dosamp/pkwned
权限提升漏洞利用框架漏洞利用Payload 开发二进制利用
GitHubdosamp/pkwned

pkwned

CVE-2021-4034 的概念验证(含实验性无痕利用)

查看仓库
4年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

pkwned:CVE-2021-4034 的概念验证

此 PoC 将以 root 权限运行 PAYLOAD_PATH(在 constants.h 中定义),前提是运行在 glibc 上的 pkexec 存在漏洞。目录 "GCONV_PATH=." 中需要包含一个可执行文件,其名称与包含 gconv 模块的目录同名。

正如 Qualys 公告 [1] 中所述,这会产生一条 syslog 消息。到目前为止,我找到了两种方法来阻止这种情况:

  • 通过使用 g_find_program_in_path,pkexec 会使用 g_file_test 执行一次 access() 检查,随后再进行一次显式检查,这会产生一个竞态条件(在两次检查之间删除 "GCONV_PATH=./gconv"),从而在未调用 log_message 的情况下调用 g_printerr:

641 if (access (path, F_OK) != 0) 642 { 643 g_printerr ("Error accessing %s: %s\n", path, g_strerror (errno)); 644 goto out; 645 }

此仓库包含 gconv-fuse 工具,它会在 "GCONV_PATH=." 上挂载一个 FUSE 文件系统,在调用一次 access("gconv", X_OK) 后,该文件系统看起来是空的。它仅在启用了 FUSE 的 user_allow_other 配置选项时才有效。

  • 如果能够阻止 pkexec 读取 /etc/shells,它也会在不记录日志的情况下报错退出:

356 if (!g_file_get_contents ("/etc/shells", 357 &contents, 358 NULL, /* gsize *length */ 359 &error)) 360 { 361 g_printerr ("Error getting contents of /etc/shells: %s\n", error->message); 362 g_error_free (error); 363 goto out; 364 }

可以使用挂载命名空间在其上挂载一个不可读的文件,但这同样需要一个用户命名空间,将非特权用户映射为 root,从而使 pkexec 的 setuid 位失效(例如 "unshare -r -u -m")。

请注意,GLib 已为 g_find_program_in_path 合并了一个修复(可能适用于 v2.70.3 和 v2.71.0 之后的稳定版本),该修复将始终返回实际的完整路径,从而使此漏洞利用变得不可行。[2]

[1] https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt [2] https://gitlab.gnome.org/GNOME/glib/-/commit/13ee46538f901a8eca8e7a4c167a8838ed0858d4

下载工具