红与蓝:现代Webshell检测引擎免杀对抗与实践

article/2025/9/18 1:48:33

上半年Webshell话题很火,业界举办了数场对抗挑战赛,也发布了多篇站在安全产品侧,着重查杀思路的精彩文章,但鲜有看到以蓝军视角为主的paper。

作为多场挑战赛的参赛者及内部红蓝对抗的参与者,笔者试着站在蓝军角度,聊聊现代Webshell对抗的一些思路,也以PHP Webshell为例,分享包括利用PHP自身bug、构造PHP内存马、强制赋值私有变量等一些还没有被提及到但又比较有趣的trick。

希望能对正在参与某些大型攻防对抗演练的你有所收获。

1 轻松绕过传统规则查杀

即便是现在一些主流商业产品,也大量沿用了传统木马特征检测的思路,使用规则或者样本库作为单一查杀手段。
对蓝军来说,这样的安全防护能力无疑是十分单薄和脆弱,通常是不堪一击的。

1.1一个极端的case

先来看一个极端的case
在这里插入图片描述

一个公开的Webshell

这样一个在百度就可以搜索到的webshell,自然会被检出查杀。但只是将其做一个简单变形:
在这里插入图片描述
POST改成GET

将POST改成GET,就能成功绕过该产品。可见即使是很多商业级产品,也只是简单维护了一个样本库而已。

这虽然是一个比较极端的case,但在面对主流的规则查杀产品时,对抗原理也是相通的,只是需要更高强度地编码。

1.2 花括号的妙用

在这里插入图片描述

PHP中,实现了数组索引对于curly brace的支持(7.4之后已标记为deprecated,commit 4416)

这意味着一个数组索引a[0]中的方括号也可以用花括号{0}替代,同时再插入一些圆括号,使原义不变,但正则却匹配不到,便可以成功bypass几乎所有主流规则查杀工具。

更多这类符号可以从词法分析角度挖掘,对于不同的编程语言,其编译器源码或者官方文档中会有对Token的定义。
在这里插入图片描述

PHP Token列表

通过查找Space、Separator、Comment、Other等类别,能发现更多有趣的trick。

除此之外,利用加密、或者异或等数学运算生成的样本,也能达到特征湮灭的目的,传统规则查杀的绕过不是本篇重点,这里不再一一列举。其根本原因是,正则表达式的意义就只是在有限长的字符集中匹配有限长度的字符子集,但PHP等编程语言却是图灵完备的,其在字符层面上的排列会有无穷种组合,所以通过高强度的编码便能达到bypass目的。

正则表达式和图灵完备的编程语言之间天然的矛盾也决定了,无论怎样复杂的规则都无法从字符层面cover住图灵完备的PHP等语言,必然带来绕过的可能。

2 突破现代Webshell查杀引擎

在上半年发起公开挑战赛的数款Webshell检测产品都聪明地摒弃了规则方式,通过静态分析或沙箱执行等手段,尽可能地贴近编程语言的解释和执行,有效地减少了传统绕过的可能。

但同时在参赛时也发现,由于静态分析或沙箱执行本身的缺陷,也带来了新的bypass可能。

2.1静态分析缺陷

静态分析也就是白盒的思路,从语法树角度实现了从sink->source的追溯,其一般的工作路径是这样:
在这里插入图片描述
通过词法分析->语法分析->语义分析实现了对程序语法上的理解。但由于代码没有真正run起来,实际上并不能实现对一段代码完全地理解,尤其是在面对PHP这类较为灵活的脚本,而非静态类型语言时,利用这点缺陷可以发掘出非常多的case。

2.1.1利用php自身的bug

最极端的情况是,利用php解释器或其他php底层的bug,使语法树和实际run起来的代码表达不一致,达到在语法层面合法,但实际运行起来是webshell的目的。

在这里插入图片描述

在这个case中,按照php的语法,并没有任何操作对KaTeX parse error: Expected 'EOF', got '&' at position 27: …了修改(php中引用必须显式=&̲形式)。但在实际运行时由于ph…bar->arr的值实际上被改变,key中会新增system和$_GET[mo]值。

