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

相关文章

  • 推荐Discuz!5的PHP代码高亮显示与实现可运行代码

    下面让我详细讲解如何推荐Discuz!5的PHP代码高亮显示,以及如何实现可运行代码的完整攻略。这个过程可以分为以下几个步骤: 1. 安装插件 要实现Discuz!5的PHP代码高亮显示,我们需要先安装一个插件。推荐使用的插件是Discuz!代码高亮插件,可以在Discuz!官网进行下载,或者直接搜索安装。下载完毕后,将插件文件夹上传至论坛目录下的 ./in…

    PHP 2023年5月23日
    00
  • PHP实现网站应用微信登录功能详解

    PHP实现网站应用微信登录功能详解 简介 随着移动互联网的快速发展,微信已经成为了我们日常生活中不可或缺的一部分。因此,在网站开发中添加微信登录功能已经成为了必要的一步。本文将详细讲解如何使用PHP实现网站应用微信登录功能。 准备工作 在使用本文中的代码前,需要做一些准备工作: 准备微信公众平台的开发者账号,并且在该账号下创建一个应用并且获取到该应用的App…

    PHP 2023年5月23日
    00
  • PHP中多维数组的foreach遍历示例

    下面是详细的攻略: 什么是多维数组 多维数组是指数组中包含有其他数组的数组,即数组的元素又是一个数组。 例如:$arr = array( array(‘name’=>’张三’, ‘age’=>20), array(‘name’=>’李四’, ‘age’=>22), array(‘name’=>’王五’, ‘age’=>25…

    PHP 2023年5月27日
    00
  • php守护进程 加linux命令nohup实现任务每秒执行一次

    下面是详细讲解“php守护进程加linux命令nohup实现任务每秒执行一次”的完整攻略。 什么是php守护进程 在Linux系统中,守护进程是一种长期运行的程序,常驻在系统中并且不会因交互式用户登录而受到影响。守护进程一般由另一个程序(如系统初始化脚本)启动,并在后台运行,一般起着监控系统的作用,将会在商业项目中大量使用。而PHP守护进程则是运行在PHP环…

    PHP 2023年5月23日
    00
  • php数组和链表的区别总结

    PHP 数组和链表是两种数据结构,它们都能储存一组数据,但是它们间还是有很大的区别。本文将从以下几个方面总结 PHP 数组和链表的区别: 存储方式 PHP 数组和链表的存储方式是不同的。PHP 数组是一种连续的线性结构,其内部元素的存储是连续的。而链表则是由一系列节点组成,每个节点包含一个存储数据和一个指向下一节点的指针。 访问方式 由于 PHP 数组是连续…

    PHP 2023年5月26日
    00
  • 微信公众号小程序如何开通?微信公众号小程序开通教程

    微信公众号小程序开通教程 准备工作 在开通微信公众号小程序前,需要先进行以下准备工作: 拥有一个微信公众号的普通订阅号或服务号,且该公众号已通过微信认证; 在微信公众平台申请小程序功能并通过审核。 开通流程 步骤一:进入小程序管理页面 在浏览器中输入 https://mp.weixin.qq.com/,进入微信公众平台后台。 点击页面顶部导航栏的【开发】,然…

    PHP 2023年5月23日
    00
  • PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】

    PHP在InnoDB引擎下快速代建全文搜索功能简明教程【基于Xunsearch】 全文搜索是许多网站必备的一个功能,对于搜索引擎、新闻、博客等网站具有很大的作用。在使用MySQL作为数据库引擎的时候,我们可以通过全文索引来实现全文搜索。但是,在InnoDB引擎下,MySQL的全文索引只能支持英文搜索,对于中文或者其他非英文的搜索则无能为力。那么如何解决这个问…

    PHP 2023年5月26日
    00
  • Android 异步加载图片分析总结

    Android 异步加载图片分析总结 背景 在Android应用中,经常会有需要显示图片的情况,而加载图片是一个相对耗时的操作,如果在主线程中进行,就会出现界面卡顿的现象,严重影响用户体验。为了解决这个问题,Android提供了异步加载图片的方案,在本文中,将对异步加载图片的方案进行分析和总结。 加载图片的主要方案 方案一:使用AsyncTask进行图片加载…

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