CTF-Misc "雅"题共赏
用这篇博客来记录一下本人在比赛中遇到的一些疑难题(本人尚未解出的题)
如果师傅们有进一步的想法或者做出来了,可以联系我一起交流一下解题思路
这篇博客可以算是本人的求助贴,因此本文中的大部分内容并不适合刚接触Misc方向的新同学
尝试本文中提到的相关题目可能会耗费大量时间,请各位读者量力而行【慎行】
[SOLVED] 题目名称 nothing (2024 蓝桥杯全国总决赛)
题目附件: https://pan.baidu.com/s/1eGIfajRXx3uqjlk54CaZ1g?pwd=ax6g 提取码: ax6g
下载附件,得到一个noting.zip
,打开发现是DOCX的结构
因此改后缀为.docx并打开,发现有一张白色的图片,还有一段白色的文字:什么都没有
可以把DOCX作为ZIP解压,然后直接从noting\word\media
路径中把这张白色图片image1.png
提取出来
图片的大小是34x34,我们把图片分通道提取出来,猜测存在LSB隐写
仔细观察各通道的数据,发现RGBA的0通道中都隐写了信息
RGBA里面都有LSB的数据,按道理来说一共就4x3x2x1=24种排列组合,爆破一下组合的顺序应该就能得到flag
但是我尝试后并没有发现flag,下面放的是我尝试的提取LSB数据的脚本
|
|
后来在@byxs20
师傅的帮助下,获得了新的解题思路,其实这张图片种一共就一下五种像素点
|
|
其中(255, 255, 255, 255)
像素是没有隐写数据的,然后另外几个像素分别按照254的位置用四进制隐写了数据
这里为啥能想到
(255, 255, 255, 255)
像素是没有隐写数据的呢?因为如果师傅们尝试把不同像素的坐标打出来,可以发现这个像素是主要集中在前两列和第三列的前16个像素的
因此比较有经验的Misc师傅就会感觉到,大段连在一起的相同像素是不存在隐写数据的,因此需要把这个像素剔除
并且这里这样的排列方式,也提示了我们后续步骤中提取像素点需要按列提取
具体的对照表如下:
|
|
然后具体隐写的原理就是每轮的值x4,再加上当前的四进制值,最后可以得到一个长整型,具体解密代码如下:
|
|
还得是感谢B神脚本提供的思路,要不然根本想不到这个原理
运行以上脚本后就可以得到一个ZIP压缩包,但是Windows下直接打开是看不到内容的
因为被压缩的文件内容包括文件名都是 \r
、\n
、\t
、空格
这种空白字符
因此我们在Linux下使用脚本解压并提取其中的内容(因为Windows下看不到文件名为空格的文件)
然后里面内容的加密方式其实和上面的原理是一样的,也是四进制,就是具体的对照表是未知的
但是因为一共就四种字符,所以我们可以直接爆破一下
|
|
爆破后即可得到正确的表和最后的flag:flag{46eade75-846b-4d26-98f7-2cb3cb4686ed}
完整的解题脚本如下:
|
|
B站讲解视频中的脚本如下:
|
|
[SOLVED] 题目名称 道可道,非常道 (2024 ISCC 博弈对抗赛)
非常感谢 @Aura 师傅最后的奇思妙想,发现了频谱图中的二维码需要旋转,给这道题画上了圆满的句号。
题目附件: https://pan.baidu.com/s/1dyDJ_az_smtX6exFLinavg?pwd=pnet 提取码: pnet
赛后主办方给出了本题考察的知识点:
附件给了两个txt还有三个7z压缩包
皮箱封条.txt
的内容如下:
大衍数列,来源于《乾坤谱》中对易传“大衍之数五十”的推论。主要用于解释中国传统文化中的太极衍生原理。
数列中的每一项,都代表太极衍生过程中,曾经经历过的两仪数量总和。是中华传统文化中隐藏着的世界数学史上第一道数列题。
请依据下面的提示总结出大衍数列的通项式
0,2,4,8,12,18,24,32,40,50,60,72,84,98……
最后请求出第22002244位是多少?(好像他比较喜欢十六进制)
解决该问题的脚本如下,最后算出答案是242049370517768
,十六进制是dc2482bf7108
|
|
尝试使用得到的答案去解压压缩包,但是发现不是解压密码,不知道哪里出问题了,因此打算直接爆破了
先用下面这个脚本生成所有可能的结果,然后把结果输出到一个字典中
用在线网站或者7z2john
生成压缩包的hash,然后使用hashcat进行爆破
|
|
|
|
爆破即可得到皮箱左边.7z
压缩包的解压密码:5a2dd7b80
,这个数字转十进制是24207260544
,是数列的第220033
项
当然,这里也可以用 PasswareKit
进行爆破,大概要爆个十分钟左右也能得到压缩包的解压密码
解压后可以得到下面这5张二维码碎片
对二维码比较熟悉的师傅可以看出来,兑不兑呢?
这个图片的位置好像有点不对劲
并且我们拿010打开可以在末尾得到一个提示:overturn180
因此我们需要把上面那个兑不兑呢?
图片旋转180度(当然,我一开始没看到这个提示,但也凭着感觉把这个图片旋转了180度。。
皮箱封条2.txt
的内容如下:
203879 * 203879 = 41566646641,
仔细观察,203879 是个6位数,
它的每个数位上的数字都是不同的,
平方后的所有数位上都不出现组成它自身的数字。
在1000000以内具有这样特点的6位数还有一个,两数相乘是多少?
解决该问题的脚本如下,可以得到另一个数为639172
,因此和203879
相乘的结果为130313748188
|
|
经过尝试,发现130313748188
的十六进制值1e574dfedc
就是皮箱右边.7z
的解压密码
解压后可以得到以下四个文件夹
第一个文件夹里有加急密信.word,010打开查看文件头发现是PNG图片,改后缀为.png可以得到下图
第二个文件夹里有个wav文件,au打开看频谱图可以得到下图
第三个文件夹里有一张宽高被修改导致CRC报错的PNG图片,还原宽高后可以得到下图
第四个文件夹里有一张food.png,直接stegsolve打开查看,发现红色通道里藏了下图
因此结合文件夹的名称和得到的类似二维码的碎片,大概就能猜到出题人的意图了。。
听说比赛快结束的时候,主办方给出了fuxi.7z
的密码:iscc1234
额,虽然确实是弱密码,但是大部分人字典里应该都没有这个吧
直接爆破的话,8位的7zip密码也几乎不可能在赛中爆出来吧
不知道出题人咋想的,有没有测过题?或者出题人就是一个完全不懂Misc的新手?
解压压缩包后,可以得到下面这张bmp图片
上面这张图片结合之前得到二维码碎片的文件名,很容易联想到是伏羲八卦图
去网上搜一个伏羲八卦图,按照图中的顺序,二维码碎片的分布应该如下
艮 | 坤 | 震 |
---|---|---|
坎 | 太极 | 离 |
巽 | 乾 | 兑 |
但是经过尝试,发现按照这个顺序拼出来的二维码扫出来是乱码,因此尝试换了一个想法
首先我们可以保证正确的是二维码三块定位块以及中间太极
这几张图片的位置
我们尝试先将上面确定的四块用QRazyBox
拼好,然后观察下图中红色框框标出的部分,猜测这两块碎片中一定有一行是这样的
因此,经过对比,我们首先可以确定出左侧中部的那一块是离
然后经过反复比对,发现中间上面那块找不到对应的碎片,这里需要感谢@Aura师傅,发现了wav频谱图中那块碎片旋转后正好符合
到这一步,我们就可以完全确定出每块碎片的位置了,因为离
的对面肯定是坎
,坤
的对面肯定是乾
艮 | 坤 | 震 |
---|---|---|
离 | 太极 | 坎 |
巽 | 乾 | 兑 |
最后我们用QRazyBox
按照上面的顺序拼出完整的图片,然后扫码即可得到最后的flag:ISCC{wisH_U_ki7mo5_all_tHe_bEst}
完结撒花 *★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
不知道有没有和我一样一直在等待这道题答案的师傅,但是人海茫茫,还是感谢师傅们能看到这里!
[SOLVED] 题目名称 QRSACode
题目附件: https://pan.baidu.com/s/1Jtgzh2AOcR4J7A-Wa-83LQ?pwd=8zcj 提取码: 8zcj
这道题要感谢 @Aura 师傅的奇思妙想,发现了
hint.png
中的每个像素其实都是RSA中的e
题面信息如下
描述:p = 13,q = 19,e = ?
解压附件给的压缩包,可以得到如下两张图片,其中task.png
中隐约可以看到一张二维码
然后结合题面的信息,我们知道在RSA中e
要和phi
互质,其中phi=(q-1)*(p-1)
因此我们可以写个脚本得到e
所有可能的取值范围
|
|
得到e
所有可能的取值如下,一共84种可能取值:
|
|
然后我们尝试去读取hint.png
中的像素点
|
|
发现2500个像素点中有2496种像素,并且只有以下两种像素出现了2次,别的像素都是只出现一次
|
|
我们把所有像素打印出来可以发现,每个像素的RGB值都是取自我们之前得到的e
的取值范围中
然后我们再去看task.png
,发现图像时RGBA格式的,只不过A通道的值都是255
|
|
发现一共有1112种不同的像素
并且背景接近白色的像素点的RGBA的值为(246, 246, 246, 255)
,黑色像素点的RGBA值为(0, 0, 0, 255)
后来在
@Aura
师傅的帮助下,发现了其实图片中的每个像素的每个RGB的值都是RSA加密中的参数
因为我们之前得到了,hint.png
中每个像素的每个RGB值都在e
的取值范围中
然后hint.png
和task.png
的长宽是一样的,也就是说像素的个数以及RGB值的个数也是一样的,所以是一一对应的
因此我们可以联想到,把每个像素的每个RGB值都做一次RSA解密,hint.png
中的是e
,task.png
中的是密文c
最后把我们RSA解密得到的m
转为RGB值塞回图像中即可复原出二维码,扫码即可得到最后的flag:DASCTF{R54_W1th_Cv_1s_Fun}
最终的解题脚本如下:
|
|
[SOLVED] 题目名称 Boxing Boxer
题目附件: https://pan.baidu.com/s/195It-h7CBEXJ53-cV9MkoA?pwd=dahr 提取码: dahr
这道题的成功解决要感谢
@烛影摇红
师傅提供的解题思路
题面信息如下:
A boxing boxer unbox a box in which another box boxes little boxes and boxes and boxes and so on.
翻译:一位拳击手打开一个箱子,里面装着另一个装满小箱子的箱子,而这些小箱子里面又装着更多的小箱子,如此这般,层层叠叠。
解压附件压缩包,可以得到一个flag.gif
尝试分帧提取,可以得到504张图片
尝试用stegsolve
查看每张图片的LSB信息,并没有发现什么特殊的信息
然后尝试提取出GIF每一帧的间隔,可以得到如下内容,发现开头和结尾都是70,一共32+31=63
个
|
|
除去开头和结尾的70,发现中间的部分只有50和60,然后统计了一下一共441个,因为441=21x21
所以我们猜测可能隐写了一张二维码,我们尝试把50和60转为0和1,然后尝试绘制二维码,可以得到下面这些图片
转换出来后发现并不是二维码,并且尝试直接二进制转字符串也得不到什么有效的信息
|
|
后来在@烛影摇红
师傅的帮助下,知道了这题GIF隐写的关键
这里出题人是把二维码像素的坐标隐写到了GIF每一帧的偏移量
以及GIF每一帧图像的实际尺寸中了
因此,我们可以接着我们上面的分析,因为除去开头和结尾的70,中间的50和60一共有441个,又因为441=21x21
所以很明显暗示了我们是一个21x21
的二维码,因此我们可以编写以下脚本提取出隐写的坐标并绘制二维码
Tips:以下脚本需要在Linux中运行
|
|
运行以上脚本后,即可得到左上和右下两个二维码,分别对应一半的flag
最后把两段flag组合即可得到最后的flag:DASCTF{Unb0x_a_Fil3_t0_Get_a_Fl4g}
然后至于为啥右下角的二维码像素的坐标等于帧图像的实际尺寸+偏移量
,一开始我也没想明白
一开始我也是直接用帧图像的实际尺寸绘图发现出不来
我这里为读者提供了两种理解方法:
第一种理解方法就是,出题人出题的时候,肯定是预先已经确定了两个二维码的位置
第一个二维码没问题,直接用偏移量隐写就行,但是第二个二维码要怎么隐写呢?
还是可以用偏移量,但是由于第一个二维码已经确定了偏移量具体的值,所以这里,只能配合偏移量改变帧图像的实际尺寸
当然这里直接通过帧图像的实际尺寸来隐写也是可以的,直接让帧图像的实际尺寸等于二维码像素的坐标就行
第二种理解方法就是,我们仔细去查看那个identify
的输出结果
可以发现从第32个帧(下图中的下标是从0开始,所以下图中31代表第32帧)开始它的帧实际尺寸还是没变的
但是我们之前统计过,时间间隔为70
的帧只存在于前32帧
,因此这里也可以看出不是直接根据帧的实际尺寸隐写的
这时候可能就会联想到需要结合偏移量生成新的坐标
第三种的理解思路来源于@八神
:把每一帧gif的实际位置的左上角和右下角像素当成两个画笔
441帧之后画出来的图形就是这两个QR码(本题思路类似于ctfshow-misc入门题-aka赛博扶乩)
[SOLVED] 题目名称 Cyclone Joker
题目附件: https://pan.baidu.com/s/11DkgyTOBwumhHzIh5TKfNA?pwd=c2rb 提取码: c2rb
本题的成功解出离不开
@Aura
@zysgmzb
@八神
这几位师傅的帮助,师傅们都太强了!【膜拜】
题面信息如下:
W is for double.
解压附件压缩包,可以得到下面这张flag.jpg
的图片
用010打开图片,发现末尾藏了个rar,手动给它提取出来,发现rar是加密的,并且里面有个flag.bmp
猜测需要我们去那张flag.jpg
中寻找压缩包的解压密码
尝试用PS打开图片,仔细观察可以发现最后两列的像素明显与之前的像素不同,因此猜测有内容隐写在了这里
但是尝试了多种方法提取像素里的信息,都没有发现明显的压缩包密码
不知道这里提取像素中的信息是否需要用到题面中的 W is for double
,具体又该如何使用呢?
|
|
后来在@八神
的指点下,知道了JPG
图片还存在宽度(width)隐写
JPEG(jpg)图像的最小编码单元(MCU,Minimum Coded Unit)是 8×8 像素的块。换句话说,JPEG 压缩过程中会把图像划分为 8×8 的小方块进行处理。但如果宽度 不是 8 的倍数,JPEG 编码时通常会在 右边补足 至最近的 8 的倍数,以符合 8×8 MCU 处理的要求。
因此,我们尝试把上面那张JPG的宽度加到8的整数倍,即384
然后打开就能很清晰的看见后面隐藏的内容
发现主要是黑白像素块,因此我们写个脚本去提取里面的数据,并尝试转二进制为字符串
|
|
运行以上脚本即可得到rar的解压密码:ysiUDvXg(20~lPZi#2\*&)<,nb7m)x;ZBeZo+k*=t7npWGQ[w&s;#&yThd+PHnmAOd7bf3~~?)#0bg29+|F;E/u>Evv0oML:R$07
解压后可以得到下面这张bmp图片
尝试了常见的BMP的隐写后发现无果,然后发现BMP图片的宽度也不是8的整数倍
因此猜测可能和上面一样,存在宽度隐写
所以我们把BMP的图片也增加到8的整数倍,即在010中把宽度改为184
改完后就能清晰的看到隐写的像素
然后尝试用stegsolve去看看有没有LSB隐写的时候,发现了PNG文件的特征,只不过数据是逆置的
发现其实这里就是直接把PNG的十六进制数据转为bytes类型分三段隐写到RGB像素里了
因此我们写个脚本把数据提取出来就行,但是这里要注意每段数据前后有多余的\x00
|
|
运行以上脚本后即可得到下图
经过尝试发现这张图片其实也和上面一样,用width
隐写了内容(其实也可以说题面 W (width) is double
提示了这个)
因此我们还是一样,把这张PNG图片的宽度加到8的倍数。即把宽度修改为64
然后就可以看到如下隐写的内容
因此我们写个脚本去提取里面的数据,但是在提取的过程中发现因为宽度被修改了,CRC校验会报错
从而导致PIL和CV都无法识别这张图片,所以我们可以用PS重新导出一下这张PNG
重新导出后的图片就能被PIL正常识别了,然后我们看这道题的出题模板
很容易就能看出是安恒的题,因此猜测flag的前缀是DASCTF{
因此我们转二进制,然后和图片对应起来看,很容易找到对应的规律:黑色-0 白色-1
但是由于后面只有7列,因此我们需要在每一行的二进制数据前补0
最后写个脚本提取数据即可
|
|
运行以上脚本即可得到最后的flag:DASCTF{Now,_count_up_your_sins!}
这个flag翻译成中文就是:
现在,数一数你的罪过。
也许出题人也知道自己干了坏事,对那场比赛的选手心存愧疚吧
至此,这道题也是圆满结束了,最后还是再次感谢
@Aura
@zysgmzb
@八神
这几位师傅的帮助
[SOLVED] 题目名称 Steganography_challenges0.3(2025 西湖论剑全国总决赛)
题目附件: https://pan.baidu.com/s/1F6ZBdr-Nnhw0UmjF3_9DzA?pwd=f83m 提取码: f83m
附件已更新,原来的附件是损坏的,感谢
@IcePeak
师傅的提醒,要不然对着坏的附件,这题这辈子都做不出来了
本题的成功解出离不开
@IcePeak
师傅的帮助
解压附件压缩包,可以得到一个encrypt.py
和一张PNG图片,内容如下所示
|
|
发现是用弱密码简单加密了一下图片,然后我们用stegsolve打开图片可以发现图片存在LSB隐写
因此我们根据LSB隐写的内容写个脚本爆破一下密钥即可
|
|
运行以上脚本后即可得到第一段flag:DASCTF{01d0eed8-2e4b
,以及下一步的提示
并且可以用爆破出来的密码还原图片,还原后的图片如下
然后去网上搜DWT-QIM
相关的内容,可以搜到2024WMCTF-steg_allInOne这道题
发现整体思路和这道题差不多,猜测出题人的出题思路也是来源于这道题
然后我们010打开附件给的那张PNG,发现图片的末尾藏了一张base64编码后的图片
提取出来base64解码即可得到下图
参考上面2024WMCTF
那道题的wp,改一下提取水印的脚本
|
|
运行后可以得到如下内容,提示了我们一个key:79557c2d8f94
|
|
然后我们010打开提取得到的图片,发现有一块异常的IDAT chunk
尝试给他单独提取出来,发现按照2024WMCTF
的思路做得不到有用的东西
然后也尝试了异或密钥,也没有得到有效的信息,在@IcePeak
师傅的提醒下,查看了这块数据的大小
发现刚刚好是300kb,因此结合题目给了密钥,联想到可能是VeraCrypt加密容器
然后这里提取这块数据的时候要注意,不要把表示数据长度的那四个字节也提取出来
我们要从下图中高亮的位置后面开始提取
提取出来后,用VC挂载即可得到flag2:-4dc6-9152-ffe56b0f70b4}
综上,将得到的两段flag拼起来即可得到最后的flag:DASCTF{01d0eed8-2e4b-4dc6-9152-ffe56b0f70b4}
一些碎碎念:出题人最后套了一个VC加密容器确实会比较难想到,需要选手结合数据的长度和密钥进行联想
但也正是出题人这最后套了一下VC加密容器,让这道题更贴合“数据安全”这个分类吧
题目名称 Just Not Good
题目附件: https://pan.baidu.com/s/12j_kEm7Vw0PETvJ8GSiC8g?pwd=u7q6 提取码: u7q6
解压附件压缩包可以得到一个file
,但是打开发现有PNG的文件头,但改后缀为.png
后图片无法正常显示
在010中打开图片,发现PNG头还在,但是尾部已经损坏了,并且发现里面由一大串02 1A 00 00
因此猜测是异或了02 1A 00 00
,因此我们用CyberChef异或一下
异或完后下载到本地,再用010打开,PNG头坏了也没事
尝试foremost一下,发现可以得到下图
其实我们在010中爆搜也能找到JPG的头,因此也可以手动提取
得到上述图片后,用010改一下图片的高度,即可得到最后的flag:DASCTF{fab6ce57e3131f1635b0c953debe67ac165f}
题目名称 Fingers_play (2024 ISCC 个人挑战赛)
题目附件: https://pan.baidu.com/s/1wSR_G9N-5739BeJgP4zouQ?pwd=6dqv 提取码: 6dqv
题目名称 one (2024 古剑山)
题目附件: https://pan.baidu.com/s/1iSL1P1Z1Oa8WB0tXRWjSmg?pwd=vc66 提取码: vc66
题目附件给了一个cnc.txt
,内容是10000行每行114个字符的十六进制数据
部分内容如下:
|
|
发现每行长度都一样,然后结合one联想到可能是一个密钥加密的,一开始猜测是OPT或者MPT但是发现做不出来
题目名称 pingping (2024 蓝桥杯全国总决赛)
题目附件: https://pan.baidu.com/s/1nE4F_kVzgRaDulA0xOjiWQ?pwd=33tm 提取码: 33tm
题目名称 tag (2023 福建省职业院校技能大赛高职组信息安全管理与评估)
题目附件:https://pan.baidu.com/s/1TJrAnVSDirjdl3xk6wJRHA?pwd=ee6p 提取码: ee6p
参考链接:https://blog.csdn.net/m0_45155797/article/details/135027395
题目的内容就是要从下面这张图片中找出evidence2
的字样
已经知道答案,但是不知道这个evidence2
被出题人藏哪了,感觉是内幕题。。
题目名称 破译行动 (2024 ISCC 博弈对抗赛)
题目附件:https://pan.baidu.com/s/1GAhnDyy_2yplJeWibRsadg?pwd=py7u 提取码: py7u
赛后主办方给出了本题考察的知识点:
附件给了一张图片和一个TXT,其中TXT内容如下
不要忘记我们的接头暗号:58,20,36,40,32,60,48,88,42,46,70,21,42, 6,51,71,40,14,30,4,37,25,28,7,39,46,20,33
图片打开内容如下
用010打开发现图片末尾藏了以下数据,并且提示了后面那串base64是加密后的
IHaveEncryptedTheSignalToPreventLeakage:U2FsdGVkX18SCg3hRbbWKiIXLrevGD0Sv0aCNfGr5YEBzPi8f7oWRq5vQ5QziXjuYrfShzuxlEQe9qAN0SYZUU+cQLB3wREFNCyhjvhHTlt3dmTjDFElG3okDzg3Eu4Xj+2AINbme9zgOjdsJgpVZg==
解密需要密钥,但是找不到密钥,猜测会和图片中的那个时间有关系,但是不知道具体什么关系。。
后来听去了线下颁奖的师傅说,主办方在赛后总结的时候说这道题好像和具体的经纬度有关系
因此去网上搜了天安门广场的具体经纬度如下:
|
|
题目名称 Sakura
题目附件: https://pan.baidu.com/s/1qQ94akilsReXwJeAgjltjg?pwd=s9dh 提取码: s9dh
题目附件给了一个secret.pcapng
的流量包文件,打开发现主要是USBMS流量(U盘流量)
然后翻看一下流量包发现其中分段传输了一张很大的PNG图片,因此尝试写个Python提取出图片的数据
|
|
图片最后一段的数据需要手动提取一下,把所有图片数据都提取出来后可以得到下图
图片的像素看起来很复杂,然后zsteg
和stegsolve
也都试过了,感觉不存在LSB隐写,当前的思路就卡在这里了
题目名称 Ste9ano9raphy 6inary(2022CISCN 华南分区赛)
题目附件: https://pan.baidu.com/s/1-yjWWcdAwGmNDsGxAA8Gow?pwd=93bs 提取码: 93bs
附件压缩包中有一张PNG图片和一个加密的wav文件,猜测需要我们从png文件中找到压缩包的解压密码
其中 996.png
那张图片的内容如下: