BugkuCTF-Misc(1)
可以看到。题中已经给出了密码的格式,所以选择字典爆破,首先用crunch生成字典,教程在这里。
1 |
|
再使用aircrack-ng跑字典:
1 |
|
最终得到结果
先用stegsolve查看图片,可以看到有YSL字样,结合图片的名字和内容,基本可以确定这道题和口红色号有一定关系。本来笔者以为色号是flag的ascii码,但看了大佬的wp才发现图片中还有LSB隐写的一个压缩文件
可以看到zip文件头了,提取出来解压,发现需要密码,而且不是伪加密。大佬的wp上说密码就是色号的二进制转字符串。所以说现在需要做的就是找到这些颜色的色号。
对于这个色号的抓取,有大佬写了python脚本,但笔者的准则就是能简单就简单,所以我选择直接curl+grep的方式。首先要写一个正则表达式匹配色号。
html源码中,与色号有关的是下面的代码
因此我们为它量身定制的正则表达式是这样的
1 |
|
提取色号与相应颜色码的命令是这样的(grep命令实在是渣渣,所以笔者找了一个对正则表达式适配更好的命令ack)
1 |
|
至此,我们已经找到了十六进制颜色码和对应的色号,但革命尚未成功,同志仍需努力。我们还需要把图片中的颜色和这个文件进行对比得到答案。这里除了python脚本我实在是想不出更好的办法了,脚本如下:
from PIL import Image, ImageColor import numpy import yaml from colormap import rgb2hex if __name__ == "__main__": with open('colors.yaml', 'r') as file: color = yaml.load(file) with Image.open('flag.png') as img: content = numpy.array(img) j = 250 for i in range(75, 3075, 150): rgb = content[j, i] try: hex_color = rgb2hex(rgb[0], rgb[1], rgb[2])[1:7] print(color[hex_color], end="") except KeyError: print('N', end="") print(" ", end="")
程序输出如下
可以看到有两个色号不全,可能是时间过于久远。正确的色号如下
来自http://virgin-forest.top
然后找在线工具转换即可。