Automne's Shadow.

BSidesSF CTF 2019 GoodLuks WriteUp

2019/03/12 Share

Forensics

goodluks1

automne

参考链接:https://blog.phionify.web.id/post/writeup-bsidessf19-ctf-forensic/

在拿到img文件之后,首先查看文件类型,是个MBR启动项。

root@automne:/Pentest# file goodluks1.img 
goodluks1.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x0,32,33), end-CHS (0x10,81,1), startsector 2048, 260096 sectors, extended partition table (last)

接着挂载镜像失败,尝试一通修复,并没有结果。
直到mount指定offset之后出现crypto_LUKS字符串,经过搜索才发现是Linux下的分区加密技术( Linux Unified Key Setup (LUKS))

automne

赛后重新总结此题,发现可以使用PhotoRec & TestDisk工具来修复。
执行如下命令,在可视化界面中进行操作,注意选择ext4

photorec goodluks1.img

修复后的文件会在当前目录下生成一个recup_dir.1的文件夹,

root@automne:/Pentest/recup_dir.1# ls
f0000000.luks  report.xml

然后输入下面的命令就可以开始解密了

cryptsetup luksOpen f0000000.luks showme

但是这里需要提供密码,还提供了一张图片,明显密码就在图片里

automne

脑洞题啊,根据照片里的“EFF Membership”,可以定位到一个网站(https://www.eff.org/dice)和字典(https://www.eff.org/files/2016/07/18/eff_large_wordlist.txt)

从字典里取对应的数据,得到

wages upturned flogging rinse landmass number

这个就是密码了,在上面的命令的输入框里填入,就可以解密了

automne

最终,挂载解密后的镜像(/dev/mapper/showme),即可得到flag。

automne

goodluks2

automne

参考链接:https://teamrocketist.github.io/2019/03/05/Forensics-BsidesSF-2019-goodluks2/

可怕,解压后32G的文件,下班回来一晚上又这样没了,好气啊。

root@automne:/Pentest# file goodluks2.img
goodluks2.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x0,32,33), end-CHS (0x51,85,4), startsector 2048, 67106816 sectors, extended partition table (last)

下面说明查看offset的两种方法:
1.使用parted,下图标记处的1048576就是offset

automne

2.使用fdisk,2048*512=1048576

automne

拿到offset之后,直接mount会提示LUKS加密
使用如下命令,将镜像文件虚拟成块设备

losetup --offset 1048576 /dev/loop8 goodluks2.img

automne

然后使用下面的命令将payload offset打印出来,可见是4096

cryptsetup luksDump /dev/loop8

automne

接着使用dd将块设备的指定偏移dump出来,得到LUKS_Header.dd

dd if=/dev/loop8 of=LUKS_Header.dd bs=521 count=4096

automne

然后就是使用hashcat加载rockyou.txt(kali下/usr/share/wordlists自带)去爆破这个文件头hash
在kali虚拟机里使用hashcat,提示内存不足,所以直接在windows下爆破。

automne

在hashcat安装目录,使用如下命令:

hashcat64.exe -D 1,2 -a 0 -m 14600 LUKS_Header.dd rockyou.txt

跑了25分钟了,还没出来,底下的命令不用管,后台一直在处理。

automne

随着笔记本的CPU声响的降低,我告诉自己,破出来了,耗时34分钟。

automne

拿到密码gaffer3后,就可以破解luks了。

使用下面的命令:

cryptsetup luksOpen /dev/loop8 luks2

输入密码:gaffer3

然后到/dev/mapper/里将luks2挂载到/mnt里
即可读取到flag

automne

goodluks3

automne

参考链接:https://teamrocketist.github.io/2019/03/05/Forensics-BsidesSF-2019-goodluks3/

提供的是加密后的磁盘镜像和内存文件。
遇到内存文件,原则上会使用volatility去处理,但是这里无法直接识别,对于Linux内存需要定制profile,比较麻烦。

换个思路。

对于luks加密的磁盘和内存文件,一般是想让我们找到master key再处理,参考下图。

automne

$ findaes.exe D:\Learning\CTF\BSidesSF_3_5\goodluks3\goodluks3.mem
Searching D:\Learning\CTF\BSidesSF_3_5\goodluks3\goodluks3.mem
Found AES-256 key schedule at offset 0x895dd88:
b0 7a 29 f5 44 15 47 76 57 04 6e ec d3 03 f5 bd af a4 e6 df b2 71 01 ab af 7e 22 e1 23 94 15 f5
Found AES-256 key schedule at offset 0x895df78:
8e 8c 3a 67 eb 11 54 6c b1 cc 7d 0f cc 85 e8 43 30 7c 16 d4 7f 86 08 a1 0f 59 3d 4c 31 0f c8 6a

可见,拿到两个AES-256 key。

使用parted命令

parted goodluks3.img 

输入交互命令得到下面的信息:

(parted) U                                                                
Unit?  [compact]? B                                                       
(parted) print                                                            
Model:  (file)
Disk /Pentest/goodluks3.img: 4294967296B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start        End          Size         Type     File system     Flags
 1      1048576B     2999975935B  2998927360B  primary  ext4            boot
 2      2999975936B  4000317439B  1000341504B  primary
 3      4000317440B  4293918719B  293601280B   primary  linux-swap(v1)

将第二部分挂载到loop块:

losetup --offset 2999975936 /dev/loop9 goodluks3.img

然后将上面得到的两个AES-256的key拼接到一起,格式化后存到key0里。

echo '8e 8c 3a 67 eb 11 54 6c b1 cc 7d 0f cc 85 e8 43 30 7c 16 d4 7f 86 08 a1 0f 59 3d 4c 31 0f c8 6a b0 7a 29 f5 44 15 47 76 57 04 6e ec d3 03 f5 bd af a4 e6 df b2 71 01 ab af 7e 22 e1 23 94 15 f5' | tr -d ' ' | xxd -r -p > key0

然后指定master-key-file参数即可

cryptsetup luksOpen --master-key-file key0 /dev/loop9 luks3

然后就是挂载一条龙,前面两题已经操作过,直接上图

automne

通过这三道题的学习,对于Linux下的LUKS加密有了更多认识。

CATALOG
  1. 1. goodluks1
  2. 2. goodluks2
  3. 3. goodluks3