一个不易被发现的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的十个高级技巧(上中下)第1/3页

    PHP的十个高级技巧(上中下)第1/3页 简介 这篇文章会介绍PHP的十个高级技巧,帮助开发者更好地理解PHP的能力和应用场景。 高级技巧1:命名空间 命名空间可以定义代码库中的不同部分,以避免命名冲突和提高代码的可重用性。 示例1 以下代码展示了如何使用命名空间来定义代码库中的不同文件夹。 <?php // 定义App命名空间 namespace A…

    PHP 2023年5月23日
    00
  • 深入分析php之面向对象

    深入分析php之面向对象的攻略主要包含以下几个步骤: 1. 理解面向对象 什么是面向对象编程 面向对象的三个基本特征(封装、继承、多态) 面向对象和面向过程的区别 2. PHP的面向对象特性 类、对象、属性、方法 构造函数和析构函数 静态方法和静态属性 访问控制修饰符(public、private、protected) 继承和接口 3. 面向对象设计模式 工…

    PHP 2023年5月30日
    00
  • 如何使用php生成zip压缩包

    生成zip压缩包是一个很常用的需求,在PHP中我们可以通过ZipArchive类来轻松实现。下面是使用PHP生成zip压缩包的完整攻略: 步骤1:创建ZipArchive对象 首先,我们需要实例化 ZipArchive 类,并且打开一个新的压缩文件。 $zip = new ZipArchive(); $zipFileName = ‘test.zip’; if…

    PHP 2023年5月26日
    00
  • golang与php实现计算两个经纬度之间距离的方法

    当我们需要计算两个经纬度之间的距离时,有多种编程语言和算法可以选择,其中Go和PHP都提供了比较简便的方法,下面我会详细讲解它们的实现方法。 Go语言实现 Go语言没有提供直接计算经纬度距离的函数,但它有一个内置的 math 包,提供了一个函数 math.Sin(),可以帮助我们计算一个角度的正弦值,而这个值可以根据地球半径和纬度差、经度差来计算出两点之间的…

    PHP 2023年5月26日
    00
  • 使用 eAccelerator加速PHP代码的目的

    使用 eAccelerator 加速 PHP 代码的目的是为了提高 PHP 代码的执行效率,加快响应速度,降低服务器负载,提升网站性能。eAccelerator 是一个免费的开源 PHP 加速器,可以将 PHP 脚本编译成字节码,并对字节码进行缓存,从而避免重复编译和解释,提高 PHP 执行效率。以下是使用 eAccelerator 加速 PHP 代码的具体…

    PHP 2023年5月27日
    00
  • PHP与以太坊交互详解

    PHP与以太坊交互详解 以太坊是一个开源的区块链平台,具有可编程的智能合约功能。PHP是一种强大的服务器端脚本语言,很常用于Web开发。在这篇文章中,我们将介绍如何使用PHP与以太坊进行交互。 1. 安装以太坊PHP客户端库 首先,我们需要安装PHP客户端库(例如ethereum-php)来与以太坊进行交互。可以使用Composer来安装它: compose…

    PHP 2023年5月24日
    00
  • 雷神第五代911笔记本性能怎么样 雷神第五代911游戏本深度评测

    雷神第五代911笔记本性能评测 选购建议 雷神第五代911笔记本作为一款高性能游戏本,配备了Intel i7-9750H CPU,NVIDIA GeForce RTX 2060显卡,16GB DDR4 2666MHz内存,512GB M.2 NVMe固态硬盘等高配,可以满足玩家对于游戏性能的需求。同时,身材轻薄,重量仅2.2kg,电池续航时间长,采用了全新的…

    PHP 2023年5月27日
    00
  • php将一维数组转换为每3个连续值组成的二维数组

    首先,我们需要了解一些php的基础知识。PHP中数组是一个有序的、可重复的、键值对(key-value)形式的数据结构。一维数组是一种最基本的数组类型,它只有一个下标,下标从0开始递增,当然也可以指定数组下标,如array(0 => ‘apple’, 1 => ‘banana’, 2 => ‘orange’)。 接下来,我们需要将一维数组转…

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