Rock's blog

兴趣是最好的老师

0%

xctf-misc-wp

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 高手区题解

12.恶臭的数据包

持续更新中……