工控CTF_纵横网络靶场_奇怪的文件

简介: 工控CTF_纵横网络靶场_奇怪的文件

题目地址

https://game.fengtaisec.com/#/startQuestions/11


640.png

题目描述

在上位机中发现奇怪的文件,你能发现其中的秘密吗?flag形式为 flag{}


解题思路

下载压缩包,打开后是三个没有后缀名的文件,使用010打开查看

640.png

发现不是png,jpg格式,里面有个.jpg,可能是个压缩文件,里面压缩了一个jpg文件。经过查找文档,这个是确实是个zip文件,缺少了50 4b 也就是zip的常见标志:pk两个字符。三个文件是一个zip压缩包分成了三份

一个 ZIP 文件由三个部分组成:
压缩源文件数据区+压缩源文件目录区+压缩源文件目录结束标志

三个文件刚好分成了这三个部分

part1中CRC值缺失,可由part2中找到;part2中没有压缩文件名可由part1确定

三个文件part1-3分别就代表的zip的三个主要组成部分


压缩源文件数据区

打开一个完整的zip文件,,每个字节的含义逐个分析


640.png


压缩源文件数据区详解:

50 4B 03 04 (4 bytes)即为我们zip格式压缩文件的头文件标记。其中50 4B的ASCII对应的是PK,是创始人Phil Katz的缩写,可以用这个来识别zip格式压缩文件。实际上zip文件的各个部分都以这个为开头

0A 00(2 bytes)解压文件需要的pkware版本,部分也有14 00和14 03的。

00 00(2 bytes):全局定位标记,可以查看zip文件有无加密,有则为01 00,无则为00 00.如果没有设置密码,但我们把这个修改为了01 00则为俗称的伪加密

