CatFlag 原理
今天我们来讲讲原理性的东西......
解题思路
这道题等级这么低,但是当时我将其复杂化了,其实想要做出答案很简单,只需要将文件拖进Linux里,根据提示,直接cat flag就好了
得到flag:CatCTF{!2023_Will_Be_Special,2022_Was_Not!}
cat 命令
在linux中cat命令是用来查看文件内容的,命令格式为 cat 文件名,刚好这题的附件名就叫flag
我的疑问
不过,通常cat是文件中写入什么字符串,就读取什么字符,比如我vi / nano / vim一个文件file,写入abc,cat file后就回显abc
当我查看文件后,发现不简单,这都啥跟啥?别样的加密?多番查询无果,我开始查找网上的wp
原理
网上的说法
假设flag文件内容为 “正常文本 \x1b[C 向右移动后的文本”
当你在终端使用 cat flag 命令时,终端首先会显示 “正常文本”,然后遇到 \x1b[C 这个ASCII转义序列。终端理解这个序列的意思是将光标向右移动,接着就会在刚才“正常文本”的右侧显示“向右移动后的文本”。
涉及知识点
ASCII转义字符:用于控制光标的移动。例如,\x1b[C 表示光标向右移动,\x1b[D 表示光标向左移动,\x1b[A 表示光标向上移动,\x1b[B 表示光标向下移动
我的理解
实际上就是cat命令从上到下,从左到右顺序读取,而ASCII转义序列则决定了转义序列右侧的文本显示在左侧文本的哪一个方位
实际案例
假如 flag 文件内容为:“Start\x1b[BEnd”。
当执行 cat flag 命令时,终端先显示“Start”,遇到 \x1b[B 这个 ASCII 转义序列,它表示光标向下移动。此时光标会移动到下一行,然后显示“End”。
最终在终端上呈现的效果是:
“Start”
“End”
看起来就像是“End”从“Start”的下方滑出。