本文最后更新于:2023年8月25日 下午
[TOC]
Misc取证学习
磁盘取证工具
veracryto挂载fat文件
挂载磁盘文件
https://sourceforge.net/projects/veracrypt/
DiskGenius
DiskGenius是一款硬盘分区及数据恢复软件
extundelete命令:恢复img镜像文件中所有已删除的文件
1
| extundelete img文件 –restore-all 命令
|
extundelete
是一个用于恢复已删除文件的工具,它可以在使用 ext2、ext3 或 ext4 文件系统的 Linux 系统上使用。根据您的问题,extundelete img文件 --restore-all
命令的作用是从指定的 img文件
镜像文件中恢复所有已删除的文件。
磁盘取证例题
[RCTF2019]disk
一个vmdk文件,我们在010打开:
发现了一半的flag
我们用7z打开vmdk文件,发现了一个FAT
文件
常见的磁盘分区格式有以下几种
FAT(File Allocation Table)文件是win
下面的磁盘分区文件
我们使用veracryto
挂载fat文件,盲猜密码:rctf
获得一张没用的照片和密码:RCTF2019
这里就有个盲区知识点,在挂载输入密码的时候,不同的密码可以进入不同的文件系统
使用新密码挂载:
但是隐藏分区无法直接访问,DiskGenius
可以打开
使用该磁盘分区软件,查看到了磁盘分区B的内容,即另一半flag
[XMAN2018排位赛file]恢复挂载的文件
我们可以使用7z
或者使用mount
将镜像文件挂载
然后打开发现很多照片:
其中提示有遗失的文件,我们可以使用extundelete
命令恢复
1
| extundelete img文件 –-restore-all 命令
|
内存取证工具
volatility
Volatility是一款非常强大的内存取证工具,它是由来自全世界的数百位知名安全专家合作开发的一套工具, 可以用于windows,linux,mac osx,android等系统内存取证。Volatility是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| Volatility Foundation Volatility Framework 2.6 用法: Volatility - 内存取证分析平台 Options: -h, --help 列出所有可用选项及其默认值 默认值可以在配置文件中设置 (/etc/volatilityrc) --conf-file=/home/kali/.volatilityrc 基于用户的配置文件 -d, --debug 调试Volatility --plugins=PLUGINS 要使用的其他插件目录(冒号分隔) --info 打印所有注册对象的信息 --cache-directory=/home/kali/.cache/volatility 存放缓存文件的目录 --cache 使用缓存 --tz=TZ 设置 (Olson) 时区以使用 pytz(如果已安装)或 tzset 显示时间戳 -f FILENAME, --filename=FILENAME 打开图像时使用的文件名 --profile=WinXPSP2x86 要加载的配置文件的名称(使用 --info 查看支持的配置文件列表) -l LOCATION, --location=LOCATION 从中加载地址空间的 URN 位置 -w, --write 启用写支持 --dtb=DTB DTB 地址 --shift=SHIFT Mac KASLR 移位地址 --output=text 以这种格式输出(支持特定于模块,请参阅下面的模块输出选项) --output-file=OUTPUT_FILE 在此文件中写入输出 -v, --verbose 详细信息 -g KDBG, --kdbg=KDBG 指定一个 KDBG 虚拟地址(注意:对于 64 位 Windows 8 及更高版本,这是 KdCopyDataBlock 的地址) --force 强制使用可疑配置文件 -k KPCR, --kpcr=KPCR 指定特定的 KPCR 地址 --cookie=COOKIE 指定 nt!ObHeaderCookie 的地址(仅适用于 Windows 10) 支持的插件命令: amcache 查看AmCache应用程序痕迹信息 apihooks 检测内核及进程的内存空间中的API hook atoms 列出会话及窗口站atom表 atomscan Atom表的池扫描(Pool scanner) auditpol 列出注册表HKLMSECURITYPolicyPolAdtEv的审计策略信息 bigpools 使用BigPagePoolScanner转储大分页池(big page pools) bioskbd 从实时模式内存中读取键盘缓冲数据(早期电脑可以读取出BIOS开机密码) cachedump 获取内存中缓存的域帐号的密码哈希 callbacks 打印全系统通知例程 clipboard 提取Windows剪贴板中的内容 cmdline 显示进程命令行参数 cmdscan 提取执行的命令行历史记录(扫描_COMMAND_HISTORY信息) connections 打印系统打开的网络连接(仅支持Windows XP 和2003) connscan 打印TCP连接信息 consoles 提取执行的命令行历史记录(扫描_CONSOLE_INFORMATION信息) crashinfo 提取崩溃转储信息 deskscan tagDESKTOP池扫描(Poolscaner) devicetree 显示设备树信息 dlldump 从进程地址空间转储动态链接库 dlllist 打印每个进程加载的动态链接库列表 driverirp IRP hook驱动检测 drivermodule 关联驱动对象至内核模块 driverscan 驱动对象池扫描 dumpcerts 提取RAS私钥及SSL公钥 dumpfiles 提取内存中映射或缓存的文件 dumpregistry 转储内存中注册表信息至磁盘 editbox 查看Edit编辑控件信息 (Listbox正在实验中) envars 显示进程的环境变量 eventhooks 打印Windows事件hook详细信息 evtlogs 提取Windows事件日志(仅支持XP/2003) filescan 提取文件对象(file objects)池信息 gahti 转储用户句柄(handle)类型信息 gditimers 打印已安装的GDI计时器(timers)及回调(callbacks) gdt 显示全局描述符表(Global Deor Table) getservicesids 获取注册表中的服务名称并返回SID信息 getsids 打印每个进程的SID信息 handles 打印每个进程打开的句柄的列表 hashdump 转储内存中的Windows帐户密码哈希(LM/NTLM) hibinfo 转储休眠文件信息 hivedump 打印注册表配置单元信息 hivelist 打印注册表配置单元列表 hivescan 注册表配置单元池扫描 hpakextract 从HPAK文件(Fast Dump格式)提取物理内存数据 hpakinfo 查看HPAK文件属性及相关信息 idt 显示中断描述符表(Interrupt Deor Table) iehistory 重建IE缓存及访问历史记录 imagecopy 将物理地址空间导出原生DD镜像文件 imageinfo 查看/识别镜像信息 impscan 扫描对导入函数的调用 joblinks 打印进程任务链接信息 kdbgscan 搜索和转储潜在KDBG值 kpcrscan 搜索和转储潜在KPCR值 ldrmodules 检测未链接的动态链接DLL lsadump 从注册表中提取LSA密钥信息(已解密) machoinfo 转储Mach-O 文件格式信息 malfind 查找隐藏的和插入的代码 mbrparser 扫描并解析潜在的主引导记录(MBR) memdump 转储进程的可寻址内存 memmap 打印内存映射 messagehooks 桌面和窗口消息钩子的线程列表 mftparser 扫描并解析潜在的MFT条目 moddump 转储内核驱动程序到可执行文件的示例 modscan 内核模块池扫描 modules 打印加载模块的列表 multiscan 批量扫描各种对象 mutantscan 对互斥对象池扫描 notepad 查看记事本当前显示的文本 objtypescan 扫描窗口对象类型对象 patcher 基于页面扫描的补丁程序内存 poolpeek 可配置的池扫描器插件 printkey 打印注册表项及其子项和值 privs 显示进程权限 procdump 进程转储到一个可执行文件示例 pslist 按照EPROCESS列表打印所有正在运行的进程 psscan 进程对象池扫描 pstree 以树型方式打印进程列表 psxview 查找带有隐藏进程的所有进程列表 qemuinfo 转储 Qemu 信息 raw2dmp 将物理内存原生数据转换为windbg崩溃转储格式 screenshot 基于GDI Windows的虚拟屏幕截图保存 servicediff Windows服务列表(ala Plugx) sessions _MM_SESSION_SPACE的详细信息列表(用户登录会话) shellbags 打印Shellbags信息 shimcache 解析应用程序兼容性Shim缓存注册表项 shutdowntime 从内存中的注册表信息获取机器关机时间 sockets 打印已打开套接字列表 sockscan TCP套接字对象池扫描 ssdt 显示SSDT条目 strings 物理到虚拟地址的偏移匹配(需要一些时间,带详细信息) svcscan Windows服务列表扫描 symlinkscan 符号链接对象池扫描 thrdscan 线程对象池扫描 threads 调查_ETHREAD 和_KTHREADs timeliner 创建内存中的各种痕迹信息的时间线 timers 打印内核计时器及关联模块的DPC truecryptmaster Recover 恢复TrueCrypt 7.1a主密钥 truecryptpassphrase 查找并提取TrueCrypt密码 truecryptsummary TrueCrypt摘要信息 unloadedmodules 打印卸载的模块信息列表 userassist 打印注册表中UserAssist相关信息 userhandles 转储用户句柄表 vaddump 转储VAD数据为文件 vadinfo 转储VAD信息 vadtree 以树形方式显示VAD树信息 vadwalk 显示遍历VAD树 vboxinfo 转储Virtualbox信息(虚拟机) verinfo 打印PE镜像中的版本信息 vmwareinfo 转储VMware VMSS/VMSN 信息 volshell 内存镜像中的shell windows 打印桌面窗口(详细信息) wintree Z顺序打印桌面窗口树 wndscan 池扫描窗口站 yarascan 以Yara签名扫描进程或内核内存
|
内存取证-volatility工具的使用 (史上更全教程,更全命令)_路baby的博客-CSDN博客
内存取证例题
1、数字取证赛题
是46届世界技能大赛湖北省选拔赛 也是今年金砖比赛的样题
链接:https://pan.baidu.com/s/1tYgIicCqJExmaMLYa3YeSA
提取码:lulu
你作为 A 公司的应急响应人员,请分析提供的内存文件按照下面的要求找到 相关关键信息,完成应急响应事件。
1、从内存中获取到用户admin的密码并且破解密码,以Flag{admin,password} 形式提交(密码为 6 位);
2、获取当前系统 ip 地址及主机名,以 Flag{ip:主机名}形式提交;
3、获取当前系统浏览器搜索过的关键词,作为 Flag 提交;
4、当前系统中存在挖矿进程,请获取指向的矿池地址,以 Flag{ip:端口}形式 提交;
5、恶意进程在系统中注册了服务,请将服务名以 Flag{服务名}形式提交。
0x01.从内存中获取到用户admin的密码并且破解密码
首先我们拿到镜像的题目的第一步是需要判断当前的镜像信息,分析是哪个操作系统
imageinfo:查看识别镜像信息
python2 vol.py -f worldskills3.vmem imageinfo
操作系统我们一般取第一个就可以了,分析出系统为:Win7SP1x64
接下来我们查看内存镜像中的用户,
--profile
去指定操作系统
printkey
,打印注册表项及其子项和值 -K
指定键
我们可以这样列出 内存镜像中的用户
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"
|
接下来尝试获得win账户密码
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 hashdump
|
hashdump:查看用户名密码信息,密码是哈希值,需要john爆破
查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(mimikatz插件可以获取系统明文密码)
不过这个hash密码破解不出来,应该用了强密码
lsadump
从注册表中提取LSA密钥信息(已解密)
如果john爆破不出来,就使用查看强密码lsadump
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 lsadump
|
md5解密一下:
0x02.获取当前系统 ip 地址及主机名
通过netscan
可以查询到ip地址
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 netscan
|
192.168.85.129
hivelist:打印注册表配置单元列表
查主机名需要通过查询注册表,先用hivelist
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 hivelist
|
然后我们需要一步一步去找键名
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey
|
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K ControlSet001
|
继续找键:
1 2 3
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K 'ControlSet001\Control' python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K 'ControlSet001\Control\ComputerName' python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K 'ControlSet001\Control\ComputerName\ComputerName'
|
0x03.获取当前系统浏览器搜索过的关键词
iehistory:重建IE缓存及访问历史记录
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 iehistory
|
0x04.当前系统中存在挖矿进程,请获取指向的矿池地址
netscan:扫描网络情况
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 netscan
|
这里只有一个进程的状态为:ESTABLISHED
flag{54.36.109.161:2222}
0x05.恶意进程在系统中注册了服务,请将服务名以 Flag{服务名}形式提交
上一题中已经知道了进程号为2588
pslist:按照EPROCESS列表打印所有正在运行的进程
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 pslist
|
这里 PPID
就是Parent PID
所以2588的父进程是3036
查询服务名称svcscan
,扫描 Windows 的服务
1
| python2 vol.py -f worldskills3.vmem --profile=Win7SP1x64 svcscan
|
参考
内存取证-volatility工具的使用 (史上更全教程,更全命令)_路baby的博客-CSDN博客
内存取证-volatility工具的使用_baynk的博客-CSDN博客
volatility 各个选项的详解-腾讯云开发者社区-腾讯云 (tencent.com)
2、Memlabs靶场1
靶机地址:https://github.com/stuxnet999/MemLabs/tree/master/Lab%201
description:
我姐姐的电脑坏了。 我们非常幸运地恢复了这个内存转储。 你的工作是从系统中获取她所有的重要文件。 根据我们的记忆,我们突然看到一个黑色的窗口弹出,上面有一些正在执行的东西。 崩溃发生时,她正试图画一些东西。 这就是我们从崩溃时所记得的一切。
注意:此挑战由 3 个flag组成。
这一段话提示我们需要查看cmd命令行还有画图
flag1
首先拿到一个镜像首先需要imageinfo
查看操作系统信息:
1
| python2 vol.py -f MemoryDump_Lab1.raw imageinfo
|
Win7SP1x64
然后我们可以使用pslist
插件查看运行的进程:
1
| python2 vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 pslist
|
注意到三个比较重要的进程
接下来我们查看一下cmd命令行的数据
Volatility 的 consoles 插件用于分析和提取内存中的控制台信息。它可以帮助你恢复已关闭或隐藏的命令行窗口、终端或其他交互式控制台会话的内容。
1
| python2 vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 consoles
|
1 2 3
| ZmxhZ3t0aDFzXzFzX3RoM18xc3Rfc3Q0ZzMhIX0= base64解码 flag{th1s_1s_th3_1st_st4g3!!}
|
找到了第一个flag
flag2
我们将mspaint进程使用插件memdump
导出
1
| 0xfffffa80022bab30 mspaint.exe 2424 604 6 128 1 0 2019-12-11 14:35:14 UTC+0000
|
1
| python2 vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 memdump -p 2424 -D /root/Desktop/
|
将进程导出后获得data,由于这是mspaint
进程的数据,我们可以使用gimp
命令查看图像:
调整一下参数
flag3
我们使用cmdline参数,查看一下命令行的历史记录,发现了Important.rar
文件
于是使用filescan
查找一下文件:
1
| python2 vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 filescan | grep "Important.rar"
|
然后使用dumpfiles
将文件导出:
1
| python2 vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003fa3ebc0 -D /root/Desktop/
|
1
| Password is NTLM hash(in uppercase) of Alissa's account passwd.
|
提示解压密码是Alissa账户NTLM密码的hash值
我们直接使用hashdump
将账户密码的hash值获得:
1
| python2 vol.py -f MemoryDump_Lab1.raw --profile=Win7SP1x64 hashdump
|
我们需要选择第2个密码hash,这个才是NTLM
,第一个hash不安全
大写一下:F4FF64C8BAAC57D22F22EDC681055BA6