一个不易被发现的PHP后门代码解析

一个不易被发现的PHP后门代码解析

简介

本文将对一个不易被发现的PHP后门代码进行解析和分析,以帮助网站管理员和开发人员更好地保护网站安全,预防黑客攻击。

检测方式

检测一个PHP后门代码是否存在,需要使用以下方式:

  1. 首先,修改PHP配置文件php.ini,开启错误日志功能。具体方法是在php.ini文件中添加以下代码:

error_log = /var/log/php_error.log

此处/var/log/php_error.log为错误日志文件路径,可以根据实际情况修改。

  1. 使用Linux的find命令搜索代码。具体命令是:

find /var/www/ -type f -name "*.php" -exec grep -Hn "eval(base64_decode(" {} \;

上述命令相当于在/var/www/目录下搜索所有的.php文件,再使用grep命令查找包含"eval(base64_decode("字符串的行,并显示文件名和行号。

如果发现类似于以下代码的行,就证明代码存在后门:

eval(base64_decode("aWYoZnVuY3Rpb25fZXhpc3RzKCdvYl9zdGFydCcpJiYhaXNzZXQoJEdMT0JBTFNbJ3AxJ10pKXsKJHByb3RvY29sID0gYXJyYXkoJ3NvdXJjZScsICRfU0VSVkVSWydTRVJWRVJfTkFNRSddLCAkd29ya2xvYWQpOwokcmF3X3NvdXJjZSA9IGFycmF5KCctcmF3X3NvdXJjZScsICRfU0VSVkVSWydTRVJWRVJfTkFNRSddLCAkd29ya2xvYWQpOwokbXNnID0gc3RydG91KCRwcm90b2NvbFsiTXlTZWxlY3QiXSwgJF9TRVJWRVJbJ0hUVFBfSE9TVCddKTsKJG1zZ19zb3VyY2UgPSBzdHJ0b3VoKCRwcm90b2NvbFsiV2luMzIiXSwgJF9TRVJWRVJbJ0hUVFBfSE9TVCddLCAnd3JpdGVyaWEucGhwJywgJG1zZ19zb3VyY2UpOwplaWYoICRtYWlsICkgewplY2hvICI8cD4iLiRtYWlsLiI8L2M+IjsKfQp9Cg=="));

上述代码执行了一段base64编码后的代码,这是典型的后门代码。

后门代码分析

下面对上述后门代码进行分析。

访问控制

该后门代码的第一行代码是:

if(function_exists('ob_start') && !isset($_GET['version']))

该代码的作用是保证只有从网站管理系统进入而没有传入version参数的人才能访问该后门。这样做是为了避免该后门被黑客使用。

网站恢复

该后门代码的一段代码是:

$precontrollers = array('sourcemaster' => '$e', '_SERVER' => 'world-worst-and-ever-language');
function f_access($sourcename, $params) {
    $preparams = array('socket_name' => '127.0.0.1', 'socket_port' => '6701', 'sql_unsafety' => '2', '@WCDL@' => 'wudimei_ecjtu_sse');
    $params = array_merge($preparams,$params);
    if($sourcename!="sourcemaster") {
        require_once($params['apppath'] . "/". $precontrollers[$sourcename] . ".php");
        $classname = $sourcename."_controller";
        $obj = new $classname($params);
        $obj->accessing();
        return $obj->get_return_val();
    }else{
        require_once($params['apppath'] . "/". $precontrollers[$sourcename] . ".php");
        $classname = $sourcename."_controller";
        $obj = new $classname($params);
        $obj->accessing();
        return $obj->get_return_val();
    }
}
$sourcemaster = <<<HJS
function dazhishe_big2smally() {
    \$home = __DIR__ . '/../../../../';
    chdir(\$home);
    define('BASEPATH', dirname(\$home) . '/');
    define('ROOT_PATH', dirname(BASEPATH));
    include BASEPATH . 'index.php';
}
f_access('sourcemaster', array('apppath'=>ABSPATH, 'version'=>'3.2', 'sourcemaster'=>\$sourcemaster, 'precontrollers'=>$precontrollers));
HJS;
eval(base64_decode($sourcemaster));

这段代码的作用是通过f_access函数访问网站,传递sourcemaster参数。如果sourcemaster参数的值为代码段$sourcemaster,就表示需要对网站进行恢复。

恢复的过程是,从相对路径'../../../../'进入网站根路径,载入index.php文件。由于网站根路径是由相对路径和ABSPATH构成,因此可以得到网站根路径。这样就可以通过调用网站API等方式进行网站恢复。

总结

本文详细分析了一个不易被发现的PHP后门代码,同时介绍了检测方式以及后门代码的分析过程。对网站管理员和开发人员进行安全提示,以帮助他们更好地保护网站安全,预防黑客攻击。

示例

下面是一个示例代码:

<?php
$sandbox = $_REQUEST['sandbox'];
eval("$sandbox;");
?>

上述代码存在注入隐患,黑客可以通过传递参数引入可执行的指令。可以使用以下语句进行替换:

$sandbox = "/*".substr($_REQUEST['sandbox'],0,100)."*/;";
eval("$sandbox;");

示例分析

上述代码的作用是获取客户端传递的$sandbox参数的值,并通过eval函数执行该值,这是一个典型的PHP代码注入漏洞。黑客可以传递一个恶意的$sandbox值,代码将自动执行该值,从而导致Web服务器被黑客攻击。

为避免这种风险,我们在修改注入前,进行了字符串截取和前缀添加。这样可以将$sandbox变为一个单纯的注释,从而避免了恶意注入风险。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一个不易被发现的PHP后门代码解析 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • PHP检查URL包含特定字符串实例方法

    下面是关于PHP检查URL包含特定字符串的完整攻略,这个攻略分为四个步骤: 步骤1: 获取URL链接 我们需要使用PHP中有关URL链接的相关函数,来获取用户当前访问的URL链接。 $url = "http://".$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’]; 步骤2: 提取URL中的关键信…

    PHP 2023年5月26日
    00
  • PHP使用preg_split()分割特殊字符(元字符等)的方法分析

    下面是关于“PHP使用preg_split()分割特殊字符(元字符等)的方法分析”的完整攻略: 什么是preg_split()函数 preg_split()是PHP中的一个正则表达式函数,它用于将一个字符串根据正则表达式模式进行分割。 preg_split()的语法 array preg_split ( string $pattern , string $s…

    PHP 2023年5月26日
    00
  • GoFrame框架garray对比PHP的array优势

    GoFrame是一款高效、易用的Go语言Web框架,它提供了丰富的组件和工具,例如garray。garray是GoFrame框架提供的一种高性能的数据结构,可以与PHP中的array相媲美,但它实际上也有一些优势。 garray具有以下几个主要优势: 1. 速度更快 由于garray内部采用了数组存储数据的方式,在遍历和访问数据时具有非常高的性能。相比之下,…

    PHP 2023年5月26日
    00
  • 小程序兼容安卓和IOS数据处理问题及坑

    小程序在处理数据时,需要考虑兼容安卓和iOS两个平台,因为它们的底层系统和部分API存在一定差异,如果不注意兼容性问题,就会导致程序在某一平台上出现异常或者崩溃,给用户带来极差的体验。 下面是一些小程序兼容安卓和iOS数据处理问题及解决方法的攻略: 1. 字符串拼接问题 在字符串拼接时,如果使用 + 运算符进行拼接,有时会出现异常。这是因为,在安卓平台上,如…

    PHP 2023年5月30日
    00
  • PHP以mysqli方式连接类完整代码实例

    在这里我将为大家详细讲解如何使用PHP中的mysqli方式连接数据库,并给出完整的代码实例。在本教程中,我将使用MySQL数据库作为示例,并假设你已经安装了PHP和MySQL。 步骤一:创建数据库和数据表 首先,我们需要在MySQL中创建一个数据库和数据表。以下是创建数据库和数据表的示例代码: CREATE DATABASE test_db; USE tes…

    PHP 2023年5月23日
    00
  • PHP几个实用自定义函数小结

    让我来详细地讲解一下“PHP几个实用自定义函数小结”这个主题的攻略。 什么是自定义函数 自定义函数是指在 PHP 代码中定义的、可以重复使用的代码块。它们通常用来执行特定的任务或返回某个值,可以让我们的代码更加简洁、易于维护。 自定义函数的语法 自定义函数的语法如下所示: function function_name(parameter1, paramete…

    PHP 2023年5月27日
    00
  • PHP数组游标实现对数组的各种操作详解

    PHP数组游标实现对数组的各种操作详解 数组游标是PHP数组非常常用的一个内部指针。通过这个指针,我们可以实现对数组的多种操作,比如遍历数组、修改数组、删除数组等等。在本文中,我们将详细讲解PHP数组游标的各种操作,包括数组指针移动、当前元素的获取、修改当前元素值、增删元素等。 一、数组指针移动 在PHP中,我们可以使用reset()函数将数组游标指针移动到…

    PHP 2023年5月26日
    00
  • 详解php命令注入攻击

    请允许我对PHP命令注入攻击进行详细讲解。首先,我们需要理解什么是命令注入攻击。 什么是命令注入攻击? 命令注入是通过向应用程序的输入参数中注入恶意代码来执行非预期的操作的攻击方式。一般来说,这种攻击方式主要针对那些需要用户输入数据并拼接到执行命令或查询数据的SQL语句中的Web应用程序,PHP是其中的一种语言。 攻击过程 一个典型的PHP命令注入攻击,主要…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部