XYCTF
(回忆一些有想法的但是没做出来的题目)

找到复盘的地方了,有机会复盘一下,好歹是人生中第一个打的CTF
MISC
会飞的雷克萨斯
题目:2025年1月30日W1ndys上网冲浪时,收到了舍友发来的聊天记录,聊天记录显示,一小孩放鞭炮引爆地面,请定位爆炸点的具体位置,该题解出需要通过正常的osint题目做题思路
是一题正常的osint题目
在csdn了解到OSINT代表开源网络情报,许多题目大致是给一张照片然后询问图片经纬值的类型,他的经纬度精确到小数点后五位就是这道题的flag。
但是这道题显然给了flag格式,不需要太麻烦
图片的事件很显然是130的爆竹事件,很新的新闻,一搜很容易跳出答案是在四川内江市资中县⽔南镇春岚北路,但是说在****内,脑子抽了怎么写都不对,什么中铁停车场内,草地里莫名其妙试了半天
其实只需要根据下图中的小东十七店名一搜就知道了,搜一下号码,地址便跳出来了

可以看到地址写的是城市中心内

所以flag出来了,就是XYCTF{四川内江市资中县⽔南镇春岚北路城市中⼼内},真的是最简单的一题了()
sins
“Come now, let us settle the matter,” says the LORD. “Though your sins are like scarlet, they shall be as white as snow; though they are red as crimson, they shall be like wool. - Isaiah 1:18
题目怪中二的,附件是一个python文件,其实环境也就是运行了这个文件吧(大概?)

