WhaleCTF 隐写篇~

WhaleCTF 隐写篇~

    • Find
    • 被我吃了
    • 合体鲸鱼
    • 亚种
    • 下雨天
    • 这是什么
    • IHDR
    • 愤怒的小猪
    • 底片
    • 真是动图
    • 模糊的图片
    • 错误压缩
    • 最低位的亲吻

emmm这好像是之前写的一篇wp,,,,,
忘记发了,记录一下吧~

Find

图片另存为,使用stegsolve打开:
WhaleCTF 隐写篇~_第1张图片
扫码可得flag

被我吃了

图片另存为,用winhex打开,由于是jpg搜索FFD9:
WhaleCTF 隐写篇~_第2张图片
文末包含一个压缩包~
直接选择另存为一个新文件,解压可得flag:
在这里插入图片描述

合体鲸鱼

根据题目意思大概知道是binwalk了
直接丢kali里面binwalk或者foremost,分解出另一张图片
打开可以看见flag:
WhaleCTF 隐写篇~_第3张图片

亚种

直接图片另存为,查看属性可得flag:
WhaleCTF 隐写篇~_第4张图片

下雨天

图片另存,winhex查看为gif文件
该文件后缀名~丢进stegslove分解帧数可得:
WhaleCTF 隐写篇~_第5张图片

这是什么

根据提示,兔子脚下~
丢进winhex发现最下面有东西:
WhaleCTF 隐写篇~_第6张图片
直接进行Unicode转码,得到:
在这里插入图片描述

IHDR

根据提示IHDR,可能是修改高度,丢进winhex修改高度:
WhaleCTF 隐写篇~_第7张图片
得到:
WhaleCTF 隐写篇~_第8张图片

愤怒的小猪

另存为,steg打开:
WhaleCTF 隐写篇~_第9张图片
扫码可得flag!

底片

这道题目有点意思~ bmp的隐写~
另存为winhex打开发现是bmp文件~
使用工具wbStego4.3open进行解密:
WhaleCTF 隐写篇~_第10张图片
继续选择路径~
WhaleCTF 隐写篇~_第11张图片
WhaleCTF 隐写篇~_第12张图片
没有密码一直继续,保存文件自己选一个路径加文件名就好了
打开文本文档得到:
WhaleCTF 隐写篇~_第13张图片
但是提交一直错误~~ 套他的猴子!!!!!
难道下划线前面还有东西!!! 自己不会了,菜哭~~
查看了大佬的WP~~引用下大佬的话以及jio本:

由于图片是bmp类型,像素在图片中是倒叙存储,即以b,g,r的方式存储,而且当高度为正时图片中最后一行像素是存储在第一行的位置(对于正常二位坐标系,当以左下角为原点高度才会为正),用PIL的getdata读出的像素只是像素点在图片的相对位置,并非在文本文件的相对位置,所以以文本文件的方式读取图片

附上脚本python2:

bmpfi=open("nvshen.bmp","rb")
bmpstr=bmpfi.read()
bmpfi.close()

bfOffBits=int(bmpstr[13:9:-1].encode("hex"),16)
str1=""
for j in xrange(bfOffBits,len(bmpstr)):
 str1+=bin(ord(bmpstr[j]))[-1]
i=0
lst=""
while i

结果:
在这里插入图片描述
好菜啊!!!!

真是动图

用winhex打开发现缺少文件头,把文件头添加上去:
WhaleCTF 隐写篇~_第14张图片
然后变成GIF图片了,直接使用steg进行查看
由于有些字符可能有点看不清,须认真查看:
WhaleCTF 隐写篇~_第15张图片
得到字符串:Y2F0Y2hfdGhlX2R5bmFtaWNfZmxhZ19pc19xdWl0ZV9zaW1wbGU=
很明显是base64解密,得到:
在这里插入图片描述

模糊的图片

下载图片,模模糊糊好像能够看见一些字:
WhaleCTF 隐写篇~_第16张图片
通过steg进行一些操作查看之后~~
WhaleCTF 隐写篇~_第17张图片
ps又不会,,,,
模模糊糊才能看出点什么,,,,At10ISCC4_1Z__P_
还有几个字符不知道,,,,,
最后看了别人用PS调出来的图片,发现结果是:At10ISCC421ZLAPL
看了大神WP,发现还可以使用脚本跑出来>>>>>>>>抱歉真不会,,,,

借用大神脚本:

#coding:utf-8
import Image
img = Image.open('1.png')
X = img.size[0]
Y = img.size[1]
#print X,Y
for i in range(X-2):
 for j in range(Y-2):
   a = img.getpixel((i,j))[0]+img.getpixel((i,j))[1]+img.getpixel((i,j))[2]
   b = img.getpixel((i,j+1))[0]+img.getpixel((i,j+1))[1]+img.getpixel((i,j+1))[2]
   c = img.getpixel((i,j+2))[0]+img.getpixel((i,j+2))[1]+img.getpixel((i,j+2))[2]
   if (a > b and c > b) or (a < b and c < b):
     pass
   else:
     img.putpixel((i,j),(255,255,255))
img.show()

好像说运行完也能看见,,,,本地python2的PIL模块安装失败,
这个脚本就未进行验证了~ 也不知道行不行,就在这里先留个坑吧~~

错误压缩

是png图片,一套steg常规操作,,,并没有发现什么东西~
放进kali里面进行binwalk~~ zlib压缩数据有两个?
WhaleCTF 隐写篇~_第18张图片
用tweakpng查看一下png图片的详细信息:
WhaleCTF 隐写篇~_第19张图片
貌似是存在问题的,前面都是65524,后面一个45027,后面还有一个138?
这个138为什么不放到未满的45027里面???这138个数据有问题!
winhex走一波:
WhaleCTF 隐写篇~_第20张图片
取出CRC值前面的138个值,,,,,使用zlib模块
脚本:

import zlib

s = open('sctf.png', 'rb').read()[0x15AFFB:0x15B085]
data = zlib.decompress(s)
binstr = str(data)
print(binstr)

得到binstr:

1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011

得到一串01字符串~
一般CTF中01要么是ASCII码,当然这里肯定不可能了
要么就是二维码的01~ 查看一下长度为625,刚好是25的平方
直接进行转图片~
脚本:

from PIL import Image

s = "1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011"

x = 25			#width    #x坐标  通过对txt里的行数进行整数分解
y = 25 			#height    #y坐标  x * y = 行数
im = Image.new("RGB", (x, y))   #创建图片

k = 0
for i in range(0, x):
	for j in range(0, y):
		if(s[k] == '0'):
			im.putpixel((i, j), (255,255,255))    #将rgb转化为像素
		else:
			im.putpixel((i, j), (0,0,0))
		k += 1

im.save("flag.jpg")   #im.save('flag.jpg')保存为jpg图片

得到一张贼小的图片,,,,,放到扫码可得~~
WhaleCTF 隐写篇~_第21张图片

最低位的亲吻

看题目名字就觉得是lsb的隐写~
直接丢进steg:
WhaleCTF 隐写篇~_第22张图片
是不是觉得很像一个二维码~~这里肯定有问题
这里用的是一个骚操作~~~ 直接将原图用画图打开,另存为:
在这里插入图片描述
这里选择24位~ 保存下来,再用steg打开这个新的图片,get:
WhaleCTF 隐写篇~_第23张图片

你可能感兴趣的:(CTF题,WhaleCTF)