比赛时没整出来,赛后整理了一下网上放出的wp,算是自己学习一下别人的思路,记录一下以备以后复习。
解法一:
用通用的工具Volatility:
由于在Ubuntu上的复现发现不是太成功,顺便安了一下windows下的Volatility。这里放上下载链接:
https://www.volatilityfoundation.org/releases
最好把下载下来的exe文件重命名一下,用起来方便点。
解题:
先是基本的查看镜像信息: vol.exe -f memory.dmp imageinfo 命令其实和Ubuntu下差不多。
然后根据题目要求:powershell执行的脚本储存的注册表键
这里提到根据分析出的镜像和powershell得知是windows的镜像进行操作,这里看网上师傅的解法中提到了:evtx.操作是进行文件搜索,把带有evtx后缀的文件全部打印出来。
这里补充一下evtx的东西:
可以看出这里的思路是从系统日志进行下手。
命令: vol.exe -f memory.dmp —profile=Win7SP1x64 filescan | find “evtx”
分离出来两个文件:
然后打开那个evtx文件:
发现有关键的信息,这个事件分析器上面的信息还挺多,因为没再仔细地去花时间去学,只是简单的看了下,后续有遇到的类似的问题再补上。
这里的关键信息是:powershell -noprofile
然后在winhex里面搜索关键词:
这里就可以看到其键值:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Communication
然后这个就是flag了。
——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
解法二:因为是windows的键值表
然后根据Powershell所处的分类,进行进一步的细化:HKEY_LOCAL_MACHINE
在winhex中进行搜索:然后进行再进行进一步的查看。
—————————————————————————————————————————————————————————————
—————————————————————————————————————————————————————————————
解法三:
和解法一用些许类似,但个人感觉还是这个解法更为容易理解,适用性广泛。
————————————————————————————————————————————————————————————-
正文:
所用工具还是windows下的volatility,感觉用起来比Linux下的更为便捷,有些操作很是快。
依旧是常规做法,先看版本,然后根据题目的hint再确定下一步。
这里整理下一些常用的操作(这里以题目附件为例):
—————————————————————————————————————————————————————————————
这里说下下面的打印出来的进程和文件信息都可以导出到txt中。
简单举个例子:vol.exe -f memory.dmp —profile=Win7SP1x64 pslist > pslist_output.txt
—————————————————————————————————————————————————————————————
进程获取:
vol.exe -f memory.dmp —profile=Win7SP1x64 pslist
—————————————————————————————————————————————————————————————
文件信息获取:
vol.exe -f memory.dmp —profile=Win7SP1x64 filescan
—————————————————————————————————————————————————————————————
命令行信息:
vol.exe -f memory.dmp —profile=Win7SP1x64 cmdline
—————————————————————————————————————————————————————————————
注册表内容:
vol.exe -f memory.dmp —profile=Win7SP1x64 hivelist
#查看注册表software项,0xfffff8a0002d7010是software的内存虚拟地址
vol.exe -f memory.dmp —profile Win7SP1x64 printkey -o 0xfffff8a0002d7010
#根据名称查看具体子项的内容
vol.exe -f memory.dmp —profile Win7SP1x64 printkey -K “SAM\Domains\Account\Users\Names”
—————————————————————————————————————————————————————————————————-
由于本题要在所有的注册表中查找新增的注册表,并且不知道具体的子项,所以上述方式不适用,只能将所有注册表转储:
vol.exe -f memory.dmp —profile=Win7SP1x64 dumpregistry —dump ./test_one
这里的test_one是在当前目录下存在的一个文件夹,因为转储出来的是文件,所以不和上文一样了。
根据题目说明是恶意软件的缘由,那就对:registry.0xfffff8a0002d7010.SOFTWARE.reg 进行分析
问题:
1、从内存中导出的内容,跟标准的注册表项文件有差别导致无法导入系统注册表。
2、若直接导入系统注册表,可能会跟原有的注册表项有冲突甚至覆盖原有注册表项,导致系统崩溃。基于以上两个问题,需要寻找第三方工具去查看注册表。
这里放个注册表恢复的工具链接:https://www.mitec.cz/wrr.html
界面是这个样子的,不算太复杂,摸索一会后发现主要是用Raw Data这个模块,然后题目说的是powershell的恶意代码,然后看的网上师傅的题解说是直接搜索关键词:New-Object.然后就不懂为什这样搜索,查了下New-Object的渊源:
然后就得到上图的搜索结果code。根据这里的路径得到:Microsoft\Windows\Communication
然后再根据注册表的前面路径,得到最终结果:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Communication