奇怪的文件 WriteUp

Author Avatar
ciaoly 2021年08月07日
  • 在其它设备中阅读本文章

难!难啊!简直是难!

参考文章: 纵横靶场工控安全wp:奇怪的文件。_Zhangyannn的博客-CSDN博客

分析

题目给出的附件文件名为“attachment1579407555bruteforce.zip”, 看起来是需要爆破, 没想到需要那么多爆破😥.

下载附件后, 解压发现有三个文件, 分别为: part1/part2/part3. 对于这种无后缀名的文件, 首先使用file工具和binwalk工具对文件进行结构的分析, 然而却没有任何可用的信息, file显示该系列文件均为"data", binwalk也没有识别出任何的文件特征.

使用Hex编辑器打开文件(我用的是Windows版应用HxD), 发现这些文件的文件魔数均为未知的.

从这三个文件名中进行猜测, 这三个文件可能跟压缩文件有关, 起初我想到的是"分卷压缩", 经过WriteUp大法才知道原来是一个压缩文件的三个部分

该系列文件的头部字节分别为:

file name header bytes
part1 03 04 14 00
part2 01 02 3F 00 14 00 01 00
part3 05 06

在part1文件的起始字节中可以猜测出, 该文件可能为zip压缩文件(文件魔数为 50 4B 03 04)4. 后续两个文件可能为zip文件的尾部数据,part2和part3分别为central directory(文件目录部分)和end of central directory record.(目录部分结尾标记) 5

修复压缩文件

使用Hex编辑器对三个文件进行文件补全, 并将part2和part3的依次追加到part1的最后. 将part1命名为part1.zip, 使用zip解压软件打开, 但是无法正常显示文件. 对part1和part2进行分析, 发现part1中缺少CRC校验值, part2中缺少文件名.

part1 part2
image-20210723100517121 image-20210723100540496
此处应为CRC校验值 此处应为文件名

通过对zip文件结构进行分析可以知道, 在part1中存在被压缩的文件名为KeyVisual.jpg, part2中存在压缩文件的CRC校验值0x34475650. 将该两者数据分别补全, 最终得到修复后的zip文件.

补全CRC校验 补全文件名
image-20210723100919561 image-20210723101542935

第一次爆破

该zip文件为加密压缩文件, 需要进行爆破. (爆破方法很多, kali下可以使用john 6. 另外由于没有任何提示, 爆破时可能需要生成无规则的字典. 本文使用Windows的工具进行破解)

在Windows下使用Advanced Archive Password Recovery工具对Zip文件进行破解, 破解模式选择"爆破(Brute force)", 勾选必要的密码元素(根据答案, 密码只包含大小写字母和数字, 因此勾选大小写字母和数字即可, 密码长度限制为7位). 最终获得密码GyxXaq9 (不看WriteUp的话想获得这个密码得猴年马月好嘛).

解压得到图片文件KeyVisual.jpg, 打开发现不存在flag相关信息.

第一次图片隐写

使用binwalk对该图片进行分析, 显示其是一张普通图片, 不存在其它部分;

使用strings KeyVisual.jpg | grep -i flag对该图片的Ascii字符进行查找, 未发现flag字样;

使用Stegsolve对该图片初步分析, 未发现隐写.

再次使用Hex编辑器打开该文件, 快速浏览该文件的ascii部分, 发现文件最后存在字符"KP". 进一步观察, 发现该文件的结尾字节为0x04 0x03 0x4B 0x50, 这恰好是zip文件的魔术的逆序. 编写PowerShell脚本, 对该文件的字节进行反转并输出.

$bytes = [System.IO.File]::ReadAllBytes(".\KeyVisual.jpg");
$bytes = $bytes[$bytes.Count .. 0];
[System.IO.File]::WriteAllBytes(".\new.zip", $bytes);

得到新的压缩文件new.zip, 对其进行解压, 但压缩软件提示"该压缩文件已损坏". 使用binwalk对其内容进行分析, 发现其存在多个zip压缩部分. 使用binwalk -e new.zip对该文件进行解包, 可得到文件"enc.pyc"和"encrypted". 根据文件名猜测前者可能为加密程序, 后者为已加密的文件.

解密文件

pyc文件为编译过的py脚本, 使用在线工具对该pyc文件进行反编译, 可得到该文件的python源代码.

# uncompyle6 version 3.5.0
# Python bytecode 3.6 (3379)
# Decompiled from: Python 2.7.5 (default, Aug  7 2019, 00:51:29) 
# [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
# Embedded file name: .\enc.py
# Compiled at: 2019-08-03 23:38:43
# Size of source mod 2**32: 627 bytes
import random, base64, sys

def KeyGenerate():
    random.seed(10)
    keyseed = ''
    for i in range(12):
        x = random.randint(32, 127)
        keyseed += chr(x)

    return base64.b64encode(keyseed.encode('utf-8')).decode('utf-8')

def enc(key, file):
    count = 0
    f = open(file, 'rb')
    f1 = open('encrypted', 'wb')
    for now in f:
        for nowByte in now:
            newByte = nowByte ^ ord(key[(count % len(key))])
            count += 1
            f1.write(bytes([newByte]))

if __name__ == '__main__':
    key = KeyGenerate()
    enc(key, sys.argv[1])

根据源码, 可以发现加密算法为异或运算, 加密密钥为随机生成, 但由于没有设置随机种子, 因此每次运行该脚本时的密钥实际上是一样的. 既为异或加密, 则解密与加密的算法和密钥相同. 修改上述python脚本, 将输出文件改名为'decrypted'(即将上述代码的第23行中的encrypted修改成decrypted), 使用该脚本对加密文件(encrypted)进行解密. 执行命令python3 ./enc.py encrypted

得到解密后的文件decrypted, 使用file查看该文件为图片文件; 使用binwalk发现该文件为普通图片, 不包含其它成分.

第二次图片隐写以及第二次爆破

找了很多方法,没能判断出该图片为LSB隐写。

(密码为U!lSb29)

参考: 纵横靶场工控安全wp:奇怪的文件。_Zhangyannn的博客-CSDN博客