点击上方[蓝字],关注我们
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。
腾讯QQ和TIM是由有限公司开发的两款即时通讯软件。它们都有一个组件QQProtect.exe,位于%ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin中。QQProtect.exe作为名为QPCore的Windows服务安装,并在系统启动时自动作为NT Authority\SYSTEM运行。组件QQProtect.exe及其依赖DLL QQProtect Engine.DLL都存在任意地址写入漏洞。权限较低的攻击者可以通过结合这两个漏洞在QQProtect.exe进程内加载邪恶的DLL,并获得NT Authority\SYSTEM shell。
QQ 9.7.1.28940 ~ 9.7.8.29039
TIM 3.4.5.22071 ~ 3.4.7.22084
QQProtect.exe 4.5.0.9424 (in TIM 3.4.5.22071)
QQProtect.exe 4.5.0.9426 (in QQ 9.7.1.28940)
QQProtectEngine.dll 4.5.0.9424 (in TIM 3.4.5.22071)
QQProtectEngine.dll 4.5.0.9426 (in QQ 9.7.1.28940)
第一个漏洞点是QQProtect.exe+0x40c9f8的代码:
其中 a2 是一个可以被攻击者控制的指针, dword_41a740 是一个全局变量,其值为 0x00000001 。因此攻击者可以 DWORD(1) 在任何地址写入值。
第二个漏洞点是QQProtectEngine.dll +0x3B4F6中的代码:
其中 v3 是可由攻击者控制的指针。因此攻击者可以 std::bit_cast
由于不具有ASLR保护,攻击者可以篡改驻留在其中的函数指针 QQProtect.exe 并使用ROP链来容易地执行仲裁代码 QQProtect.exe 。
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:
target\release\tinyxml.dll
target\release\evil.dll
然后把上面的两个dll文件 %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe 放在一个文件夹里。
最后 NT Authority\SYSTEM
用一个命令获取shell:
$ QQProtect.exe <PATH TO evil.dll>
https://github.com/vi3t1/qq-tim-elevation
author:vi3t1
致力于红蓝对抗,实战攻防,星球不定时更新内外网攻防渗透技巧,以及最新学习研究成果等。常态化更新最新安全动态。专题更新奇技淫巧小Tips及实战案例。
涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全。星球中已发布 300+ 安全资源,针对网络安全成员的普遍水平,并为星友提供了教程、工具、POC&EXP以及各种学习笔记等等。
关注公众号回复“加群”,添加Z2OBot好友,自动拉你加入Z2O安全攻防交流群(微信群)分享更多好东西。(QQ群可直接扫码添加)
点个【 在看 】,你最好看