BugkuCTF-Misc(1)


一.想蹭网先解开密码

可以看到。题中已经给出了密码的格式,所以选择字典爆破,首先用crunch生成字典,教程在这里

1
crunch 11 11 0123456789 -t 1391040%%%% >> word.txt

再使用aircrack-ng跑字典:

1
aircrack-ng flag.cap -w word.txt

最终得到结果

二.多彩

先用stegsolve查看图片,可以看到有YSL字样,结合图片的名字和内容,基本可以确定这道题和口红色号有一定关系。本来笔者以为色号是flag的ascii码,但看了大佬的wp才发现图片中还有LSB隐写的一个压缩文件

可以看到zip文件头了,提取出来解压,发现需要密码,而且不是伪加密。大佬的wp上说密码就是色号的二进制转字符串。所以说现在需要做的就是找到这些颜色的色号。

对于这个色号的抓取,有大佬写了python脚本,但笔者的准则就是能简单就简单,所以我选择直接curl+grep的方式。首先要写一个正则表达式匹配色号。

html源码中,与色号有关的是下面的代码

因此我们为它量身定制的正则表达式是这样的

1
(?<=<span class="swatch_color" style="background-color: #)\S{6}" title="\d*?(?= )

提取色号与相应颜色码的命令是这样的(grep命令实在是渣渣,所以笔者找了一个对正则表达式适配更好的命令ack)

1
curl https://www.yslbeautyus.com/makeup/lips/lipsticks/rouge-pur-couture-lipstick/194YSL.html?dwvar_194YSL_color=1%20Le%20Rouge  ack -o '(?<=<span class="swatch_color" style="background-color: #)\S{6}" title="\d*?(?= )'  sed 's/" title="/: /g' >> colors.yaml

至此,我们已经找到了十六进制颜色码和对应的色号,但革命尚未成功,同志仍需努力。我们还需要把图片中的颜色和这个文件进行对比得到答案。这里除了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

然后找在线工具转换即可。


← Prev OtherCTF-Misc(2) | base64隐写的一种解决办法 Next →