文件问题基本的操作
1、文件头的确认
例题ctf show
010editor打开 看一眼文件头是 png 改了结束
2、不同图片格式的打开
这个题就是信息差
一眼bpg 这是什么呀 没见过啊 这个时候你就需要一个 honyview工具 (文末我会全部给)
图片的隐写(附加信息类)
1、根据图片的类型
bpg类型 这类图片 大多就是工具直接打开就出了
honeyview工具 ctf show 练习题
2、信息的附加
1、附加在文件尾部
这种直接010editor打开 翻到最末尾就出来了
这种的难度很小 一般是不会这么搞
2、附加在ascii文中
这种直接 010editor 打开 ctrl+f搜寻就行 因为这是ctfshow的题所以我就搜 c 如果是别的你就可以搜前几个字母 建议只搜一个 因为有时候会搞你
当然还有第二个方法 就是字符串的提取 使用kali自带的strings 直接拿下
3、异常的附加模式
先搜了 c 没有 搜了 S没有 搜了 B没有 因为是愚人节的题直接搜索 F001试一下 (为什么想到这个 正常不应该是 fool吗 这是个HEX 直接搜索)
这个就比较鸡贼了
png文件的隐写
下边有些独属于png的解法
1、 图片里藏图片
工具 kali的 binwalk 可以检测文件内的隐写 binwalk -e 是进行分离
这边我推荐 进入 kali的命令行最好不要使用root 会出现很多的毛病
但是现在这个不能使用binwalk 而是使用 foremost(需要下载) 为什么呀?只有这个foremost才能分离图片
输出之后会出现一个 output 里面的png文件夹存着去除的png
2、png的数据块问题
两个类型:1、少数据块 2、多数据块
1、
题目说 在块里
PNG格式解析
很有疑问的看看上边的大哥的文章了解一下就行
这个大家想到这个IDAT就行 这个是储存图像数据的
工具:tweakpng
打开是这样的 一看 两个IDAT数据块
多个数据块的问题 现在这个是 需要分离的 如果分不出来就需要换个思路(把数据合在一起再分离)
直接开binwalk梭哈
发现两个 zlib 那大家可能疑问唉?这个zlib是什么意思呀 这个就是数据的压缩形式说明有数据
分离的文件夹拉出来 记事本打开 拿下
ctfshow{353252424ac69cb64f643768851ac790}
少数据块第二个练习题
这个大家记住 png我们先使用weakpng打开看一番再说
和上边一样的类型直接 binwalk 搞发现没出东西 那怎么办呀 ?不是两个数据嘛 删一个试试
删除一个再直接F7查看
拿下了 这个可能就是图片覆盖问题
2、多个数据块的问题
一打开我你妹的什么情况 密密麻麻的一群 大家有没有发现一个细节就是这些IDAT都很小呀
那我们直接给合起来再分解试一试 是不是思路嘛
试了一下不行啊分解出来的是乱码
那就试试是不是也是数据块的覆盖
我们拿中间 就是 3149-41=3108 接着就是进行删除 因为
合起来的IDAT是 10801 但是这个3149 就差了很多吧这些删除就是 隐藏的了
不用数了删除前八个就出来了
3、png 的extradata:0 错误
工具 :zsteg (这个不应该在这边说的 这个是个很好的LSB辨别工具) (这个是看的大佬的解法)
直接拿下
结合binwalk 继续分离
出来了
详细信息的提取
这个就是 直接右键属性 详细信息自己看
EXIF隐藏
在说这个之前 先康个 19题
这个有意思 就是上来一看 一个tif文件很害怕呀 什么情况啊
未知的文件直接放随波逐流就行了虽然现在很多的题都有一些东西阻断随波逐流的判断但是这个依旧是超标
工具在文末
exif是什么? 我简单点说就是可交换文件格式(说人话就是 对图片加上标签)(很容易隐藏一些关键的信息)
这个题 简单的exif就直接使用 viewhony看就行了
但是 我要介绍一个工具 exiftool 直接加文件名
序列号其实也是exif的一类
直接上工具
试了一下不行 那就分别提取 X Y的序列
3902939465、2371618619、1082452817、2980145261
然后就是转进制 我先试了一下 ascii直接鸡鸡 然后就转16进制成功
ctfshow{e8a221498d5c073b4084eb51b1a1686d}
时间戳
什么是时间戳 顾名思义是一种针对时间的加密方式
正好这个 说flag在时间里 先 exiftool 一下
拿到时间了 转为时间戳 1997:09:22 02:17:02, 2055:07:15 12:14:48, 2038:05:05 16:50:45, 1984:08:03 18:41:46(使用ctfshow)
注意时间的编写
要把:替换为 - (只替换年月日)
874865822 2699237688 2156662245 460377706
这个就是转换后的( 借用一下大哥的脚本) 转hex加 ctfshow就完事了
x1='874865822' x2='2699237688' y1='2156662245' y2='460377706' jx=(hex(int(x1,10))[2:]) jg=(hex(int(x2,10))[2:]) wjg=(hex(int(y1,10))[2:]) wgj=(hex(int(y2,10))[2:])
print('ctfshow{'+jx+jg+wjg+wgj+'}')
总结:
ctf重在思路 还请做题之前保持清醒的做题状态