从F5 BIG-IP RCE漏洞(CVE-2023-46747)来看请求走私的利用价值

news2024/10/6 1:41:30

0x01 前言

F5 BIG-IP广域流量管理器是一种网络流量管理设备,用于提升链路性能与可用性。F5在金融行业具有特别广泛的使用量,做过各大银行攻防演练的小伙伴对这个系统应该不会陌生。

最近爆出的CVE-2023-46747漏洞能达到远程RCE的效果,属于严重级别的安全漏洞。有意思的是这个漏洞和“AJP请求走私”有关。相信很多小伙伴是第一次听说这种漏洞类型,本文将对请求走私漏洞和CVE-2023-46747做一个详细介绍和分析。

0x02 AJP请求走私介绍

较早出现的AJP请求走私漏洞是CVE-2022-26377,关于该漏洞的详细信息已经有作者进行过分析,感兴趣的读者可以查看原文https://www.ctfiot.com/44809.html,这里我们关注的是AJP请求走私漏洞的危害。

AJP请求走私漏洞影响Apache Httpd < 2.4.54,注意这里直接受影响的并不是tomcat,所以并不是所有的java网站都受请求走私漏洞的影响,而是只有启用了httpd服务的网站才受此漏洞影响,类似于现在前后端分离中nginx服务的作用。在F5 BIG-IP中启动的WEB服务的架构如图2.1所示,并且在F5-BIG-IP中的httpd版本2.2.15,受CVE-2022-26377漏洞影响。

图片

图2.1 F5 BIG-IP中的WEB服务架构

图片

图2.2 F5 BIG-IP中的httpd版本

AJP请求走私漏洞并不是一个高危漏洞,在各个CVSS评分在6.5-7.5之间,所以一直没有受到我的关注,只是觉得这是一个仅供研究没有实际意义的理论漏洞。在这次F5 BIG-IP的RCE漏洞爆出之后,我才重新对这个漏洞进行研究。关于此漏洞的详细理论可以参考上面的文章,这里主要总结下面的几个关键点:

1) 浏览器并不能直接发送AJP协议的数据包,需要依赖于Apache的 proxy_ajp 模块进行反向代理,暴露成 HTTP 协议给客户端访问。

2) AJP协议对于POST类型的HTTP请求会分成 header 和 body 两个数据包发送,由于处理body数据时,其中前面四位固定格式与Forward Request 数据包完全一样,导致本来应该是一个数据包body部分的数据,可能在进行AJP转发时被识别为另一个数据包。这也是AJP请求走私的本质原理和危害,如图2.3所示。

3) AJP请求走私时需要使用Transfer-Encoding: a, chunked 进行分块传输。

图片

图2.3 AJP请求走私流程

从图2.3可以看出,整个AJP请求走私的流程是可以把一个HTTP请求经过AJP代理转化之后转化为两个AJP请求,这也是请求走私名字的来源。

0x03 CVE-2023-46747漏洞分析

经过0x02的分析已经对AJP请求走私有了初步的了解,但是实际上还是很难看出这样的漏洞能导致RCE效果。

从官方对这个漏洞的描述中可以看出,此漏洞仅影响开放了TNUI接口的系统(F5 BIG-IP默认启用),这是因为在/config/httpd/conf.d/proxy_ajp.conf文件中定义了AJP代理的配置,其中只会对tmui相关接口进行代理,如图3.1所示。

图片

图3.1 TMUI接口中的AJP代理配置

如图2.1所示,httpd服务监听的IP是0.0.0.0,所以是可以被外网用户直接访问到的,httpd提供反向代理的功能,把请求转发到tomcat java监听的80端口。最初看到这个漏洞的时候,我一直在java代码中寻找鉴权的逻辑,以图找到通过AJP请求走私绕过鉴权的方式,但是找了很久都没有找到,甚至我在F5的JAVA代码中没有找到任何的Filter。后来在翻阅F5的历史漏洞分析文章中才看到原来F5的鉴权并不在JAVA代码中,而是在httpd模块中。

F5实现了自己的pam进行认证,模块路径为/usr/lib/httpd/modules/,其中,涉及到login.jsp授权的是mod_f5_auth_cookie.so文件。反汇编之后,大概是这样的。我们能够请求/tmui/login.jsp而不需要进行身份验证。

图片

图3.2 访问/tmui/login.jsp不需要授权

如果直接访问其他jsp文件,在没有通过身份验证的情况下,会被重定向到/tmui/login.jsp

图片

图3.3访问其它页面需要授权

这也就说明在CVE-2023-46747漏洞的POC利用脚本中通过访问/tmui/login.jsp(这个页面是不需要授权,又可以进行AJP请求转化的页面),在body中添加AJP请求走私的内容,就可以达到绕过鉴权的效果。

poc地址:

https://www.ddpoc.com/poc/DVB-2023-5391.html

