命令执行中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,命令,flag,tac,php From: https://www.cnblogs.com/crazy168/p/17349748.html