0x00 前言

在安全的大趋势下,信息安全越来越来受到国家和企业的重视,所以CTF比赛场次越来越多,而且比赛形式也不断的创新,题目也更加新颖有趣,对选手的综合信息安全能力有一个较好的考验,当然更好的是能从比赛有所收获,不断学习和总结提升自己的信息安全能力与技术。转到CTF比赛上,通常在CTF比赛中常有与隐写术(Steganography)相关的题目出现,这里我们讨论总结图片隐藏文件分离的方法,欢迎大家补充和交流:P

0x01 分析

这里我们以图片为载体,给了这样的一样图片:

首先我们需要对图片进行分析,这里我们需要用到一个工具 binwalk ,想要了解这个工具可以参考这篇 Binwalk:后门(固件)分析利器 文章,以及 kali官方对binwalk的概述和使用介绍 。

这里我们就是最简单的利用,在binwalk后直接提供固件文件路径和文件名即可:

# binwalk carter.jpg

当我们使用这行命令后,binwalk就会自动分析这个jpg文件:

# binwalk carter.jpg

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.01
382 0x17E Copyright string: "Copyright (c) 1998 Hewlett-Packard Company"
3192 0xC78 TIFF image data, big-endian, offset of first image directory: 8
140147 0x22373 JPEG image data, JFIF standard 1.01
140177 0x22391 TIFF image data, big-endian, offset of first image directory: 8

从上面的内容显然看得出来这个jpg文件还隐藏着另一个jpg文件,从140147块偏移开始就是另一张jpg。

0x02 分离

在得到隐藏信息之后我们下一步就是把另一张jpg分离出,以下讨论几种方法:

(1)使用dd命令分离(linux/unix下)

我们可以使用dd命令分离出隐藏文件:

# dd if=carter.jpg of=carter-1.jpg skip=140147 bs=1

可以参考 dd命令详解 ,这里if是指定输入文件,of是指定输出文件,skip是指定从输入文件开头跳过140147个块后再开始复制,bs设置每次读写块的大小为1字节 。

最后我们可以得到这样的一张carter-1.jpg图片:

(2)使用foremost工具分离

foremost是一个基于文件文件头和尾部信息以及文件的内建数据结构恢复文件的命令行工具,win可以下载地址,Linux可以

通过下面命令安装使用:

# apt-get install foremost

安装foremost后你可以使用foremost -help查看使用帮助,这里最简单分离文件的命令为:

# foremost carter.jpg

当我们使用这行命令后,foremost会自动生成output目录存放分离出文件:

(3)hex编辑器分析文件

至于hex编辑器有很多,win下有用得较多的winhex,UltraEdit等,linux下有hexeditor等,这里我们以winhex为例手动分离,在分离之前我们需要知道一点关于jpg文件格式的知识,jpg格式文件开始的2字节是图像开始SOI(Start of Image,SOI)为FF D8,之后2个字节是JFIF应用数据块APPO(JFIF application segment)为FF E0 ,最后2个字节是图像文件结束标记EOI(end-of-file)为FF D9 ,如果你想详细了解更多关于这方面的知识可以参考jpg文件格式分析一文。

用winhex打开图片,通过Alt+G快捷键输入偏移地址22373跳转到另一张jpg的图像开始块,可以看到FF D8图像开始块。

而图像结束块FF D9

选取使用Alt+1快捷键选取FF为开始的块,Alt+2选取D9为结束块,然后右键->Edit->Copy Block->Into New File保存相应的文件后缀,例如new.jpg

0x03 其他

还有一种特例,它是事先制作一个hide.zip,里面放入隐藏的文件,再需要一张jpg图片example.jpg,然后再通过命令 copy /b example.jpg+hide.zip output.jpg生成output.jpg的新文件,原理是利用了copy命令,将两个文件以二进制方式连接起来,正常的jpg文件结束标志是FF D9,而图片查看器会忽视jpg结束符之后的内容,所以我们附加的hide.zip就不会影响到图像的正常显示。(参考AppLeU0的 隐形术总结 )

针对这种特例我们可以直接将jpg文件改为zip文件后缀(其他文件如rar文件也类似),就可以看到hide.zip压缩包里隐藏的文件。

比如当我们得到一张wh3r3_is_f14g.jpg文件:

当我们用winhex打开文件,发现wh3r3_is_f14g.jpg文件最后数据块不是FF D9 jpg文件的结束标志,而是zip文件的结束标志。

我们直接将文件改名为wh3r3_is_f14g.zip,打开得到flag.txt。

最后打开flag.txt得到flag。

0x03 后话

图片隐写方式有很多种,在此只介绍了这一种,如果以后有机会会写其他的图片隐写,如果对隐写感兴趣这里推荐一本机械工业出版社的《数据隐藏技术揭秘:破解多媒体、操作系统、移动设备和网络协议中的隐秘数据》,如果你不想购买实体书,可以 下载pdf版 。

这里我把所有图片打包了zip,如果有需要自行下载吧: P

Steganography_Pictures.zip

