Loading

命令执行中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格式来打开文件。具体情况还需要根据具体题目来分析。

posted @ 2023-04-24 15:49  Forever_wlwl  阅读(519)  评论(1编辑  收藏  举报