Automne's Shadow.

WhiteHat Grand Prix 2018 Misc02 WriteUp

2018/08/23 Share

Misc

题目内容:

1534953900624

下载下来的文件是一个名为Hacker.iso的镜像文件。在Linux里使用mount进行挂载。

创建待挂载的目录:

sudo mkdir /mnt/disk

挂载镜像:

sudo mount –o loop Hacker.iso /mnt/disk

挂载后得到的目录结构如下,简单翻了一下,没什么关键信息。
1534953920322

Hint提示了saintgiong.jpg.pgp,可以想到这里有gpg加密。直接在010Editor找对应信息。很明显这就是加密信息。
1534953953372

但是要想解密还需要一个private key,那就只能继续在文件里搜,根据PGP Private Key的特点,关键字选择PRIVATE KEY BLOCK
1534953964228

可以看到这里的private key的格式是正常的,导出为private.key。
但是.pgp文件需要修改成如下形式才能正常使用gpg命令去处理,导出为message.pgp

-----BEGIN PGP MESSAGE-----
Version: BCPG v1.56

hI4D0zLiVvDuQpMQAfwJB2xNvUDbiinZHhOoxdk4JQWg3SvVsnprCNNl6bXWaXMN1PTyY2G3xs0g
3dnv7TV+dhCxZBBdomWoacCpUPpsAf9VAtQrRZBS+3rvOXF5MfP97aU7/PZCKHbaXSradsbGdawm
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

-----END PGP MESSAGE-----

使用gpg命令处理
导入private.key

gpg --allow-secret-key-import --import private.key

开始破解

gpg --decrypt message.pgp

但是问题哪有这么简单,提示需要密码。
1534953976699

猜测了各种弱密码无果之后,一度陷入僵局。到哪里找这个密码?那只能从挂载出的目录里翻阅可能遗漏的关键文件。通过foremost Hacker.iso提取出来了大量HTML文件,查看数据,发现是邮件内容,但是打开后基本都是乱码。

而且在etc/mail目录下发现了比较可疑的文件,其中让我更觉猫腻的就是private.asc里的内容就是上面分解出来的private.key内容。
1534953987012

于是我反编译了这个encrypt.pyc,终于看到了一个类似password的字符串,如获至宝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import struct
import sys
import base64
password_enc = 'JTd1XyoIbmc3PWhpOjhfVhsIbmcAAAAA'
if len(sys.argv) != 2:
print 'Usage: %s data' % sys.argv[0]
exit(0)
data = sys.argv[1]
padding = 4 - len(data) % 4
print padding
if padding != 0:
data = data + '\x00' * padding
print '**' + data
result = []
blocks = struct.unpack('I' * (len(data) / 4), data)
print blocks
for block in blocks:
result += [block ^ block >> 16]
print result

output = ''
for block in result:
output += struct.pack('I', block)
print output

print base64.b64encode(output)

但是还是不对,到这里又卡住了。后来在使用这个加密脚本加密随意一段字符串时才发现后缀基本是以AAAAAA结尾,这才反应过来,原来这是一串密文。。

网上搜了一下文件内容,发现这是Ekoparty_CTF_2015里的一道密码题加密脚本,对应找到其解密脚本,戳这里

解密后,终于我拿到了password

Phu_Dong_Thien_Vuong

然后使用上面的gpg命令解密并将结果导出为saint.jpg,就得到一张jpg图片。

驾轻就熟,根据outguess这个hint,就在Linux里编译安装,然后解析图片。
1534954001689

查看导出的result.txt内容,细心点就能发现每行首字母就是flag
1534954010426

最后将得到的字符串使用SHA1进行加密,包上WhiteHat{}外壳就是flag

flag

WhiteHat{05cc532353023d5954da9507e189a55296f6db97}
CATALOG