在使用的时候注意,部分BurpSuite会去掉Transfer-Encoding头,自动从分块传输转化为普通传输导致检测失败,所以在使用的过程中尽量不要使用Burp代理,如果非要抓包可以使用Charles,如图3.4所示。

图片

图3.4 使用Burp代码导致检测失败

去掉Burp代理之后,在Charles中可以看到正常的Chunked请求体和请求头,并且运行成功之后可以执行命令,如图3.5所示。

图片

图3.5 通过POC可以正常绕过权限添加用户并执行命令

关于绕过权限之后F5 BIG-IP执行命令的逻辑在F5历史漏洞CVE-2022-1388中已经使用过,其实F5 BIG-IP本身就提供了接口/mgmt/tm/util/bash为后台用户执行系统命令的,有兴趣的读者也可以看https://mp.weixin.qq.com/s/wUoBy7ZiqJL2CUOMC-8Wdg了解详细的创建用户和后台命令执行的逻辑。

0x4 结论

CVE-2023-46747算是请求走私漏洞的典型应用场景,把一个中低危的漏洞放在特定的场景中放大危害造成RCE效果,整个利用过程就像是为AJP请求走私量身定制一样。

首先,F5 BIG-IP使用httpd来转发前端用户请求,并且对特定接口/tmui/*开启AJP请求转发功能。

其次,F5 BIG-IP的用户鉴权逻辑在httpd的so文件中实现,而不是在java代码中是实现。甚至在后端的java代码中没有任何鉴权逻辑,导致只要请求转发到后端java代码则可以访问到。通过AJP请求走私可以把一个隐私的添加用户的请求隐藏在未授权接口/tmui/login.jsp请求中,导致绕过了F5鉴权的逻辑把添加用户的请求转发到后端java代码。

最后,添加的用户在后台可以直接命令执行导致RCE效果。

参考:

https://mp.weixin.qq.com/s/wUoBy7ZiqJL2CUOMC-8Wdg

https://github.com/W01fh4cker/CVE-2023-46747-RCE

https://www.ctfiot.com/44809.html

https://blog.csdn.net/weixin_39541693/article/details/111112257

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈消防设备电源监控系统在大型建筑内的应用

【摘要】&#xff1a;当建筑内火灾发生时&#xff0c;各类消防设备能否正常运行、能否发挥作用是初期火灾扑救是否成功的重要条件之一&#xff0c;而稳定可靠的消防设备电源则是消防设备正常工作的保障。因此针对消防设备电源的监测系统至关重要。 【关键词】&#xff1a;消防…

Python 既是解释型语言,也是编译型语言

哈喽大家好&#xff0c;我是咸鱼 不知道有没有小伙伴跟我一样&#xff0c;刚开始学习 Python 的时候都听说过 Python 是一种解释型语言&#xff0c;因为它在运行的时候会逐行解释并执行&#xff0c;而 C 这种是编译型语言 不过我今天看到了一篇文章&#xff0c;作者提出 Pytho…

5G与物联网应用:新一代网络技术融合开创新时代

5G与物联网应用&#xff1a;新一代网络技术融合开创新时代 随着信息技术的不断演进&#xff0c;5G和物联网作为新一代网络技术&#xff0c;正在引领我们走向一个更加智能化、互联互通的新时代。本文将分析5G与物联网应用的技术原理、应用场景与发展趋势&#xff0c;并探讨它们…

使用 matlab 的 Robotics ToolBox 完成5自由雄克机械臂的建模与运动学仿真,并计算8个点的运动轨迹,绘制运动动画

机器人包含5个关节&#xff0c;建立以下的DH参数表 matlab代码 %机器人学导论仿真大作业&#xff08;RTB&#xff09; clear clc h figure; axis tight manual filename SchunkRobot_Simulation.gif;%Schunk机械臂参数的输入 L10.35; L20.305; L30.3;%DH参数建立 Joint1 L…

TextMate v2.0.23(文本编辑器)

Mac上好用的文本编辑器是哪个&#xff1f;TextMate 2 mac版是Macos上一款文本编辑器&#xff0c;支持大量编程语言并作为开源开发。该软件与“BBEdit”并成为苹果电脑上的EMACS和vim&#xff0c;对于程序员来说非常的适合&#xff0c;可以定制许多贴心的功能。为专业脚本编写者…

计算一棵二叉树的单分支数(c语言代码实现)

本题代码如下 int num(tree t) {if (!t)return 0;else if ((t->lchild && t->rchildNULL)|| (t->lchildNULL&& t->rchild))//计算单支树return num(t->lchild) num(t->rchild) 1;else return num(t->lchild) num(t->rchild); } 完…

自制数据集:点云变化

代码 在干净的点云数据集中加入噪声时&#xff0c;由于不同点云的尺寸不同&#xff0c;很难控制噪声的幅度。为此&#xff0c;需要将所有点云变换到 [ − 0.5 , 0.5 ] 3 [-0.5,0.5]^3 [−0.5,0.5]3的空间当中。下面是一种将点云数据集中的所有点云变换到 [ − 0.5 , 0.5 ] 3 […

git命令行操作

git remote update origin --prune 更新本地的git分支保持和远程分支一致 git clone -b develop XXX 拉取某个分支的代码 1、创建一个空文件夹&#xff0c;在其中打开Git Bash Here&#xff0c;输入&#xff1a; git clone 刚刚复制的粘贴过来&#xff0c;回车 2、打开你拉下…

ArcGIS Pro设置谷歌影像(无水印)

1 打开软件&#xff0c;命名工程文件&#xff0c;底图&#xff08;Basemap&#xff09;选择【天地图】。 2 点击【视图&#xff08;View&#xff09;】——>【目录面板&#xff08;Catalog pane&#xff09;】&#xff0c;在【门户&#xff08;Portal&#xff09;】中搜索【…

20231107-前端学习炫酷菜单效果和折叠侧边栏

炫酷菜单效果 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>炫酷菜单效果</title><…

【达梦数据库】学习笔记

【达梦数据库】学习笔记 【一】如何使用idea连接达梦数据库【二】idea项目导入本地的达梦数据库驱动jar包&#xff08;方法一&#xff09;【三】idea项目把本地的达梦数据库驱动jar包安装到本地仓库&#xff08;方法二&#xff09; 【一】如何使用idea连接达梦数据库 &#xf…

[LeetCode]-138. 随机链表的复制

目录 题目 解题步骤 1.拷贝节点插入原节点的后面 2.置每个拷贝节点random 3.拷贝节点解下来&#xff0c;尾插到一起&#xff0c;恢复原链表 完整代码 题目 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表…

无人机红外相机的畸变矫正

在项目开展过程中&#xff0c;发现大疆M30T的红外相机存在比较明显的畸变问题&#xff0c;因此需要对红外图像进行畸变矫正。在资料检索过程中&#xff0c;发现对红外无人机影像矫正的资料较少&#xff0c;对此&#xff0c;我从相机的成像原理角度出发&#xff0c;探索出一种效…

Web前端—CSS高级(定位、高级技巧、CSS修饰属性、综合案例:购物网站轮播图)

版本说明 当前版本号[20231108]。 版本修改说明20231107初版20231108对知识点&#xff08;圆点&#xff09;进行补充 目录 文章目录 版本说明目录day08-CSS高级01-定位相对定位绝对定位定位居中固定定位堆叠层级 z-index定位总结 02-高级技巧CSS精灵案例-京东服务HTML结构CS…

Helix Toolkit:为.NET开发者带来的3D视觉盛宴

推荐一个基于.Net开源的3、功能强大的3D图形库和工具包&#xff0c;适用于WPF应用程序的3D渲染和开发。 01 项目简介 Helix Toolkit是一个开源的3D库&#xff0c;主要用于WPF应用程序。它有许多优点&#xff0c;例如提供各种各样的功能&#xff0c;包括基于MVVM的3D模型编辑器…

Python---ljust()--左对齐、rjust()--右对齐、center()--居中对齐

作用&#xff1a;返回原字符串左对齐、右对齐以及居中对齐&#xff0c;不足的使用 指定字符 进行填充。 ljust 左对齐 rjust 右对齐 center 居中对齐 类似于Excel、Word文档中的对齐。 基本语法&#xff1a; 字符串序列.ljust(长度, 填充字符) 案例&#xff1a; …

[100天算法】-搜索旋转排序数组(day 64)

题目描述 升序排列的整数数组 nums 在预先未知的某个点上进行了旋转&#xff08;例如&#xff0c; [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] &#xff09;。请你在数组中搜索 target &#xff0c;如果数组中存在这个目标值&#xff0c;则返回它的索引&#xff0c;否…

【黑马程序员】SpringCloud——Eureka

文章目录 前言一、提供者与消费者1. 服务调用关系 二、远程调用的问题三、eureka 原理分析1. eureka 的作用 四、Eureka 案例1. 搭建 eureka 服务1. 服务注册1.1 注册 user-service1.2 启动 user-service3. order-service 完成服务注册 3. 服务发现1. 在 order-service 完成服务…

数据库约束及增删改查(CRUD)进阶-MySQL

文章目录 一、数据库约束1.1 约束类型1.2 NULL约束1.3 UNIQUE&#xff1a;唯一约束1.4 DEFAULT&#xff1a;默认值约束1.5 PRIMARY KEY&#xff1a;主键约束1.6 FOREIGN KEY&#xff1a;外键约束1.7 CHECK 约束&#xff08;了解&#xff09; 二、表的设计2.1 一对一2.2 一对多2…

极智AI | Whole-Body Multi-Person人体姿态估计之AlphaPose

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 Whole-Body Multi-Person人体姿态估计之AlphaPose。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq Whole-Body、…