第一届陇剑杯-线上赛复盘-writeup(2)

科技   2024-08-16 08:32   湖南  
声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。


现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安设为星标”,否则可能看不到了


这篇文章由群里@骑虎牧羊师傅原创投稿,记录的是他们参加第一届陇剑杯-线上赛复盘-writeup,感谢分享! 

但篇幅太长,分两篇发布,排版过程也是难受...! 第一篇可看:第一届陇剑杯-线上赛复盘-writeup(1)
昨天有部分师傅要赛题,找@骑虎牧羊师傅要了下,需要赛题练手的师傅可以加我VX:S_3had0w


十、机密内存

1. 取证人员首先对容器的基本信息进行核实,经过确定该容器的基本信息为________。

答案为32位小写md5(容器操作系统系统的版本号+容器主机名+系统用户名),例如:操作系统的版本号为10.0.22449,容器主机名为DESKTOP-0521,系统登录用户名为admin,则该题答案为32位小写md5(10.0.22449DESKTOP-0521admin) 的值ae278d9bc4aa5ee84a4aed858d17d52a


2. 黑客入侵容器后曾通过木马控制端使用Messagebox发送过一段信息,该信息的内容是____________。

答案为Messagebox信息框内内容


3. 经过入侵分析发现该容器受到入侵的原因为容器使用人的违规进行游戏的行为,该使用人进行游戏程序的信息是__________。

答案为“32位小写md5(游戏程序注册邮箱+游戏程序登录用户名+游戏程序登录密码),例如:注册邮箱为adol@163.com,登录用户名为user,密码为user1234,则该题答案为” adol@163.comuseruser1234”的小写md5值5f4505b7734467bfed3b16d5d6e75c16


4. 经过入侵分析发现该容器曾被黑客植入木马控制的信息是_________。

答案为“32位小写md5(木马程序进程名+木马回连ip地址+木马回连ip端口)”,例如:木马程序进程名为svhost.exe,木马回连ip为1.1.1.1,木马回连端口为1234,则该题答案为“svhost.exe1.1.1.11234”的32位小写md5值f02da74a0d78a13e7944277c3531bbea


5. 经过入侵分析,发现黑客曾经运行过痕迹清除工具,该工具运行的基本信息是________。

答案为“32为小写md5”(痕迹清除工具执行程序名+最后一次运行时间),例如:黑客运行工具执行程序名为run.exe,运行时间为2021-07-10 10:10:13,则本题的答案为小写的32位md5(run.exe2021-07-10 10:10:13) 值为82d7aa7a3f1467b973505702beb35769,注意:本题中运行时间的格式为yy-mm-dd hh:mm:ss,时间时区为UTC+8


前言

内存分析、3个文件以及迷茫的我


先说迷茫的我


内存分析,vol,冲!


没冲出来,打开另外两个文件没有头绪,最后G了,后续参考网上各位大佬WP完成复现!


()、文件特征分析

题目共计3个文件


1、mem_secret-963a4663.vmem

显而易见为内存镜像文件,另外两个文件格式内容未知


2、Encryption.bin01

打开乱码无分析头绪,根据mem_secret-963a4663.vmem应该为运行状态虚拟机的内存页面文件,Encryption.bin02为VMware虚拟机执行加密过后的配置文件,结合常见虚拟机相关文件和文件大猜测Encryption.bin01为vmss文件,进一步对Encryption.bin01文件进行格式分析,可以发现该文件与vmware加密状态挂起的虚拟机vmss文件高度相似


3、Encryption.bin02

看到开头有关键字,搜索搜到一篇加载vm加密磁盘文章


根据关键字发现Encryption.bin02疑似加密后vmx配置文件


本地加密测试虚拟机,对比加密vmx文件发现缺失编码格式与安全密钥2部分,同时多出lsilogic部分


检索lsilogic,发现是是虚拟硬盘的数据流


4、总结

根据上述分析,题目中所给的文件全部为使用虚拟机加密过后的文件,因此后续的思路就是:找到虚拟机的密码,然后利用VMware加载虚拟机,将虚拟机加密功能关闭,就可以将所有文件还原成明文状态,此时就可以得到未加密状态的内存镜像,再使用volatility进行分析即可。


()、文件修复

判断该赛题给出的文件为vmware加密文件组,题目中出题人分别删除了vmx和vmss中的部分通用关键信息,分别对vmx、vmdk和vmss文件进行还原操作


1、mem_secret-963a4663.vmem(无需修复)

2、Encryption.bin01(调整文件名,以支持正常识别读取)

