cat与tac
2026/7/15 3:56:52 网站建设 项目流程

这两个命令是 Linux 下的“孪生兄弟”,但在 CTF 中,tac往往比cat更有“骚操作”空间。

1. 字面与本质

  • cat:全称conCATenate(连接)。它的主要设计初衷其实不是用来查看文件,而是用来合并多个文件。只不过大家最常用它来查看单个文件的内容。

  • tac:全称cat​ spelled backwards(cat反过来拼)。它是cat的逆序版本。

2. 核心区别:阅读顺序

这是两者最大的差异。

命令

读取方向

示例(文件内容:Line1, Line2, Line3)

cat

从头到尾(顺序)

Line1 → Line2 → Line3

tac

从尾到头(逆序)

Line3 → Line2 → Line1

演示:

假设有一个文件test.txt

Apple Banana Cherry

执行cat test.txt

Apple Banana Cherry

执行tac test.txt

Cherry Banana Apple

3. 在 CTF 实战中的区别与应用

在 Web 渗透和 CTF 中,仅仅知道“倒过来读”是不够的,你需要知道为什么要倒过来读

场景一:绕过关键字过滤(最常见)

很多 CTF 题目为了增加难度,会在后端过滤cat这个关键字(比如strstr($dir, "cat"))。

  • Payload:dir=%26%26 cat flag.php❌ (被拦截)

  • Payload:dir=%26%26 tac flag.php✅ (绕过了检测)

原理:WAF 或代码逻辑只禁用了cat,但没有禁用tacmorelesstail等其他读取命令。

场景二:配合headtail精准提取

有时候文件很大,或者 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 必知)

既然提到了cattac,CTF 中还有几个经常拿来互相替换的命令,用于绕过过滤:

命令

作用

备注

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

  1. 执行ls

  2. 执行tac flag.php

如果flag.php内容是:

<?php $flag="flag{this_is_flag}"; ?>

cat看到的是:

<?php $flag="flag{this_is_flag}"; ?>

tac看到的是:

?> $flag="flag{this_is_flag}"; <?php

虽然看起来乱了,但是 Flag 字符串flag{this_is_flag}依然完整暴露了。​ 这在 CTF 中是完全有效的。

总结

  • 日常使用:用cat

  • CTF 绕过:首选tacmore

  • 原理:利用冷门命令不在黑名单中的特性,或者利用逆序特性辅助查看日志。

下次如果遇到cat被禁,试试tacmorelessnl,总有一个能打!😉

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询