从语法树角度看是回调了两个空值,但实际运行时却是回调了
register_tick_function(‘system’,$_GET[‘mo’]);
成功绕过所有主流的静态分析工具。

不过PHP官方并不将其视为一个bug,官方对此的解释是
在这里插入图片描述

但从PHP对引用的定义来看,必须显式使用=&操作才能获取到引用的返回。如果非要强行解释的话,笔者认为是当执行&get_value( k e y ) 时 实


http://chatgpt.dhexx.cn/article/QCsakx0g.shtml

相关文章

堪比熊猫烧香!中国新型蠕虫病毒大爆发!电脑瞬间报废

堪比熊猫烧香!中国新型蠕虫病毒大爆发!电脑瞬间报废 近日,深信服安全团队监测到一种名为incaseformat的病毒,全国各个区域都出现了被incaseformat病毒删除文件的用户。 经调查,该蠕虫正常情况下表现为文件夹蠕虫&#…

Dreh zelle acht hoch

Android6.0权限和SharedPreferences存储 static class MyTask extends AsyncTask<String,String,String> { Override protected String doInBackground(String... strings) { FileOutputStream outnull; InputStream inputStreamnull;//网络连接的输入流 HttpURLConnecti…

json.cp37-win32.pyd HEUR/QVM30.2.223F.Malware...

问题 使用pyinstaller导出exe,运行时候会被360杀毒报木马. 病毒类型是HEUR/QVM30.2.223F.Malware.Gen 木马文件是 pandas库下的一个文件 \Python\Python37-32\Lib\site-packages\pandas\_libs\json.cp37-win32.pyd 原因 32位的pandas文件是 json.cp37-win32.pyd (32位的,3…

Herm Chart

参考链接 https://blog.csdn.net/QianLiStudent/article/details/111872100 https://www.jianshu.com/p/4bd853a8068b 1 概念 1.1 Helm 1.1.1 Helm是什么&#xff1f; Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum 或者Pyt…

关于桌面程序被安全软件误判为HEUR:Trojan.Win32.Generic的解决方案

最近写了一个桌面程序&#xff0c;里面用了些读取系统环境变量、提取文件图标、启动外部程序之类的操作。 然后…………卡巴斯基就把它识别成了HEUR:Trojan.Win32.Generic………… 咱遵纪守法好程序&#xff0c;怎么说是木马就是木马了呢&#xff1f;&#xff1f;&#xff1f; …

从0到1学会使用SpringBoot 搭建mock Server

做过接口测试的同学一定听说过mock Server&#xff0c;大家会觉得其很神秘&#xff0c;很高大上&#xff01;mock Server出现的原因是现今的业务系统很少有孤立存在的&#xff0c;它们或多或少需要使用兄弟团队或是其他公司提供的服务&#xff0c;这给我们的联调和测试造成了麻…

Postman mockserver详细教程

转自&#xff1a; https://blog.csdn.net/testdeveloper/article/details/80559538 模客API接口链接&#xff1a;http://mock-api.com/ http://mock-api.com/ http://mock-api.com/ http://mock-api.com/ 1.发送一个request 发送请求之后在History标签下保存了请求的数据&a…

postman如何使用mockserver?

mock服务&#xff0c;实现创建一个url&#xff0c;设定response Body&#xff0c;通过访问这个假的url&#xff0c;就能得到想要的返回结果。 应用于&#xff0c;当后端接口如A没有开发完成&#xff0c;但是当前测试又依赖于接口A时&#xff0c;就可以用mock服务&#xff0c;访…

Postman接口Mock Server服务器设置

目录 一、适用场景 二、设置步骤 2.1.创建一个mock server 2.2.配置mock server 2.3.Mock Servers创建成功一个新的mock地址 2.4.环境变量Environments&#xff1a;生成一个mock server新的环境变量 2.5.项目集Collections&#xff1a;生成一个mock server新的项目集&am…

java mockserver搭建_使用Moco搭建Mock Server教程

Moco是一个简易的Mock Server搭建工具 一、准备工作 2.电脑需要安装Java环境 二、运行Moco 打开terminal&#xff0c;运行命令 java -jar http -p -c < configuration -file> &#xff1a;moco-runner-xxx-standalone.jar包的路径 &#xff1a;http服务监听的端口 &#…

用 java 安装 mockserver_前端工程化-Mock Server:使用Node+json-server+mock.js搭建Mock Server...

目的 为了便于前后端分离开发&#xff0c;前端在本地启动mock服务进行开发&#xff0c;后续对接联调时只需将接口地址改成真实地址即可。 一个优秀的mock server应具备以下功能&#xff1a; 随机数据生成&#xff0c;避免手动创建数据&#xff1b; 真实接口体验&#xff0c;内存…

android端使用mockServer

小伙伴们可能在开发的过程中遇到这样的痛点&#xff1a;比如一个新的项目开发需求下来了&#xff0c;正常来说&#xff0c;要等到服务端将接口开发完毕&#xff0c;我们才去对接数据。但是&#xff0c;往往后端人员又很忙&#xff0c;不能立马开发出接口&#xff0c;这样就大大…

postman使用mock server

可以修改请求返回值&#xff08;response body数据&#xff09; 登录postman账号&#xff0c;也可以在线操作Postman API Platform 其他流程可参考 使用Postman实现mock server搭建详解_postman mockserver_阿波-赞的博客-CSDN博客

Postman搭建mock server接口

在工作中&#xff0c;有时后端的接口还没有开发好&#xff0c;前端这时可以用postman的mock server来创建一个伪接口&#xff0c;访问这个伪接口来获得自己想要的响应。 在学习接口测试的过程中&#xff0c;也可以用postman的这个功能&#xff0c;来帮助学习接口测试。 1.首先…

Postman Mock Server 使用

前言 科普界的老问题了。 大部分博客日志抄官方文档给的初始化样例&#xff0c;啥也不说。 看完除了会create&#xff0c;啥也不会了。 自食其力研究一下。 创建 略。 见document。 https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/moc…

Mock Server基本使用方法

Mock Server 什么是mock servermock server的作用初始Flask配置文件路由系统 【基于flask框架实现Mock Server】get基本方法使用 什么是mock server 实现mock功能的一个服务 mock server的作用 现今的业务系统很少有独立存在的&#xff0c;他们或多或少需要使用兄弟团队或者…

gRPC Mock Server

PowerMock是一个Mock Server的实现&#xff0c;它同时支持HTTP与gRPC协议接口的Mock&#xff0c;并提供了灵活的插件功能。 这个工具面向于前后端、测试等对有接口Mock需求的开发人员&#xff0c;也可以作为一个通用的Mock服务&#xff0c;部署在网关架构或API管理平台中&#…

mock server java_1分钟搭建极简mock server

1、无聊的背景、起源&#xff1a; 如今的业务系统越来越复杂庞大&#xff0c;各个功能直接的调用也是多如牛毛&#xff0c;但如果在联调的时候&#xff0c;恰好被调的接口正在开发&#xff0c;怎么办&#xff1f;傻傻的等么&#xff0c;不存在的&#xff01;这时会搭建一些serv…

Mock Server入门及实践

分享一个大牛的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;希望你也加入到人工智能的队伍中来&#xff01;请轻击人工智能教程 什么是Mock Server&#xff1f; Mock测试&#xff1a;就是在测试过程中&#xff0c;对于某些不容易构造或者不容易…

用 java 安装 mockserver,Mock Server实践

背景 在美团服务端测试中&#xff0c;被测服务通常依赖于一系列的外部模块&#xff0c;被测服务与外部模块间通过REST API或是Thrift调用来进行通信。要对被测服务进行系统测试&#xff0c;一般做法是&#xff0c;部署好所有外部依赖模块&#xff0c;由被测服务直接调用。然而有…