将Encryption.bin01文件重命名为mem_secret-963a4663.vmss,注意vmss文件的文件名一定要和vmem文件名对应,否则无法读取挂起的状态。

3、Encryption.bin02(拆分为vmdk、vmx,补充内容)
3.1 vmx部分(正确后可打开vmware页面)

对比正常文件和提供文件,发现缺失相关字段


对比详细


补充完善vmx如下

.encoding = "GBK"displayName = "mem_secret"encryption.keySafe = "vmware:key/list/(pair/(phrase/Dg7Se8rqkNI%3d/pass2key%3dPBKDF2%2dHMAC%2dSHA%2d1%3acipher%3dAES%2d256%3arounds%3d10000%3asalt%3d%2b21PdYUqEQd1wdT2AoPEQw%253d%253d,HMAC%2dSHA%2d1,CgKwC5U7lfLjpVohwbpxufC11yU4a0%2byrP08oY0KDDcP1NL%2fRiLojwTz2JnYqm7baAhtgENYUeFUHXwODjSClaJ%2bSRBhKw6UwET6p3AYK8vs4T0cBrvTjYSrs0baLgG7dozcvL5JxA%2fKYJvriz4Mf%2bMmVvE%3d))"encryption.data = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

此时如补充无误,可以打开vmware界面查看信息

此处注意cipher参数,参考本地vmx加密模板ciper为XTS-AES-256,暴破后密码不变,但无法成功登入,修改为AES-256即可正常登入


一开始尝试后缀当密码(刚好8位),但是不对,也没有提示,遂尝试暴破密码(工具:pyvmx-cracker),得密码为1q2w3e4r

#装PyCryptodome包就行python pyvmx-cracker.py -v "../mem_secret-963a4663.vmx" -d .\wordlist.txt


成功破解后页面如下


尝试运行提示缺失vmdk,尝试解密提示无法解密,只能恢复vmdk文件


3.2 vmdk部分(正确后磁盘信息正常加载不报错)

根据硬盘路径重命名提取过vmx得文件为mem_secret.vmdk触发报错,待加载的虚拟机使用了VMware加密,vmdk也会一起加密,在打开的时候会先对vmdk进行解密操作,分析未加密虚拟机的vmdk和已加密虚拟机vmdk作比较,发现使用Encryption.bin02的结尾还有一段冗余数据直接替换自己生成的vmdk加密磁盘头部即可,后经过操作发现这段数据是VMware打开虚拟机时,对vmdk进行解密的密钥串,关系到加密虚拟机的vmdk能否正常解密,这时候就是磁盘数据。


怀疑文件格式仍然存在问题

已知虚拟机相关配置,考虑自建同配置虚拟机,对比文件内容进行补全,可以看到系统信息为win10

创建一个新的虚拟机,创建的时候参数配置通过在Encryption.bin02的数据里捕风捉影(可以看出,出题人使用的都是默认配置),使用1q2w3e4r这个密码对虚拟机进行加密,然后将加密过后的虚拟机的vmdk文件拿出来给原来题目中提取的虚拟机使用,但是使用前需要替换掉头部的加密串信息。

TODO:发现部分文章提到用其他密码加密或者不加密vmdk文件同样可覆盖使用


对比vmdk文件发现,除磁盘头外无其他差别


发现共同文件头18 00 00 00,从这里开始复制替换,同时补充vmware头信息


重命名后覆盖替换原mem_secret.vmdk,此时点击磁盘不报错,磁盘信息正常加载


到这一步完成虚拟机完全修复


(三)、虚拟机解密分析

1、移除加密

使用已破解密码移除加密,注意:虚拟机不能点开机,否则内存镜像文件vmem将被删除,系统蓝屏无法分析


2、内存分析

解密移除完成后,当前目录下的vmem文件即为未使用VMware加密的虚拟机内存镜像文件,根据系统信息确定为Windows10的内存镜像文件,使用Volatility3进行分析。(3.2创建虚拟机替换磁盘处可看到)


此时可根据使用Volatility3可以看到操作系统版本是Windows10,且根据Major/Minor 15.18362可以确定具体的操作系统profile配置文件。

在Volatility2 中使用--info看到具体对应的profile为Win10x86_18362,此后即可回归到volatility2,手动指定profile也可解题。

题目一取证人员首先对容器的基本信息进行核实,经过确定该容器的基本信息为**__**

