0x00 前言

本文对我曾接触到过的CTF中的内存取证类题目与USB流量分析类题目进行一个总结类梳理。其中kali里集成了取证神器volatility与流量分析神器tshark

0x01 Volatility

第一步提取内容镜像信息

常用命令volatility -f <xxx.vmem>(或xx.raw) imageinfo

使用imageinfo插件获取到基本信息,特别是内存数据是什么操作系统下生成的,这点尤为重要 (如图的WinXPSP2x86) 因为在接下来每一步都要命令“–profile”指定操作系统的属性。

第二步列取文件中曾使用的进程信息

常用命令: pslist/pstree/psscan

1)pslist无法显示隐藏/终止进程。
2)解决这个问题的插件是psscan,这个插件输出的内容会比pslist多得多。(所以全面信息获取用psscan)
3)pstree同样也是扫描进程的,但是是以进程树的形式出现的。

同时可以搭配grep命令进行对可疑进程(cmd.exe、notepad.exe等)的快速筛选

第三步根据进程中使用的工具对应查看

常用命令:cmdscan notepad

cmdscan 可以用来查看受害者系统上攻击者操作的最强大的命令之一,无论他们是否打开cmd.exe。简单地说,可以看到攻击者在命令提示符中键入的内容。

当进程中存在notepad.exe时,可用notepad插件查看文本中所写内容

第四步文件探测

常用命令:filescan

该命令通常结合grep命令对所需要文件进行筛选,以下我已在CTF中遇到的两道内存取证的文件隐藏做出结论:大概率搜索桌面即可。

第五步提取文件

常用命令:dumpfiles memdump

volatility -f [imgfile] –profile=[imgversion] dumpfiles -Q [file_offset] –dump-dir [outdir]

注意红框所示需要对应,–dump-dir指定下载到本地的什么位置(这里是当前目录),注:下载下来的文件如果是普通文件(图片,文本)会直接以dat结尾,如果是压缩包,则会在前面加上一个.zip(蓝箭头所指)后续的使用修改为对应文件名及其后缀即可。

dump画图进程: dump 出来的进程文件,可以使用 foremost 来分离里面的文件。332是对应进程的pid 。不进行分离的题型参看https://shawroot.hatenablog.com/entry/2019/11/12/%E8%AE%B0%E4%B8%80%E9%81%93%E7%BA%A2%E5%B8%BD%E6%9D%AFCTF%E9%9A%90%E5%86%99%E9%A2%98%E6%B5%85%E5%AD%A6Volatility

0x02 USB流量分析

这里以XMAN2018挑战赛的AutoKey进行学习

题目下载

pcapng文件用wireshark打开出现如下信息,这里是经典的提取usb流量问题

tshark -r attachment.pcapng -T fields -e usb.capdata > usbdata.txt

-r: 读取本地文件,可以先抓包存下来之后再进行分析;
-T,-e: 指的是打印这两个字段;

结果会保存到usbdata.txt中。

用脚本对USB信息进行翻译

#!usr/bin/env python
#-*- coding:utf-8 -*-
mappings = { 0x04:"A",  0x05:"B",  0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G",  0x0B:"H", 0x0C:"I",  0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O",  0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5",  0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]",  0X2B:"    ", 0x2C:" ",  0x2D:"-", 0x2E:"=", 0x2F:"[",  0x30:"]",  0x31:"\\", 0x32:"~", 0x33:";",  0x34:"'", 0x36:",",  0x37:"." }
nums = []
keys = open('usbdata.txt')
for line in keys:
    if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0':
         continue
    nums.append(int(line[6:8],16))
keys.close()
output = ""
for n in nums:
    if n == 0 :
        continue
    if n in mappings:
        output += mappings[n]
    else:
        output += '[unknown]'
print 'output :\n' + output

还有一种USB信息转换为轨迹坐标的方式。文章参看Root师傅的博客文章https://shawroot.cc/archives/580

0x03 网络安全与执法专业比赛取证10题

考点:volatilty内存取证,USB流量分析,希尔密码

进程中没有看到notepad,但是又cmd进程,利用cmdscan插件查看得到希尔密码的矩阵,还缺少一个密文。

进行文件搜索,最后将zip文件提取出

修改后缀后打开压缩包发现是一个img文件。考虑linux磁盘挂载。

可以看到有一个usb.pcapng文件,考虑USB流量分析,这里直接用tshark命令搭配上面的脚本获取隐藏信息

得到写入密码的密文,利用在线网站进行解密:https://www.dcode.fr/hill-cipher

如上所选修改成对应的3×3矩阵。得到最终的结果

最后注意要取消磁盘挂载:umount ./guazai(挂载文件夹)

文章参考:https://shawroot.cc/archives/673

0x04 最后

感谢Root师傅的带飞,这次比赛跟Root师傅学到了好多。

考点:pyc隐写,文件隐藏,脚本编写

文件内容

__pyache__中是

联想到pyc隐写,首先祭出Easy Python Decompiler v1.3.2发现反编译失败,没有得到源码,好像它只支持python2的反编译,然后再祭出我们的神器Stegosaurus,关于它的使用与下载参看大佬博客https://www.cnblogs.com/ECJTUACM-873284962/p/10041534.html,然后解密我们得到隐藏信息是AES的密钥说明一定有AES的密文会给我们。

