这道题是一道RCE的赛题,里面用到了我们更换函数绕过的一个知识点。
首先我们看到题目
//居然都不输入参数,可恶!!!!!!!!!
<?php
## 放弃把,小伙子,你真的不会RCE,何必在此纠结呢????????????
if(isset($_GET['code'])){
$code=$_GET['code'];
if (!preg_match('/sys|pas|read|file|ls|cat|tac|head|tail|more|less|php|base|echo|cp|\$|\*|\+|\^|scan|\.|local|current|chr|crypt|show_source|high|readgzfile|dirname|time|next|all|hex2bin|im|shell/i',$code)){
echo '看看你输入的参数!!!不叫样子!!';echo '<br>';
eval($code);
}
else{
die("你想干什么?????????");
}
}
else{
echo "居然都不输入参数,可恶!!!!!!!!!";
show_source(__FILE__);
}
我们进行代码审计:
首先是用GET传入了一个code参数,然后是过滤了一些函数与关键字,发现过滤了echo,ls,tac,cat等,但是没有过滤反引号,和\等。
那我们看到这道题的思路吧
既然echo被过滤的话,我们可以使用printf函数
发现可以,然后我们也找到了flag,直接读取就完事了。
拿下这道题。
但是这道题应该还有很多种方法可以做,我们可以找找关于PHP的输出函数,比如说var_dump,printf_r函数都是可以代替echo的。
print_r:
var_dump:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。