答案为32位小写md5(容器操作系统系统的版本号+容器主机名+系统用户名),例如:操作系统的版本号为10.0.22449,容器主机名为DESKTOP-0521,系统登录用户名为admin,则该题答案为32位小写md5(10.0.22449DESKTOP-0521admin) 的值ae278d9bc4aa5ee84a4aed858d17d52a

flag{md5(6.3.18362DESKTOP-4N21ET2Ado)} = flag{53de6f2170f1c24cdfa502751dc861b0}

容器操作系统系统的版本号

  • #注册表查询(计算机主机名注册表位置:[SYSTEM\ControlSet001\Control\ComputerName\ComputerName])
  • #系统版本号的信息主要来自ProductVersion属性的值次属性为REQUIRED,在这个注册表的键值中的[buildLab,CurrentVersion]都是派生自ProductVersion属性的值。
  • #字符串的格式如下:主要版本号.次要版本号.内部版本号
  • #通过这个键值中的CurrentVersion + BuildLab 可以拼接出完整的产品版本
python vol.py -f .\mem_secret-963a4663.vmem windows.registry.printkey --key "Microsoft\Windows NT\CurrentVersion"


容器主机名

#注册表查询(计算机主机名注册表位置:[SYSTEM\ControlSet001\Control\ComputerName\ComputerName])

python vol.py -f .\mem_secret-963a4663.vmem windows.registry.printkey --key "ControlSet001\Control\ComputerName\ComputerName"


系统用户名

  • #桌面路径
  • #注册表查询(系统用户名注册表位置:[SAM\Domains\Account])
python vol.py -f .\mem_secret-963a4663.vmem windows.registry.printkey --key "SAM\Domains\Account\Users\Names"


题目二:黑客入侵容器后曾通过木马控制端使用Messagebox发送过一段信息,该信息的内容是__。

答案为Messagebox信息框内内容

flag{Best_hacker}

题目三:经过入侵分析发现该容器受到入侵的原因为容器使用人的违规进行游戏的行为,该使用人进行游戏程序的信息是***__***。

答案为“32位小写md5(游戏程序注册邮箱+游戏程序登录用户名+游戏程序登录密码),例如:注册邮箱为adol@163.com,登录用户名为user,密码为user1234,则该题答案为” adol@163.comuseruser1234”的小写md5值5f4505b7734467bfed3b16d5d6e75c16

flag{md5(john@uuf.mejock_you1jock.2021)} = flag{39a9ac5a37f4a4ce27b1227cf83700a6}

  • #应当是导出内存进行分析,记录下vol3的导出命令

  • #pslist导出,没有账号密码信息
python vol.py  -f ../mem_secret-963a4663.vmem -o ../  windows.pslist.PsList --pid 6996   --dump

  • #memap导出,有账号,但是密码没有

python vol.py  -f ../mem_secret-963a4663.vmem  -o ../ windows.memmap.Memmap --pid 6864 --dump

  • #vaddump同memap结果,差别是导出为多文件

python2 vol.py  -f ../mem_secret-963a4663.vmem --profile=Win10x64_18362 vaddump -p 6864 -D ../

  • #通过strings steam/* | grep -i 'jock'匹配,仅有账号无密码

  • #最终只能通过strings硬匹配全量文件


(1) 游戏程序登录用户名(jock_you1)

同登录密码一起出来了,还有根据SteamUser进行检索

strings mem_secret-963a4663.vmem| grep SteamUser


(2) 游戏程序注册邮箱(john@uuf.me)

方法一:根据登录昵称搜索发现

winhex检索john,发现john@uuf.me


方法二:strings [内存文件名] | grep -E "[0-Z_]+\@[0-Z]+.[0-Z]+"

strings mem_secret-963a4663.vmem| grep -E "[0-Z_]+\@[0-Z]+.[0-Z]+"

(3) 游戏程序登录密码(jock.2021)

strings mem_secret-963a4663.vmem| grep password


题目四:经过入侵分析发现该容器曾被黑客植入木马控制的信息是***_***。

答案为“32位小写md5(木马程序进程名+木马回连ip地址+木马回连ip端口)”,例如:木马程序进程名为svhost.exe,木马回连ip为1.1.1.1,木马回连端口为1234,则该题答案为“svhost.exe1.1.1.11234”的32位小写md5值f02da74a0d78a13e7944277c3531bbea

flag{md5(steam.exe192.168.241.1478808)}=flag{896fad7d65bd117811facdd6a9b11421}

  • #查找恶意代码注入

python vol.py  -f ../mem_secret-963a4663.vmem  -o ../   windows.malfind


这里我导出5004-steam.exe的时候,终端报毒隔离了


通过psscan、pslist、pstree分析


