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

yizhihongxing

一个不易被发现的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日

相关文章

  • smarty模板数学运算示例

    下面详细讲解 “smarty模板数学运算示例” 的完整攻略: 1. 什么是Smarty模板? Smarty模板引擎是一个基于 PHP的模板引擎。Smarty模板引擎将业务逻辑与展现逻辑分开,使 HTML 代码更加简洁,易于维护。 为了使用Smarty模板引擎,需要在PHP项目中安装Smarty,并进行相关的配置。 2. Smarty模板数学运算示例 在Sma…

    PHP 2023年5月26日
    00
  • 微信小程序实现跳转详情页面

    关于微信小程序实现跳转详情页面,可以参考以下步骤: 步骤一:创建详情页面 首先,需要创建一个提供详情展示的页面,命名为”detail”。 在detail页面中,可以添加需要展示的内容,例如商品名称、价格、图片等,并根据需要进行布局。 步骤二:定义跳转路径 接下来需要定义跳转路径,即在原页面上通过点击事件跳转到detail页面。 此时,可以使用navigato…

    PHP 2023年5月23日
    00
  • PHP中extract()函数的定义和用法

    这里是“PHP中extract()函数的定义和用法”的完整攻略。 1.函数定义 extract() 是 PHP 内置函数,在 PHP 5、PHP 7 中都有支持。它的作用是将数组中的键名作为变量名,将键值作为变量值。函数定义如下: extract(array $array, int $flags = EXTR_OVERWRITE, string $prefi…

    PHP 2023年5月25日
    00
  • PHP代码覆盖率统计详解

    PHP代码覆盖率统计详解攻略 什么是代码覆盖率 在软件测试过程中,代码覆盖率是一个重要的概念。代码覆盖率是指在测试中执行了多少代码行或语句的百分比。对于代码质量的评估来说,代码覆盖率是一个重要的指标。 为什么需要代码覆盖率 对于一个项目来说,代码覆盖率可以帮助我们评估测试的质量,确定测试的覆盖面积,还可以帮助我们发现代码中的潜在问题,减少后期维护的成本。 P…

    PHP 2023年5月23日
    00
  • php 读取文件乱码问题

    下面是详细讲解“php 读取文件乱码问题”的完整攻略。 前言 在使用 PHP 读取文件时,有时会遇到中文乱码的问题,这种情况通常是由于文件本身的编码和 PHP 所使用的编码不一致导致的。 解决方法 以下是两种解决方法,其中方法一适用于文件编码为 GBK 的情况,方法二适用于文件编码为 UTF-8 的情况。 方法一:使用 iconv 转码 如果文件编码为 GB…

    PHP 2023年5月26日
    00
  • php常量详细解析

    下面我来详细讲解“PHP常量详细解析”的完整攻略。 什么是PHP常量 在编程中,常量是不变的量,即一旦定义就无法修改。在PHP中,常量是指一个简单值的标识符。常量一旦被定义,就无法再次修改或撤销。 如何定义常量 在PHP中,常量有两种定义方式:常量名和常量值大小写敏感和不敏感的定义方式,如下所示: 1. 定义常量名和常量值(大小写敏感) define(&qu…

    PHP 2023年5月23日
    00
  • PHP实现简单爬虫的方法

    下面我来详细讲解一下在PHP中实现简单爬虫的方法。 1. 爬虫原理 爬虫是一种自动化的数据抓取程序,实现简单的爬虫需要了解如下基本步骤: 获取需要抓取的网页内容,可以使用Curl或file_get_contents等函数来获取; 解析网页内容,提取所需信息,可以使用正则表达式或XPath等方式; 把抓取到的数据进行处理,最后存储在数据库或文本文件中。 下面我…

    PHP 2023年5月23日
    00
  • PHP实现的敏感词过滤方法示例

    下面我会给出详细的“PHP实现的敏感词过滤方法示例”的完整攻略。 1. 敏感词过滤的背景 在网站内容审核中,为了规范和清爽的内容,我们通常需要过滤敏感词。 敏感词可以是禁止词、敏感词、政治词汇、色情词汇等,过滤敏感词不仅有助于提高内容的质量和规范性,也有助于网站的健康发展。 2. 敏感词过滤的实现方式 敏感词过滤的实现方式通常有两种:一种是基于字典的过滤方式…

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