cat与tac
这两个命令是 Linux 下的“孪生兄弟”但在 CTF 中tac往往比cat更有“骚操作”空间。1. 字面与本质cat全称conCATenate连接。它的主要设计初衷其实不是用来查看文件而是用来合并多个文件。只不过大家最常用它来查看单个文件的内容。tac全称cat spelled backwardscat反过来拼。它是cat的逆序版本。2. 核心区别阅读顺序这是两者最大的差异。命令读取方向示例文件内容Line1, Line2, Line3cat从头到尾顺序Line1 → Line2 → Line3tac从尾到头逆序Line3 → Line2 → Line1演示假设有一个文件test.txtApple Banana Cherry执行cat test.txtApple Banana Cherry执行tac test.txtCherry Banana Apple3. 在 CTF 实战中的区别与应用在 Web 渗透和 CTF 中仅仅知道“倒过来读”是不够的你需要知道为什么要倒过来读。场景一绕过关键字过滤最常见很多 CTF 题目为了增加难度会在后端过滤cat这个关键字比如strstr($dir, cat)。Payload:dir%26%26 cat flag.php❌ (被拦截)Payload:dir%26%26 tac flag.php✅ (绕过了检测)原理WAF 或代码逻辑只禁用了cat但没有禁用tac、more、less、tail等其他读取命令。场景二配合head或tail精准提取有时候文件很大或者 PHP 报错信息太多你想只看最后一行Flag 通常在最后一行或者第一行。看最后一行tac flag.php | head -n 1先把文件倒过来第一行变成了最后一行然后用head -n 1取第一行。看第一行cat flag.php | head -n 1场景三日志分析与栈追踪在分析日志文件如/var/log/auth.log时最新的记录通常追加在文件末尾。用cat看日志你得一直往下翻。用tac看日志最新的攻击记录最先映入眼帘。场景四对抗“死猫”Dead Cat有时候cat命令被/bin/cat的绝对路径限制了或者被 alias别名改写了。有些选手会习惯性地用tac因为它比较冷门系统管理员往往忘记限制它。4. 关联命令家族CTF 必知既然提到了cat和tacCTF 中还有几个经常拿来互相替换的命令用于绕过过滤命令作用备注cat显示全部内容容易被禁tac倒序显示全部绕过神器more分页显示按空格下一页less分页显示高级版比 more 好用head显示头几行head -n 5(前5行)tail显示尾几行tail -n 5(后5行)tail -f(实时监视)nl带行号显示有时能绕过cat过滤sort排序显示打乱原顺序rev每列反转echo abc-cba(配合 tac 可完全镜像翻转)strings提取可见字符读二进制文件找 Flag 必备5. 针对本题的特殊点回到你的题目$dir$_POST[dir]; system(ls .$dir);当你输入dir%26%26 tac flag.php执行ls执行tac flag.php如果flag.php内容是?php $flagflag{this_is_flag}; ?用cat看到的是?php $flagflag{this_is_flag}; ?用tac看到的是? $flagflag{this_is_flag}; ?php虽然看起来乱了但是 Flag 字符串flag{this_is_flag}依然完整暴露了。 这在 CTF 中是完全有效的。总结日常使用用cat。CTF 绕过首选tac或more。原理利用冷门命令不在黑名单中的特性或者利用逆序特性辅助查看日志。下次如果遇到cat被禁试试tac、more、less、nl总有一个能打