命令执行中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