声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,海底生残月及文章作者不为此承担任何责任。
现在只对常读和星标的公众号才展示大图推送,建议大家能把海底生残月“设为星标”,否则可能就看不到了啦!
0x01 漏洞描述
腾讯QQ和TIM是深圳市腾讯计算机系统有限公司开发的两款即时通讯软件。它们都有一个组件QQProtect.exe,位于%ProgramFiles(x86)%Common FilesTencentQQProtectbin. QQProtect.exe作为名为QPCore的 Windows 服务安装,并NT AuthoritySYSTEM在系统启动时自动运行。组件QQProtect.exe及其依赖的DLL QQProtectEngine.dll均存在任意地址写入漏洞。低权限攻击者可以结合这两个漏洞在QQProtect.exe进程中加载恶意DLL并获取NT AuthoritySYSTEMshell。
0x02 影响范围
受影响的产品:
QQ 9.7.1.28940 ~ 9.7.8.29039
TIM 3.4.5.22071 ~ 3.4.7.22084
受影响的组件:
QQProtect.exe 4.5.0.9424(在 TIM 3.4.5.22071 中)
QQProtect.exe 4.5.0.9426(在QQ 9.7.1.28940中)
QQProtectEngine.dll 4.5.0.9424(在 TIM 3.4.5.22071 中)
QQProtectEngine.dll 4.5.0.9426(在QQ 9.7.1.28940中)
0x03 漏洞复现
第一个漏洞是QQProtect.exe+0x40c9f8处的代码:
其中a2
是一个可以被攻击者控制的指针,dword_41a740
是一个全局变量,其值0x00000001
。因此攻击者可以在任意地址写入该值DWORD(1)
。
第二个漏洞是QQProtectEngine.dll+0x3B4F6处的代码:
其中v3
是可以被攻击者控制的指针。因此攻击者可以std::bit_cast<DWORD>(ptr) + 4
在任何给定的地址写入该值ptr
。
QQProtect.exe
由于QQProtect.exe
没有ASLR保护,攻击者可以轻易篡改改驻留的函数指针并利用ROP链执行任意代码。
poc代码是用Rust语言编写的。您应该使用i686-pc-windows-msvc
工具链来编译它。
cd poc
cargo +stable-i686-pc-windows-msvc build --release --config "build.rustflags = ["-C", "target-feature=+crt-static"]"
你将得到两个DLL:
targetreleasetinyxml.dll
targetreleaseevil.dll
然后将上面的两个Dll放到%ProgramFiles(x86)%Common FilesTencentQQProtectbinQQProtect.exe
一个文件夹中。
NT AuthoritySYSTEM
最后用一个命令获取shell:
QQProtect.exe <PATH TO evil.dll>
0x04 工具下载
点击关注下方名片进入公众号
回复关键字【本地提权】获取下载链接
原文始发于微信公众号(海底生残月):腾讯QQ&TIM本地提权POC(CVE-2023-34312)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论