看这个python程序,大致是需要我输入一个只包含“i0123456789+-*%/……=《》~&|:()【】”的字符串,长度要在16以内
别的看不懂了
先看看lambda函数和eval函数:
lambda函数:
Python 使用 lambda 来创建匿名函数。
lambda 函数是一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式。
匿名函数不需要使用 def 关键字定义完整函数。
lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用,例如在 map()、filter()、reduce() 等函数中。
lambda 语法格式:
lambda arguments: expression
- <font style="color:rgb(51, 51, 51);background-color:rgb(250, 252, 253);">lambda</font>是 Python 的关键字,用于定义 lambda 函数。
- <font style="color:rgb(51, 51, 51);background-color:rgb(250, 252, 253);">arguments</font>是参数列表,可以包含零个或多个参数,但必须在冒号(- <font style="color:rgb(51, 51, 51);background-color:rgb(250, 252, 253);">:</font>)前指定。
- <font style="color:rgb(51, 51, 51);background-color:rgb(250, 252, 253);">expression</font>是一个表达式,用于计算并返回函数的结果。
eval函数
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
字符串表达式可以包含变量、函数调用、运算符和其他 Python 语法元素。
语法
以下是 eval() 方法的语法:
eval(expression[, globals[, locals]])
参数
- expression – 表达式。
- globals – 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
- locals – 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
eval() 函数将字符串 expression 解析为 Python 表达式,并在指定的命名空间中
因此很显然啊,这题其实eval就是在执行lambda这个函数,用空字典作为 globals 和 locals,而这个lambda函数还是个带参数i的,命名了一个{inp}的函数
好了后边看不懂了,我放弃了(答案是~~~~f = ~~~~lambda ~~~~i:~~~~‘1i–’~~~~[i%~~~~4~~~~::-~~~~2~~~~] ~~~~# 15)
签个到吧
题目:最小的,具有图灵完备性的语言是?
由提示易得这是个brainfuck语句,打开来一看也确实,但是喂给ai屁用没有(我现在发现文件名bf也在暗示就是这种语言)

对于brainfuck而言,字符含义如下
思路一
可以发现,所有的brainfuck都没有输出符,所以肯定是解不出来的,很多在线的brainfuck解密网址也都无法解密,跟其格式不对有关,只需在所有[-]前边加上输出符号.即可
“[-]”结构实际上是Brainfuck中的一个常见惯用语法。因为“[-]”的作用是将当前指针所在的单元清零。具体来说,循环会一直执行,直到当前单元的值为零。在循环内部,每次都会将当前单元减1,所以只要当前单元不为零,就会一直减到零为止。因此,无论当前单元的值是多少,执行“[-]”后都会变成0。
在每个“[-]”前面加上输出符号“.”,也就是变成“.[-]”。这里的“.”在Brainfuck中是输出命令,作用是将当前单元的值作为ASCII字符输出。所以,每次执行“.[-]”的时候,会先输出当前单元的值,然后将该单元清零。
因此这样子之后放入brainfuck解密网址即可解出flag(当然也能用脚本)

思路二
在发现无法解开后用在线网站https://copy.sh/brainfuck/ 看一下它的一个生成代码
把代码丢给ds可以直接分析出flag

(为什么我的ds不能,我不理解,算了)(你的ds我的ds好像不一样)
flag{W3lC0me_t0_XYCTF_2025_Enj07_1t!}
XGCTF
题目:2024年CTFshow举办了一场名为“西瓜杯”的比赛(XGCTF)。其中LamentXU在出题的时候,从某场比赛拉了道原题下来改了改,结果传文件的时候传错了传成原题了。因为这件事LamentXU的损友dragonkeep在他之前的博客上的原题wp上加了一段flag来嘲笑LamentXU。请你找到XGCTF中唯一由LamentXU出的题,并找出这题对应的原题,接着找到dragonkeep师傅的博客,并从博客上讲解该题的博文中找到flag。(hint:dragonkeep师傅因为比较穷买不起域名,因此他博客的域名在dragonkeep的基础上多了个字母)
直接一步步走就好,这题也不难,先找原题(题目不多,一翻马上就翻到了)

然后我再去了csdn搜了一下wp

就看到了这样子的一段话,这题是CISCN华东南里边的,然后就去搜了搜CISCN的题目,很容易就找到了原题名为“pollute”
直接搜索,如下图

一下子就找到Dragonkeep师傅的老巢了,域名多个字母,对上了
(然后我在这篇文章里读了半个小时什么都没看出来,浪费时间来的)
还是谢晨师傅教的
按住Ctrl+U,查看网页源代码,就能找到这个flag了

一看就是base64解密,扔进去就有了

flag{1t_I3_t3E_s@Me_ChAl1eNge_aT_a1L_P1e@se_fOrg1ve_Me}
MADer也要当CTFer

打开文件是个视频(挺好看还)
当初用的媒体播放器看不出来啥,一头雾水,只发现了视频时长不对劲,五六个小时的东西那么快就结束了

利用potplayer后直接就能跳出这些字幕
可以看得出来这些字幕是十六进制的,于是考虑应该先提取字幕
这边利用的是提示的小丸工具箱我们直接导出(用ffmpeg应该也行,但小丸方便一些)

在抽取界面直接用第三方工具抽取

这边直接提取字幕

是一个这样子的内容,是一个ass文件,我们编写脚本提取十六进制


这边直接输出到txt文件(因为太多了,控制台复制粘贴看不全)

可以看到完整的十六进制内容,我们直接把十六进制转ASCII一下

RIFX不太认识是什么文件,ai阅读后得出为ae的文件

我们下载AE扔进去
把后缀改为.aep后用AE打开
显示缺插件,AE真的是玩不来
其实在notepad里直接打开找有意义的leet编码内容就能找到了(我照着别人的复盘的,大都是这样子做的,可是我真的找不到,我也不知道为什么)

flag{l_re@IIy_w@nn@_2_Ie@rn_AE}
喜欢就说出来

题目附件给的是一个流量包,因此直接扔给wireshark先看看
说是通过浏览器传递的,因此导出http看看


发现有一个php文件

利用winhex打开后这个php文件里竟然有png的文件头
先利用16进制编译器把png文件头89 50 4E 47 0D 0A 1A 0A之前的给删掉


得到png文件,用TweakPNG打开后观察其格式

发现这玩意两个文件头,是两张png文件合二为一的产物
 可以看到两个文件头,肯定是要分开来处理的
:::info(这里就是我最不能理解的一个点了,我尝试了去研究IDAT的顺序规律,没找到有规律可言,我又查了CRC,也就是一个检验png是否被篡改的罢了,只能用于检测数据传输中的错误。别人的wp说是不难的,一个一个摆正位置直到图片显示完整,难不成只能靠人力一个个试???问题是我试过了顺序不对也是变不成这个照片的,这就很麻烦,又要有删减,又要有位置的固定,必须试到这一个顺序和数目都对的可能性,是不是有什么我漏掉的线索???)
(如果是这个短的其实倒还好,这个只要把长度为65536的IDAT都拉出来然后加一个53749的即可,顺序也不用改,但这是第二个头)
| 1 |  | 
解决了,感谢何神,我怎么没想到

只要留个头留个尾,然后一个个块看就好了,然后很快就能像拼拼图一样拼好了

就像这样子,但是这个图片不修完没法放到stegsolve里,所以还是得一个个试然后拼成好的一张

当然了,选错文件头的话就什么都没有了,是一段乱码
:::


这样先处理好第一张


然后是第二张
可以发现第二张上边存在着一串flag,但是只有前半部分,不难猜到后半部分应该在另一张照片上

积累:这边可以根据ps调参看一下是不是有什么奇怪的地方,如此处的像素点(其实我刚刚试了图片预览也可看见,就是直接拉大,可以看到,就看能不能想到了)

最后根据原本的题目提示,520恰好出现在stegslove的extract preview里,尝试勾选plans后出现flag后半段,即ta_G@_t0kubetsu_Suki!!!}

得解
flag{WatAshl_W@_anAta_G@_t0kubetsu_Suki!!!}
曼波曼波曼波

我已经不记得当时有没有做这道题了,肯定是没做出来,但是也不记得有没有做了()

拿到是俩文件,一个txt一个png
先看png

是个假flag,按我出题经验就是故意搞了个这样子的二维码,但是绝对藏东西了,否则毫无意义(真特么什么都没藏,打我脸来了,没东西放附件来干啥,就恶心一小下吗)
binwalk没东西,lsb也没东西,那我们先略过

txt打开很像很像base64,而且像反过来的
我们直接编写脚本反着走一遍

放入cyberchef,果然有文件产出,看起来是jpg


那我们直接改后缀

是我们曼波,那题目的提示也是用完了

这jpg藏的东西有点多啊()
我们foremost一下

是一个有仨文件的压缩包



一个png,一个加密的压缩包,一个提示词
那我们直接用XYCTF2025试试看解密
解开来还是这样子一张png,绝对是跟双图有关


这边是双图盲水印,其实我还是第一次遇到
XYCTF{easy_yin_xie_dfbfuj877}(光是看着这水印输眼睛都要瞎掉了)