NKCTF-misc

作者 by Yichen / 2023-08-11 / 暂无评论 / 20 个足迹

eazy_word

小明这个笨蛋,给文档设置了一个密码,但是他自己却忘记了密码,他知道以下信息:
密码是数学和小写英语、大写英语的随机生成的
hash函数:
输出大小 256 bits 内部大小 256 区块大小 512 长度大小 64 字符尺寸 32
密码:h??vO??0 (?号部分为小明已经忘记的位置)
哈希:b75d1224 ... (后面不记得了...)
flag.docx
题目卡在第一步因为是word没法进行爆破,不会算密码。。。看了wp里的脚本是这样的:

from itertools import product
from string import *
from hashlib import sha256


pop = "b75d1224"
base="h%s%svO%s%s0"
ready = ascii_letters + digits


for i in product(list(ready),repeat=4):
    s = base % (i[0],i[1],i[2],i[3])
    hash = sha256(s.encode()).hexdigest()
    if pop in hash:
        print(s)

最终会算出两个密码:heZvOpx0,h4evOF90第二个是对的
然后打开word取消掉加密,之前看到过一篇文章,大概是说word和zip的本质差不多,所以将word的后缀改成zip真的找到一张图片
1680081619710-4b8b2956-9917-4661-8813-d394b44016ef.png
对于这个图片的处理学到了一个新工具cloacked-pixel在kali上基于python2的隐写工具使用方法如下:
加密:
python lsb.py hide big.png 1.txt 123456
ps: hide:表示加密模式; big.png:待加密的png图片; 1.txt:存放payload; 123456:加密的密码
解密:
python lsb.py extract big.png-stego.png 3.txt 123456
ps: extract:表示解密模式; big.png-stego.png:待解密的png图片; 3.txt:存放导出的payload; 123456:解密密码
分析:
python lsb.py analyse big.png-stego.png
ps: analyse:表示分析模式; big.png-stego.png:待分析的png图片; 运行后会对图像进行分析,将其分割成块,标记每个块的最低有效位
最后在kali运行一下python lsb.py extract 1.png -stego.png 3.txt Welcome_to_NKCTF
密码就是图片上的key
可以得到NKCTF{dc0684dd-5a57-4d47-b9c0-debed0ef28b9}

三体

1680080021211-39f15a4b-b590-4315-852e-563c6a874650.bmp
这张图可以在stegsolve里看一下,r通道无图,猜测为bg通道的lsb隐写,在stegsolve工具里没有提取到,但kali可以,最终官方wp给的是脚本提取,对于脚本还是有些无力,不熟悉库和函数,下面是最终可用的脚本
方法一

from itertools import product
from string import *
from hashlib import sha256


pop = "b75d1224"
base="h%s%svO%s%s0"
ready = ascii_letters + digits


for i in product(list(ready),repeat=4):
    s = base % (i[0],i[1],i[2],i[3])
    hash = sha256(s.encode()).hexdigest()
    if pop in hash:
        print(s)

最终获得1680080264964-0224dd44-9035-4c99-8e32-af24a2f547bf.png
一个txt文本找到flag
方法二
因为初步判断是lsb隐写所以打开kali使用zsteg -a 文件名 (查看各个通道的lsb)的命令查询
1680080492497-ebf37860-8774-4d89-8708-8566082b2481.png
发现b8,b,lsb,Xy通道有倒序的不完整的flag,用zsteg -a 1.bmp -E b8,b,lsb,Xy > flag.txt命令保存为文本再使用strings命令查询可打印字符串获得如图
1680080693373-5b72746b-7471-40a6-aa1e-5aef89b3f6c3.png
找到完整flag

独特见解