1.low
通过python提取图像的最低有效位组合成图像,发现是二维码。
from PIL import Image
img = Image.open("/root/Downloads/low.bmp")
lsbImg = img.copy()
pix = lsbImg.load()
width = img.width
height = img.height
for w in range(width):
for h in range(height):
if pix[w,h] & 0x01 == 1:
pix[w, h] = 0
else:
pix[w, h] = 255
lsbImg.save("/root/Downloads/_low.bmp")
2.信号不好先挂了
使用zsteg检测图像,发现存在lsb隐写。使用Stegsolve提取隐藏的压缩文件,解压出一张同样的png图像pen.png
。
之后思路中断,查找答案后得知可以从盲水印方向考虑。
使用BlindWaterMark
提取盲水印
./bwm.py decode apple.png pen.png applepen.png
3.Ditf
打开图像发现报CRC32校验错误,判断图像人为修改过高度。
尝试使用脚本爆破正确高度,未果。
import binascii, struct
fObj = open("/root/Downloads/e02c9de40be145dba6baa80ef1d270ba.png", "rb")
png = fObj.read()
fObj.close()
crcOri =int.from_bytes(png[0x1D:0x20],byteorder='big',signed=False)
nowHeight = int.from_bytes(png[0x10:0x14],byteorder='big',signed=False)
maxHeight = 4096
for h in range(nowHeight, maxHeight):
data = png[0xC:0x14] + struct.pack(">i",h) + png[0x18:0x1D]
crcNew = binascii.crc32(data)
if crcNew == crcOri:
print(h)
break
尝试使用tweakpng
手动修改高度,成功看到隐藏信息。
使用binwalk检测图像,发现隐藏rar文件,使用foremost提取。猜测密码即为隐藏信息。成功解压。
解压后分析流量,导出http对象,找到可疑字符串。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <img src="/kiss.png" /> ZmxhZ3tPel80bmRfSGlyMF9sb3YzX0ZvcjN2ZXJ9 </body> </html>
base64解码,得到flag。
4.签到题
base64->栅栏->凯撒
5.Excaliflag
Stegsolve查看蓝色通道
6.Avatar
使用outguess
提取图像中的隐藏信息。
https://github.com/resurrecting-open-source-projects/outguess.git
outguess -r 035bfaa85410429495786d8ea6ecd296.jpg -t hi.txt
7.Miscellaneous-200
初步判断txt文件内为61366行RGB像素值,编写脚本判断图像长宽并绘制图像。
from PIL import Image
fObj = open("/root/Downloads/62f4ea780ecf4e6bbef5f40d674ec073.txt", "r")
pixList = []
for line in fObj.readlines():
line = line[:-1:]
pix = line.split(',')
_pix = []
for p in pix:
_pix.append(int(p))
pixList.append(tuple(_pix))
fObj.close()
length = len(pixList)
width = int(length ** 0.5)
wList = []
hList = []
for w in range(3,width):
if length // w * w == length:
wList.append(w)
hList.append(length // w)
for i in range(len(wList)):
img = Image.new("RGB", (wList[i], hList[i]))
for j in range(wList[i]):
for k in range(hList[i]):
img.putpixel((j,k), pixList[j*hList[i]+k])
img.save("/root/Downloads/" + str(wList[i]) + "*" + str(hList[i]) + ".png")
for i in range(len(hList)):
img = Image.new("RGB", (hList[i], wList[i]))
for j in range(hList[i]):
for k in range(wList[i]):
img.putpixel((j,k), pixList[j*wList[i]+k])
img.save("/root/Downloads/" + str(hList[i]) + "*" + str(wList[i]) + ".png")
其中得到503×122的正确图像。
PIL相关知识链接
1.Python图像处理PIL各模块详细介绍
2.PIL图像处理之Image
8.Miscellaneous-300
发现zip压缩包内的文件名即为解压密码,编写脚本解压。
import zipfile
filePath = "/root/Downloads/zip/"
zipFileName = "/root/Downloads/f932f55b83fa493ab024390071020088.zip"
zipFile = zipfile.ZipFile(zipFileName)
fileName = zipFile.namelist()[0]
zipFile.extractall(filePath, pwd=fileName.split(".")[0].encode())
while fileName != "73168.zip":
zipFileName = filePath + fileName
zipFile = zipfile.ZipFile(zipFileName)
fileName = zipFile.namelist()[0]
print(fileName)
zipFile.extractall(filePath, pwd=fileName.split(".")[0].encode())
解压出1500多个压缩包后,解压报错,发现最新的压缩包内含mess.wav。
尝试爆破该压缩包,发现密码为5位。
用Audacity
分析解压出的mess.wav,频谱图中含有flag。
9.Py-Py-Py
查阅wp知道,此题目通过将payload隐藏在pyc字节码文件中,且该隐藏方式不会更改pyc文件的运行和大小。
./stegosaurus ~/Downloads/58cadd8d8269455ebc94690fd777c34a.pyc -x
相关资料:
1.一文让你完全弄懂Stegosaurus
2.https://github.com/AngelKitty/stegosaurus.git
10.传感器1
查阅wp得知,此题考察曼彻斯特编码与差分曼彻斯特编码。编写脚本尝试解码。
def decode(cipherText):
c = bin(int(cipherText[2:],base=16))
d = ""
i = 2
while i < len(c):
if c[i] != c[i-1]:
d += "0"
else:
d += "1"
i += 2
return int(d, base=2)
cipherText1 = "3EAAAAA56A69AA55A95995A569AA95565556"
cipherText2 = "3EAAAAA56A69AA556A965A5999596AA95656"
print("%0x" % decode(cipherText1))
print("%0x" % decode(cipherText2))
相关资料:
曼切斯特编码和差分曼切斯特编码
11.mysql
不是特别懂
攻防世界———MISC 高手区题解