通过netscan看


IP

端口

描述

202.89.233.100

443

Microsoft/Azure

52.139.153.205

443

Microsoft/Azure

192.168.241.147

8808

可疑私网地址


题目五:经过入侵分析,发现黑客曾经运行过痕迹清除工具,该工具运行的基本信息是**__**

答案为“32为小写md5”(痕迹清除工具执行程序名+最后一次运行时间),例如:黑客运行工具执行程序名为run.exe,运行时间为2021-07-10 10:10:13,则本题的答案为小写的32位md5(run.exe2021-07-10 10:10:13) 值为82d7aa7a3f1467b973505702beb35769

注意:本题中运行时间的格式为yy-mm-dd hh:mm:ss,时间时区为UTC+8

需要分析程序最后运行时间,使用userassist注册表分析程序的运行情况,并结合filescan扫描容器内文件情况,二者结合可以发现存储在容器桌面的无影无踪痕迹清理软件,该软件的程序执行名为:Wywz.exe,程序的运行时间结合userassist可以发现为2021-09-10 21:10:13 UTC+8(注意时区的转换),则该题答案为小写32位md5(Wywz.exe2021-09-1021:10:13) 


有趣的是,filescan、userassist在vol3中识别信息遗漏非常多,但使用vol2没有任何问题。

flag{d46586ca847e6be1004037bc288bf60c}

  • #volaility3通过windows.registry.userassist.UserAssi

python vol.py -f '/home/kali/Desktop/mem_secret-963a4663.vmem' windows.registry.userassist.UserAssist

  • #volaility通过userassist导出可以看到无影无踪

python2 vol.py  -f ../mem_secret-963a4663.vmem --profile=Win10x64_18362 userassist

#volaility3


#volaility


知识点1:vmx配置

vmx文件位于虚拟机实例的主目录下,用于记录虚拟机的配置——如虚拟机的内存、硬盘型号等,可以通过打开这个虚拟机文件以启动虚拟机的操作系统,我们也通过编辑该文件实现某种对虚拟机的配置需求。

对于同一虚拟机,在使用虚拟机加密操作前的vmx文件与加密后vmx文件是有所不同的,未加密的vmx文件是明文显示的,显示了这个虚拟机的显示名称,cpu配置,内存配置等等,下图是为未加密的vmx文件


加密后vmx文件结构为

第一行指定编码格式第二行是安全密匙(Url 编码的密匙信息+ Base64 编码的密匙)第三行是Base64 编码的加密数据

加密后的配置只需要.encoding、displayName、encryption.keySafe和encryption.data字段的内容,.encoding为虚拟机配置文件的编码,displayName为虚拟机的名称,encryption.keySafe字段存储了虚拟机密码,格式为vmware:key/list/xxxxxxxxx ,encryption.data是原来明文数据加密过后的结果。


知识点2:虚拟机加密

在虚拟机——设置——选项——访问控制处可以配置虚拟机加密


知识点3:lsilogic

介绍:LSI Logic控制器是一种虚拟化的存储控制器,主要用于 VMware 虚拟化环境中的虚拟机。LSI Logic 控制器提供了一种模拟的 SCSI(Small Computer System Interface)控制器,使虚拟机能够连接和管理虚拟硬盘和其他存储设备。


使用场景

LSI Logic 控制器通常用于以下场景:

  • 操作系统兼容性:某些操作系统(如 Windows Server 2003)可能需要特定的 SCSI 控制器类型来正常运行。
  • 性能需求:对于需要高性能存储访问的虚拟机,LSI Logic 控制器可能提供更好的性能。
  • 存储管理:LSI Logic 控制器允许虚拟机管理多个虚拟硬盘和其他存储设备,提供灵活的存储配置选项。

配置 LSI Logic 控制器

VMware 虚拟机配置文件(.vmx)中,可以配置 LSI Logic 控制器,以下是一个配置示例:

scsi0.present = "TRUE"scsi0.virtualDev = "lsilogic"scsi0.pciSlotNumber = "16"对于 LSI Logic SAS 控制器,可以使用 lsisas1068:scsi0.present = "TRUE"scsi0.virtualDev = "lsisas1068"scsi0.pciSlotNumber = "16"

VMware Workstation 中的设置

VMware Workstation 中,您可以通过以下步骤为虚拟机添加或修改 LSI Logic 控制器:

打开 VMware Workstation 并选择您要配置的虚拟机。点击“编辑虚拟机设置”。在硬件选项卡中,点击“添加”按钮,选择“硬盘”或“现有硬盘”。在选择控制器类型时,选择“LSI Logic”或“LSI Logic SAS”。保存设置并启动虚拟机。

