一.介绍
1.内存取证 (Memory forensics)
1)内存取证是对计算机内存转储的取证分析
2)它的主要应⽤是调查⾼级计算机攻击,这些攻击⾜够隐蔽,可以避免将数据留在计算机硬盘上
3)因此,必须分析内存 (RAM) 以获取取证信息
由于内存中有⼤量的结构化及⾮结构化的数据,可通过对物理内存镜像提取出有价值的数据,常⻅的有价值数据包括进程列表、动态链接库、打开⽂件列表、⽹络连接、注册表、加密密钥或密码、聊天记录、互联⽹访问、电⼦邮件、图⽚及⽂档等。通过对计算机内存内容的保存和分析,可以得到⼤量计算机运⾏时的各种信息,以还原各种⽂件、⽹络发送的数据、账号密码等信息。
2.常⽤⼯具
3.⼯具⼿法
4.参数解析
5.常⽤插件
6.常用手法
1)框架基础⼿法
python vol.py [plugin] -f [image] --profile=[profile]
2)查看⽂件所属系统信息
./volatility_2.6_lin64_standalone -f Challenge.raw imageinfo
3)根据系统查看对应进程列表
./volatility_2.6_lin64_standalone -f Challenge.raw --profile=Win7SP1x86_23418 pslist
4)获取隐藏进程列表
./volatility_2.6_lin64_standalone -f Challenge.raw --profile=Win7SP1x86_23418 psxview
5)获取 cmd.exe 命令⾏中执⾏信息
/volatility_2.6_lin64_standalone -f Challenge.raw --profile=Win7SP1x86_23418 cmdscan
6)获取执⾏程序发出的标准输出
./volatility_2.6_lin64_standalone -f Challenge.raw --profile=Win7SP1x86_23418 consoles
二.实战提升
1.实战 0 [easy]
1.题⽬描述
My friend John is an "environmental" activist and a humanitarian. He hated the ideology of Thanos from the Avengers: Infinity War. He sucks at programming. He used too many variables while writing any program. One day,John gave me a memory dump and asked me to find out what he was doing while he took the dump. Can you figure it out for me?
译⽂:
我的朋友约翰是⼀位“环保”活动家和⼈道主义者,他讨厌复仇者联盟中灭霸的意识形态:⽆限战争。他编程很烂。他在编写任何程序时使⽤了太多变量。有⼀天,约翰给了我⼀个内存转储,并让我找出他在转储时在做什么。你能帮我弄清楚吗?
2.题⽬分析
从描述中我们可以捕捉到⼀点东西:
“environmental” 词被应⽤到 (后续可能与系统的环境变量有关?)
John hates Thanos (John 讨厌灭霸,可能没⽤?)
John 不擅⻓编程,因为他使⽤了太多的变量
3.解题过程
1)拿到镜像⽂件:先解压:
2)既然这⾥存在 3 个提⽰,那么⾸先我们先获取内存所属框架信息
3)然后指定框架,获取到进程列表,看看有没什么好东西,我们可以注意到有 cmd.exe 其中可能就存在运⾏ Python 程序,我们使用cmdscan进行查看
4)既然得到运⾏程序,我们可查看是否该程序有存在标准输出
可以看到一串16进制,我们进行解密
5)感觉没有什么用,我们换一个方向,题目提到了 “environment” 则对应的系统环境变量——envars,我们查看试试,其中还有 “Thanos” 的⼀个关键信息
找到了对应环境变量,value 字段提⽰我们 xor and password,这对应了异或和系统账⼾的密码
异或解密是一种简单的对称加密和解密技术,通常用于保护简单的数据。在异或解密中,使用一个密钥(通常是一个整数或二进制位序列)对要加密的数据进行异或运算,得到加密后的数据。同样,如果使用相同的密钥再次对加密数据进行异或运算,就可以得到原始的数据,从而实现解密。
我们先异或解码看看:
a = bytes.fromhex('335d366f5d6031767631707f').decode('utf-8')
for i in range(0, 255):
b = ""
for j in a:
b = b + chr(ord(j) ^ i)
print(b)
运⾏后,我们可以看到⼀个特殊的字段:
6)其中有 } 类似是 FLAG 的⼀部分,我们继续查看系统账⼾密码
对其进⾏ NTLM hash 解密
flag{you_are_good_but_1_4m_b3tt3r}
2.实战 1
1.题目描述
My sister's computer crashed. We were very fortunate to recover this memorydump. Your job is get all her important files from the system. From what weremember, we suddenly saw a black window pop up with some thing beingexecuted. When the crash happened, she was trying to draw something. Thatsall we remember from the time of crash.
Note: This challenge is composed of 3 flags.
译⽂:
我姐姐的电脑坏了,我们⾮常幸运地恢复了这个内存转储。你的⼯作是从系统中获取她所有的重要⽂件。根据我们的记忆,我们突然看到⼀个⿊⾊的窗⼝弹出,上⾯有⼀些正在执⾏的东西。电脑崩溃时,她正试图画⼀些东西。这就是我们当时所记得的⼀切
2.题⽬分析
⿊⾊窗⼝,类似 cmd.exe 之类的
获取重要⽂件,可能与⽂件相关,需要⽤到 (filescan,dumpfiles) 插件
“她正试图画⼀些东西”,可能我们需要注意到画图程序 (Windows mspaint.exe)
最后题⽬提⽰: 3 个 Flags
3.解题过程
1)拿到题⽬先解压:
2)获取镜像信息
3)题目提到了黑色窗口,我们使用cmdscan进行查看,可以看到没有什么信息
4)我们使用consoles查看标准化输出,可以看到一串base64编码,我们进行解密
5)题目提到了主要文件,首先我们在桌面上进行搜索,但是没有如何东西
我们使用cmdline进行查看
由于图片太长了,我就截取了存在文件的图片
6)我们提取该文件使用——dumpfiles
我们查看文件是rar文件,我们修改后缀名为rar,然后解压
我们看到需要密码,密码就是ALISSA的密码
我们输入密码goodmorningindia
7)拿到了2个flag,还有一个,根据题目,我们再次转变⽅向,题⽬提⽰了 windows 画板程序即:mspaint.exe,我们看看进程中是否存在
我们将进程在运⾏中产⽣的内存缓存导出
8)我们可以推测,既然是 Windows mspaint.exe 所编辑的,那必然是图⽚,这⾥采⽤ gimp ⼯具,直接打开该⽂件尝试进⾏图⽚源信息编
辑,如下:
打开后,尝试编辑源信息 (宽度和⾼度及位移度),看看是否有什么异动,经过测试,最终如下
我们可以清楚的看到,这⾥⾯是有东西的,但是跟个⽕星⽂⼀样,这⾥是否还有什么值得操作的?是否可以观察到,⽂字和图⽚ 有所颠倒 ,尝试进⾏⽔平翻转
使⽤第⼆个进⾏⽔平翻转,如下,得到 FLAG{Good_BOY_good_girl}
3.实战 2
1.题目描述
One of the clients of our company, lost the access to his system due to an unknown error. He is supposedly a very popular "environmental" activist. As a part of the investigation, he told us that his go to applications are browsers, his password managers etc. We hope that you can dig into this memory dump and find his important stuff and give it back to us.
译⽂:
我们公司的⼀位客⼾由于未知错误⽽失去了对其系统的访问权限。据推测,他是⼀位⾮常受欢迎的"environmental" 活动家,作为调查的⼀部分,他告诉我们,他使⽤的应⽤程序是浏览器、密码管理器等,我们希望您能深⼊挖掘这个内存转储,找到他的重要资料并将其还给我们。
Note:这个挑战中有 3 个 FLAG 需要全部获取
2.题目分析
环境变量
浏览器历史
密码管理器软件
3.解题过程
1)进行解压
2)获取镜像系统
3)根据题目,我们首先进行环境分析——envars
我们可以看到一串base64编码,我们进行解密,拿到第一个flag
4)接下来我们查看浏览器,浏览器为谷歌浏览器
获取浏览器历史:
编译出来的程序⽆法使⽤该插件,直接⽤源 Python 使⽤可
获取到⼀些有趣的⽂件
.kdbx 后缀为常⻅的密码管理器后缀格式
保存⼀下,后续我们扫描然后通过偏移量获取:
1 Important.rar
2 SW1wb3J0YW50.rar
3 stAg3_5.txt
4 Password.png
5 Hidden.kdbx
5)仅获得最后两个⽂件
转存到本地:
还原⼆者的后缀
6)打开图⽚发现敏感信息
FLAG2:关联⼀下,这玩意⼉⽤于解锁该密码存储,使⽤ KeePassXC 打开该存储
但是还有⼀个 FLAG,获取 chrome 历史记录,得到⼀个奇怪的路径,对其进⾏访问看看
下载过来,解压,密码如下:
6045dd90029719a039fd2d2ebcca718439dd100a
4.实战 3
1.题目描述
A malicious script encrypted a very secret piece of information I had on my system. Can you
recover the information for me please?
Note-1: This challenge is composed of only 1 flag. The flag split into 2 parts.
Note-2: You'll need the first half of the flag to get the second.
You will need this additional tool to solve the challenge,
译⽂:
⼀个恶意脚本加密了我系统中的⼀条⾮常机密的信息。你能帮我恢复信息吗?
1 $ sudo apt install steghide
LeadlifeSec 知识星球 leadlife
Note-1:此挑战仅由 1 个标志组成。旗帜分为两部分
Note-2:您需要旗帜的前半部分才能获得旗帜的后半部分。
同时我们需要⼀个 Misc 中常⽤与解决隐写术的⼯具 steghide 来帮助我们解决该题⽬
2.题目分析
根据题⽬可知如下:
⼀些机密信息
存在恶意脚本
Flag 有两部分,必须获得前者才能进⽽过的后者
考题设计 Misc 中的隐写,我们可注意⼀些特殊命名的图⽚
3.解题过程
1)我们进行解压
2)我们提权镜像
3)进⾏ cmdscan 获取 cmd.exe 命令⾏中执⾏信息,发现是乱码,但是我们也看到了有点⽤的信息
先不去管,看看有没造成什么输出,嗯啥也没有
4)对我们上⾯从 cmdscan 中获取到的应⽤程序进⾏查看,filescan 看看有⽆什么说明,看样⼦第⼀个是系统应⽤
第⼆个呢?这个貌似有点意思,但⽬前可不考虑
5)那么我们再进⼀步获取 executable params (可执⾏程序执⾏参数)也就是调⽤插件 cmdline 其中发现了,⼀个 Python 脚本,⼀个 txt 都⽐较奇怪
搞下来看看,先拿下 filepath
⼩技巧:有时候 dump 下来因为⽂件名关系,我们⽆法直接分辨⽂件类型,可直接使⽤ file 查看
6)查看后内容如下:
前者类似 base64 编码
后者则是⽤来 xor 编码前者的⽂件内容然后进⾏ base64 编码从⽽⽣成了 vip.txt
既然作者这样写,那么我们就写⼀个相反的 Python 程序,看看能否解码出来
我们⾸先要对 vip.txt 中的⽂本进⾏ base64 解码为: jmwex3m0\k7oe ,再进⾏ 3 次 XOR 运
算,最终拿到前半段 flag: inctf{0n3_h4lf
import base64
rec = open("vip.txt")
rec_base = rec.read()
rec_debase = base64.b64decode(rec_base)
tempbase = "jm`wex3m0\\k7oe"
\# print(rec_debase)
rec_res = []
for i in tempbase:
temp = chr(ord(i)^3)
rec_res.append(temp)
res = "".join(rec_res)
print(res)
7)那么还有后半段的 Flag,我们⼜去哪⼉找?我们题⽬中就然提⽰我们⽤ steghide ⼯具,⾃然涉及图⽚,我们可直接扫描内存中遗留的图⽚后缀,从⽽来提取线索
其中的⽂件⽐较多,我将重定向到⼀个⽂件以保存,和更清楚简单的查看,经过漫⻓的操作,最终我们可以得到可疑⽂件如下:
将其 dump 下来,然后查看,两个图⽚都没什么新奇,⼀个菊花,⼀个不知道啥
8)⽤ steghide 提取⽂件,但是搞了半天密码却是错误的
最后也是考虑半天,既然必须要获取前半段 Flag,才能获取后半段 Flag,也即是说,前者可能就是后者的钥匙,我们试试⽤前半段 flag 当作密码来试试
inctf{0n3_h4lf_1s_n0t_3n0ugh}
5.实站4
1.题目描述
We received this memory dump from our client recently. Someone accessed his system whenhe was not there and he found some rather strange files being accessed. Find those files and they might be useful. I quote his exact statement Also, he noticed his most loved application that he always used crashed every time he ran it.
Was it a virus?
Note-1: This challenge is composed of 3 flags. If you think 2nd flag is the end, it isn't!! :P
Note-2: There was a small mistake when making this challenge. If you find any string which
has the string "L4B_3_D0n3!!" in it, please change it to "**L4B_5_D0n3!!**" and then proceed.
Note-3: You'll get the stage 2 flag only when you have the stage 1 flag.
译⽂:
我们最近从客⼾那⾥收到了这个内存转储。有⼈在他不在时访问了他的系统,他发现正在访问⼀些相当奇怪的⽂件。找到那些⽂件,它们可能会有⽤。我引⽤了他的确切陈述
这些名字不可读。它们由字⺟和数字组成,但我⽆法弄清楚它到底是什么
此外,他注意到他最喜欢的应⽤程序每次运⾏时都会崩溃。是病毒吗?
Note-1:本次挑战由3个旗帜组成,如果你认为 2nd flag 是结束,那不是!
Note-2:挑战时出现了⼀个⼩错误,如果您找到任何包含字符串 L4B_3_D0n3!! 的字符串在其中,请将其更改为 L4B_5_D0n3!! 然后继续解题
Note-3:只有当您拥有 stage 1 标志时,您才会获得 stage 2 标志
2.题目分析
通过分析题⽬,我们⼤概总结如下:
该内存取证中村⼦啊⼀个英⽂和数字组成的⽂件,且⽂件不可读
其中我们需要注意字符串: L4B_3_D0n3!! 碰到了将其修改为 L4B_5_D0n3!!
关键字病毒?喜欢的程序:具体是什么程序?
3.解题过程
1)解压: 7z e Challenge-5.7z
还是⽼样⼦,先分析框架:
2)然后分析 cmd 内的信息:
cmdline
3)进⾏ filescan 定位到上⾯我们找到的⽂件:SW1wb3J0YW50.rar,进行提取
4)尝试解压,发现要密码,但是我们没有打开它的密码。
提⽰说:RAR ⽂件中有 Stage2.png,我们去找 Stage 1 的密码,在⾛了⼏个死胡同之后,我尝试了 screenshots 插件,顾名思义,它允许我们看到在进⾏内存转储时,桌⾯上显⽰的内容,screenshots 实际上给出的是线框图,显⽰了所显⽰窗⼝的位置和标题,它不会向我们显⽰完整的窗⼝内容,但通常⾜以了解桌⾯上显⽰的内容。
遍历查看后发现⼀个特殊字符串
ZmxhZ3shIV93M0xMX2QwbjNfU3Q0ZzMtMV8wZl9MNEJfM19EMG4zXyEhfQ
Base64 解码后如下
5)Yes 获得了第⼀个 FLAG,题⽬在之前有提⽰
挑战时出现了⼀个⼩错误,如果您找到任何包含字符串 L4B_3_D0n3!! 的字符串在其中,请将其更改为 L4B_5_D0n3!! 然后继续解题
flag{!!_w3LL_d0n3_St4g3-1_0f_L4B_5_D0n3_!!}
使⽤ Flag 1 解压 SW1wb3J0YW50.rar 成功
得到 Flag 2
6)题⽬说存在 3 个 FLAG 但是到这⾥,貌似没线索了,我们重新审题会发现他注意到他最喜欢的应⽤程序每次运⾏时都会崩溃。是病毒吗?
从这⾥切⼊,我们或许会获得 FLAG 3 ,但在这之前,我们尽量可检索所有 txt ⽂件,是否存在特殊的⽂件,因为我做过来⼤多数线索都在 txt 中
但是搞了半天,没⽤,考虑到进程,我们操作 pslist 和 psxview 插件看看是否有可以进程这⾥有⼀个细节,我们可能第⼀次不会注意到,就是 NOTEPAD.exe 这个进程与其他的 NOTEPAD.exe 不⼀样,它被隐藏着
将其转存下来,然后操作 IDAPro64 打开上述程序
Flag: bi0s{M3m_l4b5_OVeR_!}
6.实站5
1.题目描述
We received this memory dump from the Intelligence Bureau Department. They say this evidence might hold some secrets of the underworld gangster David Benjamin. This memory dump was taken from one of his workers whom the FBI busted earlier this week. Your job is to go through the memory dump and see if you can figure something out. FBI also says that David communicated with his workers via the internet so that might be a good place to start.
Note: This challenge is composed of 1 flag split into 2 parts.
The flag format for this lab is: **inctf{s0me_l33t_Str1ng}
译⽂
我们从情报局部⻔收到了这个内存转储。他们说,这些证据可能掌握着⿊社会⼤佬⼤卫·本杰明的⼀些秘密。这个内存转储是从本周早些时候被联邦调查局逮捕的他的⼀名⼯⼈那⾥拿⾛的。你的⼯作是检查内存转储,看看你是否能找到⼀些东西。FBI 还表⽰,⼤卫通过互联⽹与他的员⼯进⾏交流,因此这可能是⼀个不错的起点.
Note:注意:此挑战由 1 个旗帜分成 2 个部分组成。
本实验的标志格式为:inctf{s0me_l33t_Str1ng}
2.题目分析
涉及 David Benjamin 这个⼈或者特殊字符串
题⽬要求我们找⼀些东西,但具体却不知
互联⽹:也就是说我们可能在浏览器历史中找到线索
最后题⽬只有⼀个 Flag,但分为了两部分
3.解题过程
1)先解压,然后分析所属系统平台与版本
2)扫 CMD 相关的信息
cmdscan 没有如何东西,我们使用cmdline,可以发现一个压缩包,我们进行提取
3)我们解压缩包2.rar,可以看到需要密码,操作解压发现要密码,提⽰ Flag2.png
回想实验 2,我使⽤ envars 插件列出了所有正在使⽤的环境变量,其中⼀个⽴即脱颖⽽出,就是压缩包密码
4)还有一个flag,我们根据题目内容,⼤卫通过互联⽹与他的员⼯进⾏交流我们想到浏览器,我们列出浏览器
我们可以看到2个浏览器,一个谷歌浏览器,一个firefox浏览器,我们一一列出来查看
不知道为什么这个上面列不出来,我们直接在kali上面使用volatility
先获取 Chrome 的历史记录
数据过多,后续省略…,再获取 Firefox 的历史记录,但是没有获取到
我们着重分析 Chrome 浏览器的历史记录,可以发现其中有⼀个值得我们注意的地⽅
访问后是⼀个 Google⽂件
细⼼收集后发现其中有⼀个超链接
5)访问后如下,需要密钥
这⾥有⼀个⼩技巧:如果我们要在内存映像中找寻特殊字符串,可直接:
strings <memory_name> | grep <what_you_want_to_find?>
6)找到了 KEY:
THE KEY IS zyWxCjCYYSEMA-hZe552qWVXiPwa5TecODbjnsscMIU
提取⽂件,是⼀个 png ⽂件,但在 Windows 中⽆法打开,由此我们可以判断是⽂件有问题,要么是⽂件头,要么是特殊⽂件,扔到 010Editor ⾥⾯分析
⼀眼就可以看出来,IHDR ,其中的 i 变为了小写,将其转换为大写如:IHDR ,修复后得到 Flag
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~