多条件触发的免杀 Webshell
Werqy3 历史精选 485浏览 · 2025-03-08 12:23

前言

在做webshell免杀的时候,很多情况下都是对system,eval等命令执行函数进行匹配,如果说把变量当做一个函数来使用的话,那是不是可以bypass了呢?这今天刚好看见有一个回调函数有这样的功能,而且也不会报毒,再仔细想想shellcode免杀,绕过云沙箱时,是不是会先判断一下是否在沙箱环境,在就不运行,不在就运行,那在webshell上面是不是也同样食用呢?甚至我们可以加一下条件,让代码只在特定的条件下运行呢?

array_walk

array_walk 是 PHP 中的一个内置函数,用于对数组中的每个元素应用用户自定义的回调函数。它可以遍历数组,并将数组的键和值传递给回调函数进行处理。array_walk 不会返回一个新的数组,而是直接修改原始数组。

函数语法:

Plain Text
复制代码

$array:要遍历的数组(按引用传递,可以直接修改)。

$callback:用户自定义的回调函数,接收两个参数(值,键),或者三个参数(值,键,$userdata)。

$userdata(可选):传递给回调函数的额外数据。

返回值:

成功时返回 true,失败时返回 false

示例代码:

Plain Text
复制代码
输出:

其实也就是把变量名当作函数,参数当作函数的参数

示例代码





结合HGCTF反序列化的免杀马

调用链:





只在浏览器开启时运行

一般来说,使用电脑都是离不开浏览器的,那这就是一个条件了,对浏览器进行检测主要是对UA头进行检测

Google Chrome

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36

Mozilla Firefox

Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0

测试一下:我现在开火狐浏览器,然后把火狐浏览器的UA头特征删除一下





当他未检测到时,就不会运行

云沙箱环境下不运行

沙箱环境是具有一定特征的,我们可以利用这些特征,作为避开代码运行的条件

检测文件或目录是否存在(如 /etc/hostname/home/sandbox)。

检测特定函数是否被禁用(如 execsystemshell_exec)。

检测特定扩展是否加载(如 suhosinrunkit)。

检测杀毒软件扫描时不运行

对于一些杀毒软件也有一定特征,有时候用户如果在没有装杀毒软件时被上马了,后面排查时,再用杀软时,我们就可以利用其杀软特征规避检测

在 Windows 系统上使用 tasklist 命令获取进程列表。

在 Linux 或 macOS 系统上使用 ps aux 命令获取进程列表。

检查进程列表中是否包含杀毒软件的关键进程名。

只在特定时间下运行

一般来说正常企业都是朝九晚五,那么我们是不是可以让木马在特定的时间下才运行呢,等到用户下班后,在对其公司电脑进行控制

使用 date('H') 获取当前小时(24 小时制)。

通过逻辑或(||)判断当前时间是否在 22:00 到 6:00 之间。

测试下:我现在的时间是20点





未满足条件,所以没有运行成功

改下时间看看



成功运行了

0 条评论
某人
表情
可输入 255