总结

LSI Logic 控制器是一种虚拟化的存储控制器,用于 VMware 虚拟化环境中的虚拟机。它提供了模拟的 SCSI 控制器,使虚拟机能够连接和管理虚拟硬盘和其他存储设备。LSI Logic 控制器有两种主要类型:LSI Logic Parallel 和 LSI Logic SAS,分别适用于不同的操作系统和性能需求。通过在虚拟机配置文件中或通过图形用户界面配置,可以轻松地为虚拟机添加或修改 LSI Logic 控制器,以满足操作系统兼容性和性能需求。

此处题目中是lsilogic,winxp不支持lsilogic是ide,而且vmx和vmdk两端数据直接有一段空行NUL数据


知识点4:vmware虚拟机常见文件类型及大小

  1. vmx文件:表示虚拟系统文件,我们用虚拟机程序打开这个文件以启动虚拟系统。
  2. vmem文件:表示虚拟内存文件,与pagefile.sys(亦称分页文件)同。当虚拟系统执行关机操作后,vmem文件消失,但挂起关闭时,不消失。
  3. vmdk文件:表示虚拟机的一个虚拟磁盘。
  4. vmss文件:执行挂起操作后产生的文件。(用于储存虚拟机在挂起状态时的信息,为执行挂起操作后产生的文件,相当一个快照图片)
  5. 当运行一个“虚拟系统”时,为防止该系统被另外一个VMware程序打开,导致数据被修改或损坏,VMware会自动在该“虚拟系统”所在的文件夹下,生成三个锁定文件
    (虚拟系统锁定,虚拟磁盘锁定,虚拟内存锁定),分别为:
    ”systemType.vmx.lck”,”systemType.vmdk.lck”,”systemTyep.vmem.lck”。
  6. vmsn文件:VMware 虚拟机快照文件,主要用于存储虚拟机快照的信息。这些文件包含了虚拟机在创建快照时的状态,包括内存状态、虚拟机设置以及磁盘的增量更改等。

知识点5:Wow64

WOW64(Windows-On-Windows 64bit)X64 Windows操作系统的一个子系统,32位应用程序提供运行环境。类似的还有WOW32子系统,负责在32位Windows系统上运行16位应用程序。

WoW64存在的原因还要从CPU的发展上开始说,X86指令集是一个指令集架构家族,最初在Intel 8086处理器中引入,开始它主要用于16位系统。从Intel 386处理器发布开始升级为32位,并且32位指令集一直保持了很久。了解32位系统的都知道32位CPU将内存空间限制到了4G(单一用户模式进程至少是这样)。随着RAM的越来越大,4G限制就成了瓶颈,系统无法使用更大的内存空间。于是2001年Intel发布了64位的IA64架构,它是一个全新的架构,架构设计非常清晰,比老的X86架构要更好。对于软件来说兼容性很重要,但是IA64处理器无法运行X86代码,这样问题就很严重了,已有的软件无法在新的CPU上运行。于是在2003年AMD发布了AMD64架构,它是对X86架构的增量更新,用于添加64位支持。这种架构的X64处理器可以执行X86代码,所以用户可以在X64处理器上运行现有的程序和操作系统。直到今天,X86和X64依旧是个人计算机和笔记本电脑使用CPU的主流。

如果这个程序是64bit在64bit的系统下运行,则不是Wow64模式,会返回False;
如果这个程序是32bit在64bit的系统下运行,则是Wow64模式,会返回True;
如果这个程序是32bit在32bit的系统下运行,则不是Wow64模式,会返回False;

在内存取证中不能直接通过Wow64笃定为恶意程序,只能证明有嫌疑的可能,需要通过多方面去取证去证实,但是看Wow64也是一个不错的选择!


TODO

❓发现部分文章提到用其他密码加密或者不加密vmdk文件同样可覆盖使用,原因猜测为vmdk有文件外壳标识,是否加密不影响外壳标识

❓恶意程序导出执行报错,待跟进排查原因,是导出问题还是动调手段方式待学习


关注我们

 还在等什么?赶紧点击下方名片开始学习吧 



知 识 星 球



仅前1-400名: 99¥,400-600名128¥,600-800名: 148¥,800-1000+名168¥所剩不多了...!


推 荐 阅 读





潇湘信安
一个不会编程、挖SRC、代码审计的安全爱好者,主要分享一些安全经验、渗透思路、奇淫技巧与知识总结。
 最新文章