00 00(2 bytes压缩方式。有些也为08 00

C9 46(2 bytes):最后修改文件时间

36 53(2 bytes):最后修改文件日期

C0 71 DE A0(4 bytes):CRC-32校验码(0AED170C)

05 00 00 00(4 bytes):压缩后尺寸

05 00 00 00(4 bytes):  压缩前尺寸

05 00 (4 bytes):文件名长度。代表扩展记录长度后面,包含的压缩源文件名有几个字节。

00 00(2 bytes):扩展记录长度

31 2E 74 78 74 31(6 bytes):  和前面的05 00对应。可以看到右侧转换出来的即为我们zip文件中包含有1.txt文件


压缩源文件目录区详解:

50 4B 01 02(4 bytes):压缩源文件目录区的文件头标记。和数据区的不同即为01 02

3F 00(2 bytes):  压缩使用的pkware版本

0A 00(2 bytes):解压文件需要的pkware版本

00 00(2 bytes):全局定位标记,这里代表无加密

00 00(2 bytes):压缩方式。有些也为08 00

C9 46 36 53(4 bytes): 上次修改的时间、日期

C0 71 DE A0(4 bytes):CRC-32校验码(0AED170C)和part1的CRC-32效验码一样

05 00 00 00(4 bytes):压缩后尺寸

05 00 00 00(4 bytes):  压缩前尺寸

05 00 (2 bytes):文件名长度

24 00(2 bytes):扩展字段长度

00 00(2 bytes):文件注释长度

00 00 (2 bytes):磁盘开始号

00 00(2 bytes):内部文件属性

20 00 00 00(4 bytes):外部文件属性

00 00 00 00(4 bytes):局部头部偏移量

31 2E 74 78 74 31(6 bytes):  和前面的05 00对应。可以看到右侧转换出来的即为我们zip文件中包含有1.txt文件


压缩源文件目录结束标志详解:
50 4B 05 06(4 bytes):压缩源文件目录结束标志头

00 00(2 bytes):当前磁盘编号

00 00(2 bytes):目录区开始磁盘编号

01 00(2 bytes):本磁盘上记录总数

01 00(2 bytes):目录区中记录总数

57 00 00 00(4 bytes):目录区尺寸大小

00 28 00 00(4 bytes):目录区对第一张磁盘的偏移量

00 00(2 bytes):ZIP文件注释长度


参考:一个zip文件由这样三个部分组成

https://blog.csdn.net/wclxyn/article/details/7288994


把三个文件的文件头进行补全,都要补上 50 4B ,part1 中的01 00 表示文件加密

00 00 00 00 四个字节即为我们缺失的CRC-32校验码

part2 中34 47 56 50 为CRC-32效验码  填充到part1中

640.png


将part1中的文件名:keyvisual.jpg对应的16进制:4B 65 79 56 69 73 75 61 6C 2E 6A 70 67 8D补全到part2中:

640.png

part3中插入 50 4B

640.png


在010中将part2 和part3部分的16进制代码复制粘贴到part1部分的结尾


640.png

ctrl+s保存,给part1的文件名后面加上后缀.zip即可打开我们需要的zip文件:

640.png

有密码,看看是不是伪加密 把01 00 改为00 00 打开还是不行,说明需要爆破

也没有给提示,无脑爆破 ,直接wp破解出来  密码为GyxXaq9   解压后得到一张图片

640.png


使用010打开查看  ,开头标准的FF D8   jpg文件格式


在最后,发现 4B 50 ,猜测是 zip文件逆序

555a04555971626a5a05f447a36f254f.png

py脚本逆序读取文件

    f1=open('KeyVisual.jpg','rb+')f2=open('KeyVisual.zip','wb+')f2.write(f1.read()[::-1])f1.close()f2.close()

    得到一个KeyVisual.zip文件  进行解压, 存在有pyc文件,pyc文件反编译即为py文件

    python在线反编译:http://tools.bugscaner.com/decompyle/

    得到一个py文件 是一个进行加密的py文件 ,加密后的文件为encrypted

    415003004bb3ea4d1af91759e75cffb5.png

    我们可以修改构建解密算法enc1.py

    1

    key生成函数中定义了种子始终为10,所以加解密使用的key都一样,为aSRWXWkhOlteQ3M0

    2

    查看算法为异或,即加解密使用的算法应当一样,直接再次调用加密函数即可解密


    25972c842129534bcee789af8921a96b.png


    对encrypted加密文件解密,得到dncrypted文件

    d629026e66aa88a9e57957657e6df42c.png


    使用010打开,发现是一张png图片 ,加后缀为.png

    d7cd98e259f934559987c54f7835a0e1.png

    修改后打开发现还是原来那张图片

    7e70acafe612a58efcdb0212c0606e98.png


    发现该图片有LSB隐写,但隐写信息加密

    563cf0585e9623145df96a0a1aa1a0a3.png

    猜测是弱密码 使用123456尝试 解密失败,直接看手wp:发现密码为7位大小写字母+数字+特殊符号的密码爆破

    密码:U!lSb29  这

    使用工具cloacked-pixel进行解密

    e2311b307013e7a8ad019b214d57bf76.png

    释放出一个jpg文件

    ce744c53655cf0f8e09002cd4b2059e1.png

    肉眼识别出flag:flag{2ceuagIha7v8mlfod9uas1d86wqer0}

    相关文章
    |
    28天前
    |
    Shell Linux C语言
    【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
    【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
    29 0
    |
    4月前
    |
    XML Java Android开发
    Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
    Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
    132 0
    |
    7月前
    |
    存储 Java UED
    Java网络编程:实现文件断点续传功能
    文件下载是网络应用程序中的常见任务,而断点续传是提供更好用户体验的重要功能之一。本文将详细介绍如何使用Java实现文件断点续传功能,使用户能够在下载中断后从上次中断的地方继续下载。
    156 0
    |
    7月前
    |
    分布式计算 Java 测试技术
    Java网络编程实战:P2P文件共享详解
    Java网络编程是现代软件开发中不可或缺的一部分,因为它允许不同计算机之间的数据传输和通信。在本篇博客中,我们将深入探讨Java中的P2P文件共享,包括什么是P2P文件共享、如何实现它以及一些相关的重要概念。
    278 0
    |
    7月前
    |
    Windows
    Windows基础命令(目录文件、文本、网络操作)
    Windows基础命令(目录文件、文本、网络操作)
    34 0
    |
    1月前
    |
    存储 测试技术 C++
    P2P网络下分布式文件共享场景的测试
    P2P网络下分布式文件共享场景的测试
    32 6
    |
    5月前
    |
    Java
    java代码实现使用网络地址下载文件
    java代码实现使用网络地址下载文件
    |
    7月前
    |
    Java 网络安全 API
    Java网络编程:实现远程文件访问与管理
    Java是一门强大的编程语言,具有广泛的网络编程功能。在本篇博客中,我们将深入探讨如何使用Java编写应用程序,实现远程文件访问和管理。这是一个有趣且实用的主题,特别适合那些希望构建网络文件系统、实现文件共享或进行远程文件操作的开发人员。
    143 0
    |
    2月前
    |
    编解码 文件存储 计算机视觉
    YOLOv5改进 | 2023Neck篇 | BiFPN双向特征金字塔网络(附yaml文件+代码)
    YOLOv5改进 | 2023Neck篇 | BiFPN双向特征金字塔网络(附yaml文件+代码)
    190 0
    |
    3月前
    |
    网络协议 安全 Shell
    【网络协议】网络文件共享协议SMB(Server Message Block)
    SMB协议允许在局域网(LAN)或广域网(WAN)上共享文件、打印机和其他资源。
    46 0