DLL劫持大家可能都知道,就是通过劫持DLL加载执行我们的恶意DLL。但是常规的DLL劫持有如下缺陷:
1、需要挖掘存在DLL缺失的程序,实战中成本较高
2、直接进行替换劫持,可能会造成程序崩溃。目标可能会重装程序,权限还是一样会丢失

接下来记录下一种DLL劫持的进阶利用方式:DLL hijacking proxy
通过劫持DLL后,再加载原始的DLL。不对程序产生影响,使得劫持更加丝滑

利用复现


首先我们要在系统文件夹中找到容易受到攻击的程序
用Process Monitor查看进程对应的DLL加载,一般都会在相对路径下
如phpstudy的QtCore.dll
image.png
然后要创建一个代理DLL,参考这个项目: https://github.com/rek7/dll-hijacking
首先运行 parse.py 生成导出指令写入 definitions.h,原理可以参考:
https://itm4n.github.io/dll-proxying/
image.png
说明:parse.py中dumpbin.exe需要替换成自己的绝对路径,否则会报系统找不到指定的路径
image.png
parse.py跑完后maliciousdll目录中的文件都被更新
image.png
此时再使用Visual Studio编译生成malicious_dll.dll,
编译后对文件名进行修改并放在phpstudy的目录下
对恶意DLL进行修改:malicious_dll→QtCore.dll
对原来的DLL进行修改:QtCore.dll→QtCore
.dll
image.png
为了使效果更直观一些,我们把dllmain.cpp的代码改成弹框看看
image.png
此时弹框成功,且phpstudy能正常启动
image.png

在实战中利用过程中,只要将dllmain.cpp中的代码改成利用代码即可。
另,dll-hijacking默认是在DLL文件名中加一个下划线”_”,可自行对项目进行调整