「PWN」CVE-2023-4911 复现

💡 原文中文,约18600字,阅读约需45分钟。
📝

内容提要

本文介绍了 glibc2.34 中的一个缓冲区溢出漏洞,攻击者可以通过构造恶意的 GLIBC_TUNABLES 环境变量来触发漏洞,导致代码以特权模式执行。文章详细介绍了漏洞的利用过程,包括利用 __minimal_calloc 函数返回的内存块覆盖 link_map 结构体中的指针,控制 l_info[DT_RPATH] 指向的位置和内容,以及拷贝 NULL 字节来溢出到 l_info[RT_PATH]。最终攻击者可以控制 ld.so 强制信任自己的 libc.so.6 或者是 LD_PRELOAD 库。文章还介绍了攻击脚本的编写过程,以及需要降级安装的注意事项。

🎯

关键要点

  • glibc2.34中存在一个缓冲区溢出漏洞,攻击者可以通过构造恶意的GLIBC_TUNABLES环境变量来触发该漏洞。
  • 漏洞利用过程涉及覆盖link_map结构体中的指针,控制l_info[DT_RPATH]指向的位置和内容。
  • 攻击者可以通过拷贝NULL字节来溢出到l_info[RT_PATH],从而控制ld.so强制信任自己的libc.so.6或LD_PRELOAD库。
  • 文章详细介绍了攻击脚本的编写过程,以及需要降级安装glibc的注意事项。
  • 利用__minimal_calloc函数返回的内存块覆盖link_map结构体中的指针是漏洞利用的关键。
  • 攻击者需要构建两个GLIBC_TUNABLES环境变量,一个用于填充ld.so的读写段,另一个用于溢出。
  • 通过修改l_info[DT_RPATH]指针,攻击者可以指定运行时ld搜索目录,从而加载恶意的libc.so.6。
  • 最终攻击脚本通过构造特定的环境变量和参数来实现特权提升,获取root权限。
➡️

继续阅读