内存取证闯关Memlabs-0

MemLabs Lab 0 - Never Too Late Mister

感谢P. Abhiram Kumar,这位来自Team bi0s的数字取证专家,为我们带来了如此精彩纷呈的MemLabs。

题目靶机均来源于外面,需要点魔法,因此准备了备份镜像下载地址,如果链接失效了,请在博客发消息

作者github题目及wp链接:stuxnet999/MemLabs: Educational, CTF-styled labs for individuals interested in Memory Forensics

题目下载链接

原地址:Google drive

备份地址:

通过网盘分享的文件:Challenge.tar.xz
链接: https://pan.baidu.com/s/1sx3wFlAo0KF06iFH65C8NA?pwd=3nb5 提取码: 3nb5
--来自百度网盘超级会员v3的分享

由于原文wp均为英文,这里由本人搭配在线翻译进行转译,解题思路均为个人手写,写的不好还请见谅

作者简述

This directory has been created to aid first-timers in learning how to approach a CTF-styled memory forensics challenge and also learn the plugins of the memory analysis framework, Volatility.

创建此目录是为了帮助初学者学习怎样处理ctf风格的内存取证挑战并学习内存分析框架volatility。

So here I'll be writing a very elaborate walkthrough of a memory forensics challenge which I made for the BSides Delhi CTF 2018. The challenge is fairly easy in difficulty and I believe will be a great example challenge for everyone new to this. Onto the challenge now.

所以,在这里呢,我将为BSides Delhi CTF 2018而撰写一篇非常详细的内存取证挑战演练。这个挑战在难度上相当简单,我相信对于新手来说,这将是一个很好的挑战例子。现在开始挑战。

题目描述:
我的朋友约翰是一位“环境”活动家和人道主义者。他讨厌《复仇者联盟3:无限战争》中灭霸的意识形态。他编程很烂。他在写程序的时候使用了太多的变量。有一天,约翰给了我一个记忆转储,让我在他转储的时候找出他在做什么。你能帮我算一下吗?

此题仅包含一个flag,入门难度

解题步骤

In most beginner level CTFs whenever we are provided with a memory forensics challenge, we also have a description which gives out certain clues. Identifying these clues can be quite tricky at first but becomes easier if you go on playing more & more CTFs.

在大多数初级 CTF 中,每当我们面临记忆取证挑战时,我们也会有一个描述,它给出了某些线索。一开始识别这些线索可能会相当棘手,但如果你继续玩越来越多的CTFs,就会变得更容易。

Now the clues that we can pick from this description are as follows:

  • Environmental Activist (Since the word is quoted)
  • John hates Thanos (Maybe useless but let us see)
  • John sucks at programming and used too many variables.

Now let us move into analyzing the memory dump.

现在我们可以从这个描述中挑选出的线索如下:

  • 环境活动家 (因为这个词被引用了)
  • 约翰讨厌灭霸(也许没用,但让我们看看)
  • John 编程很糟糕,使用了太多的变量。

现在让我们开始分析内存转储。

作者在wp提到本题只需要volatility2.6版本,并且嘱咐从题目描述挑选线索决定做题思路

第一步永远都是先提取镜像信息确定操作系统版本

vol.py -f Challenge.raw imageinfo

image-20241216164815813

这里我们得到操作系统为Win7SP1x86_23418

Now as you can see, volatility provides a lot of suggestions as to which profile you should use. In some cases, all of the suggested profiles may not be correct. To help get over this barrier, you may use another plugin called kdbgscan. As far as this challenge is concerned, using kdbgscan isn't required.

现在如您所见,volatility 提供了很多关于您应该使用哪个配置文件的建议。在某些情况下,所有建议的配置文件可能都不正确。为了帮助克服这个障碍,您可以使用另一个名为 kdbgscan 的插件。就此挑战而言,不需要使用 kdbgscan。

Now as a forensic analyst, one of the most important things we would like to know from a system during analysis would be:

现在,作为法医分析师,我们希望在分析过程中从系统中了解的最重要的事情之一是:

  • Active processes
  • Commands executed in the shell/terminal/Command prompt
  • Hidden processes (if any) or Exited processes
  • Browser History (This is very much subjective to the scenario involved)

And many more...

  • 活动进程
  • 在 shell/terminal/命令提示符下执行的命令
  • 隐藏的进程(如果有)或已退出的进程
  • 浏览器历史记录(这在很大程度上取决于所涉及的场景)

还有更多...

那么我们跟随作者的步伐查看下进程列表

vol.py -f Challenge.raw --profile=Win7SP1x86_23418 pslist

image-20241216165234852

当然不止这些进程

执行此命令会为我们提供一个在进行内存转储时正在运行的进程列表。该命令的输出提供了一个完全格式化的视图,其中包括名称、PID、PPID、线程、句柄、开始时间等。

仔细观察,我们注意到一些需要注意的过程。

  • cmd.exe
    • 这是负责命令提示符的进程。从此过程中提取内容可能会为我们提供有关系统中执行了哪些命令的详细信息
  • DumpIt.exe
    • 使用此过程来获取系统的内存转储。
  • Explorer.exe
    • 此进程是处理文件资源管理器的进程。

现在,既然我们已经看到 cmd.exe 正在运行,那么让我们尝试查看 shell/终端中是否执行了任何命令。

vol.py -f Challenge.raw --profile=Win7SP1x86_23418 cmdscan

image-20241216170104904

这里可以看到通过python执行了demon.py.txt,你问我这不是个txt吗,应该没什么用吧,你就当这是个壳,执行的是里面的东西

因此,作者要检查demon.py这个python 脚本是否发送了什么

这里使用了consoles插件,我也无法详解,毕竟我的能力有限

vol.py -f Challenge.raw --profile=Win7SP1x86_23418 consoles

image-20241216170819636

哦,看到这里我就高兴了,密码学呀

该字符串被写入 stdout,这是一个十六进制编码的字符串。

那么从哪里得到解决方法呢,还记得环境吗,我们可以试着查看下环境变量

vol.py -f Challenge.raw --profile=Win7SP1x86_23418 envars | grep cmd.exe

image-20241216173109373

看到一个很有趣的,xor异或,大概就是这一字符串的提示,密码?,让我们去看看镜像密码吗,这里先解字符串吧

image-20241216172235468

跑脚本时刻,可以看到得到了类似于flag的后半部分

1_4m_b3tt3r}

那么整个flag可能被分隔成了2-3部分

现在让我们再来看看密码

vol.py -f Challenge.raw --profile=Win7SP1x86_23418 hashdump

image-20241216173441077

前者查看用户名密码信息(密码是哈希值,需要john爆破),后者可查看强密码

这里lsadump啥也没看出来

想着用mimikatz插件获取密码,结果给哥们整笑了,第一个死活得不到

image-20241216204934871

拿第二个操作系统获取密码进而得到了flag前面的部分,拼接flag

flag{you_are_good_but1_4m_b3tt3r}

posted @ 2024-12-16 21:02  kriton  阅读(819)  评论(0)    收藏  举报