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}(光是看着这水印输眼睛都要瞎掉了)


XYCTF
https://mei-you-qian.github.io/2025/10/28/XYCTF/
作者
Meiyouqian
发布于
2025年10月28日
许可协议