接下来我们在resource文件夹中找到一张扫雷.png的图片,手动改后缀变为zip,或者用kali里的binwalk,foremost对文件隐藏内容进行分离。得到zip中包含的secret.txt,该txt文件里便是AES密文,利用在线解密,解得如下内容

这里只放部分了,看最后的几位将其每两位倒放过来就是压缩包文件的十六进制开头,因此我们编写脚本使其正序。

首先将文本复制粘贴到winhex中,保存为1flag.zip文件,脚本如下。

f=open(r’1flag.zip’,’rb’)
b=open(r’flag.zip’,’wb’)
R=f.read()[::-1]
b.write(R)

打开flag.zip看到wav文件

这里用音频软件让其倒放听出flag,这个我实在有点无语,不乐意找此类音频软件了,网上一搜就有,感觉没啥值得学习的意义。

考点: 0ok!解密,压缩包爆破,伪加密,明文攻击,LSB隐写,猪圈密码,与佛伦禅,标准银河字母,gif时间隐写, NTFS数据流隐写 ,摩斯密码,标准银河密码

1

1.txt中有0Ok密码,利用在线网站解密得到下一个压缩包密码:

https://www.splitbrain.org/services/ook

然后用winhex打开png图片在末尾处得到第一部分的part1:068c

2

txt中没啥有用信息,在jpeg的属性中找到part2:555b

利用ARCHPR对压缩包爆破得到密码3302

3

看到txt文本中内容