转自:https://www.hackfun.org/learnrecords/summary-of-image-hiding-files-in-CTF.html

CTF中图片隐藏文件分离方法总结的更多相关文章

  1. CTF中图片隐藏文件分离方法

    CTF中图片隐藏文件分离方法   0x01 分析 这里我们以图片为载体,给了这样的一样图片:2.jpg 首先我们需要对图片进行分析,这里我们需要用到kali里面的一个工具 binwalk ,想要了解这 ...

  2. 隐写-CTF中图片隐藏文件分离方法总结

    0x00 前言 在安全的大趋势下,信息安全越来越来受到国家和企业的重视,所以CTF比赛场次越来越多,而且比赛形式也不断的创新,题目也更加新颖有趣,对选手的综合信息安全能力有一个较好的考验,当然更好的是 ...

  3. 使用find命令查找Linux中的隐藏文件的方法

    我们可以在Linux 或者 Unix 系统上使用 find 命令去查询所有(全部)隐藏文件 基本语法如下: 复制代码 代码如下: [root@dabu.info ~]#find /要查找的文/件/夹/ ...

  4. CSS中图片水平垂直居中方法小结

    写页面时难免会遇到水平垂直居中的问题,总结一下最近使用的方法. 一.使用垂直居中和水平居中 <div id="div1"> <img src="img/ ...

  5. ctf中检测和分离隐藏的文件

    使用binwalk检测是否隐藏了文件 root@sch01ar:~# binwalk '/root/桌面/test.jpg' 还藏了一个zip文件,接下来用foremost来分离文件 root@sch ...

  6. Silverlight 中图片路径的设置

    在Silverlight中图片的设置方法有几种 如上图在一个工程中有个images文件夹,buttons.xaml页面中的Image控件要引用一张图片 第一种方法 xaml: <Image x: ...

  7. IOS中图片拉伸技巧与方法总结(转载)

    以下内容转载自:http://my.oschina.net/u/2340880/blog/403996 IOS中图片拉伸技巧与方法总结 一.了解几个图像拉伸的函数和方法 1.直接拉伸法 简单暴力,却是 ...

  8. PHP限制HTML内容中图片必须是本站的方法

    本文实例讲述了PHP限制HTML内容中图片必须是本站的方法.分享给大家供大家参考.具体实现方法如下: 1. PHP代码如下: <?php $dom = new DOMDocument; $dom ...

  9. 解决PNG图片在IE6中背景不透明方法_解决IE6中PNG背

    解决PNG图片在IE6中背景不透明方法_解决IE6中PNG背   目录 解决代码 解决png图片在html中 解决png作为网页背景-css 1.解决PNG图片在IE6中背景不透明的CSS与JS代码 ...

随机推荐

  1. java在的数据类型

    java数据类型的划分 程序的本质=数据的处理: 数据库的本质=数据的存储. java之中数据类型一共分为两大类. ·基本数据类型: 数值型: 整型:byte,short,int,long 默认值都是 ...

  2. 安装WIA组件

    下载地址: http://pan.baidu.com/s/1bnGU5Nx 安装方法: 将下载后的WIAAutSDK.zip解压,复制wiaaut.dll到C:\Windows\System32,注册 ...

  3. Educational Codeforces Round 21 A-E题题解

    A题      ............太水就不说了,贴下代码 #include<string> #include<iostream> #include<cstring& ...

  4. Docker快速入门

    Docker已经火了很长一段时间,最近打算在阿里云上好好熟悉一下Docker的相关应用,为今后的工作做准备. 基本概念 Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是do ...

  5. CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划)

    CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划) Description 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的 ...

  6. 微信小程序多宫格抽奖

    最近闲来无事,做了一个多宫格抽奖的例子,有什么需要改进或者错误的地方,请留言,谢谢 首先看效果 思路是先让其转动2圈多,然后再进行抽奖,格子运动用的是setTimeout,让其运行的时间间隔不一样,然 ...

  7. docker~Dockerfile优化程序的部署

    回到目录 一些理论 我们都知道docker这个容器工具可以帮助我们快速进行环境的部署,这对于运营人员来说,无疑是个福音,而这个工作大叔认为不应该是运营人员干的,而是由开发人员来做,因为只有你知道你干的 ...

  8. OI内的排列与组合(简单版)

    §1基本原理 △让我们来看下面问题: 从甲地到乙地,可以乘火车,也可以乘汽车,还可以乘轮船.一天中,火车有4班,汽车有2班,轮船有3班.那么,一天中乘坐这些交通工具从甲地到乙地共有多少种不同走法?△分 ...

  9. Ext.Component事件

    组件类提供了许多生命周期事件.当组件创建时,这些激活,渲染,销毁等等事件被激活.所有这些事件都可以通过使用监听器属性或使用on方法来进行处理.大多数这些生命周期事件实际上都是在ext.abstract ...

  10. mysql导出指定字段或指定数据到文件中

    使用mysqldump把mysql数据库的数据导出到文件中还是挺方便的:比如说要导出baijunyao数据库: // mysqldump -u用户名 -p 数据库名 [表名]> 导出的文件名 m ...