关于 DreamCat

主题名称:DreamCat | 版本:3.0.260502

主题开发:HanFengA7 | CornWorld

Designed by HanFengA7 Power by Typecho

Copyright © 2015-2026 by LychApe All rights reserved!

menu
refresh
外观设置
主题色
强调色
夜间模式

奇怪的文件 WriteUp

作者: ciaoℒy

时间:

难!难啊!简直是难!

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

分析

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

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

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

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

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

file nameheader bytes
part103 04 14 00
part201 02 3F 00 14 00 01 00
part305 06

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

修复压缩文件

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

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

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

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

第一次爆破

该zip文件为加密压缩文件, 需要进行爆破. (爆破方法很多, kali下可以使用john 3. 另外由于没有任何提示, 爆破时可能需要生成无规则的字典. 本文使用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博客

info_icon
#本文链接:https://blog.chaol.top/archives/39.html
#本文采用 CC BY-NC-SA 4.0 协议进行许可
#如无特别声明,该文章均为 ciaoℒy 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0)协议,即转载请注明文章来源。
#最后编辑时间为: 2021 年 08 月 07 日
WriteUp
none
create 添加新评论
account_circle
email
language
textsms
加我的QQ
加我的微博
加我的支付宝
加我的微信