恭喜你骑上了小黄车(不嫌累嘛
边上那个膜拜电单车不香嘛?
(强制换乘膜拜有气嘛?hhh
emmm 怎么打开他呢,好像也没锁好?虚张声势?纸糊的?

很明显是伪加密,winhex修改或者 使用工具ZipCenOp.jar破解

利用stegsolve,lsb隐写查看得到part3:578b

4

hint.png给出了一个加密方式用winrar加密,在看5.zip中同样包含一个4.jpg的加密文件,想到明文攻击,对4.jpg用winrar加密成zip文件,利用ARCHPR进行明文攻击

这里解不出密码,但是可以读取到文件内容,生成一个zip包

然后利用winhex修改连环画图片的高度得到part4:0eae

5

jpg文件中是猪圈密码,解密得到6.zip的密码 fojiajielv

连环画文件夹中是一大堆乱序图片,我们以时间日期拍个续就可以看到大致样子

放到PS中或以肉眼识别可以看到part5:9d4b

6

剧情txt中提示与佛伦产了,6.txt中存在佛语密码,到在线网站解密,得到7.zip密码

jpg文件的十六进制结尾有摩斯密码,解密得到part6:e52bd67

7

7.png是标准银河字母,在线搜索对应即可得到8.zip密码:yinhezm

gif考的是gif的时间隐写,在kali中

identify -verbose 7连环画.gif |grep Delay,可以看到许多10和20

identify -format "%T" 7连环画.gif

得到10202020101010101020201010101020102020201010201010202020102010101010202010202020101020202010201010102020102020101010202010101020101020201020102010102020102020101010202010102010

把20变成1,10变成0

0111000001100001011100100111010000110111001110100011011000110001001101010011011000110010

转成ascii码即可可以每8位转成16进制数字,在进行转asciipart7:61562

至此所有part都得到了用得到的所有part拼接到一起组成一个32位密码,打开9.rar

9剧情.txt中提示.取到经文 原路返回,龟丞相一不高兴,小童鞋掉进水里,出水一看,NT和FA给的经文是空白的??知道是NTFS隐写

使用工具lads.exe或者使用NTFSstreameditor2

lads.exe /S对这个目录文件进行检索

查看flag.txtnotepad 9.txt:flag.txt

最后得到flag

考点:盲水印、ogg藏zip、VeraCrypt基本用法、NTLM Hash破解、Chrome Cookie读取

首先解开压缩包得到这些东西

看到Bind和Oringe开头猜测盲水印攻击

下载工具(https://github.com/chishaxie/BlindWaterMark),并使用命令提取水印。命令如下

前提自行安装cv2库

放大后可以看到内容

Veracrypt Password is X0YAlGDuZF$echCy

由密码前的提示“VeraCrypt”,可知其为VeraCrypt加密容器的解密密码。

然后对另一个音频文件查看是否隐藏其他东西

发现zip文件将其提取出,可以看到压缩包中包含容器

随后使用veracrypt挂载容器选择一个磁盘点一下

之后会看到多出一个刚刚点击的磁盘

Cookie为Chrome浏览器的Cookie数据库(其实是SQLite),ObjectNF-PC.txt保存的是mimikatz工具提取Windows密码时的输出(SHA1与明文部分被替换成了星号),S开头的便是原Windows系统的Protect文件夹了。

首先打开txt文件可以看到NTLM哈希值,拿到在线网站解密

即,操作系统的登录密码为happy2020。因为mimikatz读取的就是目标机的登录密码,(看不懂可以学习一下mimikatz的使用)随后下载ChromeCookiesView并运行。程序默认先读取本机Chrome的Cookie,因此需要修改程序设置:

解压S开头的Zip,并将解压得到的文件夹放入一独立的文件夹中,如下图中,S-1-5-21-3375469711-
1363829938-1291733684-1001文件夹被放入了protect文件夹内,其中只包含20dfa1c6-d232-40cd-
89ec-5678b380920b一个文件:

密码是happy2020,因为读取的是chrom的cookie信息,所以相当于登录chrom浏览器查看历史内容,最后得到flag

考点:音频隐写(LSB、MP3Stego)、Mp3封面、文件加密(第三方工具)、PDF417

首先解压附件,得到三个音频、一个压缩包和一个程序。

由程序文件的名字可判断出这是一个加密软件(https://macpaw.com/encrypto

尝试利用该软件加密任意一个文件,得到的加密后文件的扩展名为.crypto。

可以看到用该软件加密的文件需要密码解密

打开flag.7z,发现其中压缩着一个flag.crypto。尝试解压,发现该压缩文件有密码。猜想三个音频文件中应该藏有压缩包密码和flag.crypto解密密码。
使用播放器播放三个音频文件,均无不自然感,所以排除音频文件频率存在修改或人为插入摩尔斯电码/
高低电平二进制码等情况。在播放Unlasting.mp3时,发现封面似乎被修改过:

利用Mp3tag(https://www.mp3tag.de/en/)提取出封面。

右键点击copy,粘贴到doc文件中,另存为png图片

可判断出其为PDF417条码。通过扫描工具(https://online-barcode-reader.inliteresearch.com)可以得到其中的信息:

通过”AESKey”猜想其为解密flag.crypto时需要的密码。通过“”You know LSB.wav”的文件名可知,该音频LSB内存在隐藏的数据。使用SilentEye(https://sourceforge.net/projects/silenteye)提取出LSB区域内的数据:

由“Stegano”的提示,猜想“上裹与手抄卷.mp3″通过MP3Stego(https:/www.petitcolas.net/steganogr aphy/mp3stego/)隐藏了数据。利用工具结合Key进行提取,命令如下:

Decode.exe -x -P uFSARLVNwVIewCY5 上裹与手抄卷.mp3 out.wav hide.txt

这里注意要将mp3文件复制到mp3对应的目录下

打开hide.txt得到压缩包密码

最后解压得到flag

考点:Docker、Linux基础(环境变量、find、grep、cat、tar等)、SQLite

题目给了一个docker网址,里面有题目所需的镜像

复制拉取镜像的命令,这里docker的搭建就不重复了,可以参考我docker的学习笔记

因为我们做了端口映射,所以本地访问127.0.0.1:8000即可

提示我们查看容器中的FLAG系统变量,因此查看sh,得到另一个提示

另起一个终端,发现提示让我们找flag.tar.gz

接下来利用find命令找到文件,然后解压

查看README,得到提示查看history

提示我们压缩包的password在/etc的某个文件中,使用grep寻找

随后我们用xftp将压缩包导出来解压得到一个数据库文件,通过后缀名可以知道是sqlite数据库文件,命令行载入查看

sqlite3 ./flag.db

获得flag

考点:HTTPS流量解密,图片outguess隐写,图片备注隐藏信息,图形二维码

下载并解压题目附件,得到一个Wireshark抓包文件Capture.pcapng和一个文本文档ssl_log.log。打开数据包,不难发现其中多数为HTTPS/TLS协议的数据包。因此考虑到将流量解密。

解密方法参考https://blog.csdn.net/nimasike/article/details/80887436

然后过滤一下http,给length排序,导出第一个可疑长度偏大的http对象

然后我们把导出得文件放到kali中binwalk,发现包含zip文件

可以看到提示了outguess,想到outguess隐写

在注释中找到密码

访问链接下载一个压缩包得到一个二维码,扫码即可

考点:PDF隐写、word XML隐写

首先解压附件,里面有一个名为“No Password”(无密码)的PDF,和一个加密的7z。尝试打开7z压缩包,发现文件名已被加密,不知道密码的情况下无法得知压缩包内有什么文件。于是思考密码是不是藏在PDF中。
通过搜索可以得知,可能是使用wbStego将数据隐写到了PDF内。下载工具(http:/wbstego.wbailer.com/)并尝试解密:

空密码直接continue

生成

打开内容

解压之前的7z加密文件,得到一个doc

将doc后缀改成rar,最后在word->secret.xml中找到flag

考点:zip伪加密,图片F5隐写,十六进制

首先拿到一个压缩包,有密码,winhex打开

可以看到红框处是00,全局没加密,意味着是伪加密
将9修改为0,同时看到下面提示F5,想到F5隐写

下载工具git clone https://github.com/matthewgao/F5-steganography.git

然后用key解密,进入文件目录

java Extract -p NllD7CQon6dBsFLr -e out.txt FLAG_IN_PICTURE.jpg

得到out.txt,打开发现开头52617221是rar文件头,因此放到winhex中保存打开得到flag