命令执行中cat 和tac的区别

Posted crazy168

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了命令执行中cat 和tac的区别相关的知识,希望对你有一定的参考价值。

命令执行中cat 和tac的区别

导引

在最近的一道简单的命令执行题目中当使用?c=system(\'cat f\');时,发现并不能在网页上显示内容,而如果使用?c=system(\'tac f\');时,内容就能显示出来

分析

 正则过滤了flag,我们可以使用通配符 \'*\' 或者匹配符 \'?\' 绕过

c?=syetem(\'ls \');//查看一下文件
//存在两个文件,flag.php index.php 

尝试查看flag.php ,?c=system(\'cat f\');发现页面没有显示,使用?c=system(\'tac f\');正常显示

原因

首先查找一下cat 和tac 命令的区别

cat:命令cat用于查看一个文件的内容并显示在屏幕上,cat后面可以不加任何选项直接跟文件名。

tac:命令tac也是把文件的内容显示在屏幕上,只不过是先显示最后一行,然后显示倒数第二行,最后才显示第一行。

而我们题目flag存在一个php文件中,如果我我们使用cat查看的话,那么还是按照<?php格式执行,而其中没有输出语句echo 等,无法输出flag

 

而tac命令刚好可以通过倒序输出,而避开<?php,使得内容能够显示出来,此时不再是php语句了

 

 

总结

当在做题过程中如果flag存在一个php文件中,而我们要通过读取文件来获得flag时,我们可以使用tac命令来倒序显示内容,而不按照php格式来打开文件。具体情况还需要根据具体题目来分析。

cat命令和tac命令

cat命令

连接文件并打印到标准输出设备上,cat经常用来显示文件的内容

注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。

为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。


 

-n或-number:有1开始对所有输出的行数编号;

-b或--number-nonblank:和-n相似,只不过对于空白行不编号;

-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行;

-A:显示不可打印字符,行尾显示“$”;

-e:等价于"-vE"选项;

-t:等价于"-vT"选项;


 

从键盘创建一个文件

$ cat > d.txt

 

将几个文件合并为一个文件

$ cat c.txt d.txt > e.txt

 

显示一个文件的内容

$ cat e.txt

 

显示多个文件的内容

$ cat e.txt a.txt

 

对所有输出行编号

$ cat  -n e.txt

 

对非空输出行编号

$ cat -b e.txt 

 

如果有连续两行以上的空白行,输出时只显示一行

$ cat -s e.txt 

 

显示不可打印字符,输出时每行结尾会加上一个$

$ cat -A e.txt 

 

将一个文件的内容加上行号后输入到另一个文件里(直接覆盖掉这个文件原来的内容)

$ cat  -n e.txt > a.txt

 

 

将一个文件的内容加上行号后输入到另一个文件里(在尾部追加)

 

$ cat  -n e.txt >> a.txt

 

复制这个文件

$ cat   e.txt > a.txt

 

合并几个文件,并且test4是已经排好序的

$ cat test test1 test2 test3 | sort > test4

 

 

如果有大量的文件包含不适合在输出端子和屏幕滚动起来非常快,我们可以多和少用参数与cat命令如上表演。

$ cat e.txt | more

$ cat e.txt | less

 

tac命令

 

反序输出文件的内容,文件的最后一行显示在第一行

它可以对调试日志文件提供了很大的帮助,扭转日志内容的时间顺序。

$ tac e.txt 

以上是关于命令执行中cat 和tac的区别的主要内容,如果未能解决你的问题,请参考以下文章

一:档案和目录篇——查看档案命令

查看文件内容的命令cat,tac,more,less,head,tail

1.linux命令之cat和tac

Linux常用命令--tac

Linux命令 查看文件 cat tac more less tail

Linux常用命令简述--cat与tac