F5 big-ip从环境搭建到漏洞复现
图是偷的,过程是自己的
最后更新于
去F5官网下载90天试用版本。 地址:https://f5.com/zh/products/trials/product-trials
打开网站后,选择BIG-IP云版本
点击后,按照页面中的指示开始注册账号并申请key
注册地址如下:https://login.f5.com/resource/login.jsp?ctx=719748
若没有账号,点击页面中的create one
即可开始注册
因为我已经注册了,所以下面的步骤就不显示了,总之第一步,会输入邮箱地址
之后在邮箱中会出现一个设置密码的链接
(鬼知道中间省略了多少个步骤)
按照提示申请完秘钥之后,会收到这样一封邮件:
下载BIG-IP的.ova文件,这里因为在外面下载的太慢了,百度链接如下: 14.1.2版本OVA文件: 链接:https://pan.baidu.com/s/1VFHVwLhiDsW3W2x7fwcUuw 提取码:rbtk
14.1.2版本VMDK文件:(打开虚拟机,配置IP后可直接漏洞利用,root,admin/Admin!@#456) 链接:https://pan.baidu.com/s/1FdWZg9lf7dF109pLxedn7A 提取码:ali4
下载成功后,导入到虚拟机,开机即可
开机后,会提示输入密码,前两次都是默认账号密码:root/default
之后修改密码,要求:必须包含大小写字母与数字,符号,长度不得小于8位,此处可设置Admin!@#456
设置该虚拟机的网络,网卡任意模式即可 (原有好几块网卡,可以删除一些,最后只剩一张)
在/config目录下,输入config,设置IP地址,默认选择IPV4,然后连续按两次回车,等待命令行出现即可
设置好IP地址后,建议使用nmap等端口扫描工具扫一下,毕竟我的环境和小伙伴的环境BIGIP的运行端口都不一样
打开网站,用户名与密码不是默认的admin/admin(那是高版本的),而是刚设置的Admin!@#456
此时网站处于未激活状态,可点击NEXT进行激活
输入申请到的邮箱里的registration key.点击Next
将1中的内容复制到2中新开的网页中并NEXT,最后将生成的内容粘贴到3中即可
重新登录,即可激活成功
效果图如下:
F5 Tmsh命令执行
创建bash脚本:对应的F5的命令为command后面内容 请求路径为下图:
URL中存在../;绕过登录验证,这个是属于Tomcat对URI解析差异导致绕过了原有的权限校验,导致可以直 接访问到tmshCmd.jsp, 对应代码:tmshCmd_jsp.java 文件 cmd参数直接从请求中获取。
跟进WorkspaceUtils类中runTmshCommand方法,从导入包中寻找com.f5.tmui.locallb.handler.workspace.WorkspaceUtils对应的文件。
在lib中找到对应jar包,反编译:
紧接着上文runTmshCommand方法,可以看到在38行处,做了命令判断,命令被分割后,仅允许 create,delete,list,modify等开头的命令。
跟进Syscall.callElevated方法,调用了call方法:
可以看到,args放到了ObjectManager里面,通过DataObject[] rs = om.queryStats(query);这行代码 把执行的命令的结果返回。
F5 任意文件写入
请求路径:
对应的jsp代码文件:
跟进对应的save方法,可以看到参数一路传递,fileName为路径,content为内容,最终通过 writer.println写入。
F5任意文件读取
请求路径:
对应的jsp代码文件:
对应具体实现方法:
7 月 7 日更新:
官方建议可以通过以下步骤暂时缓解影响(临时修复方案)
1) 使用以下命令登录对应系统:tmsh 2) 编辑 httpd 组件的配置文件; edit /sys httpd all-properties 3) 文件内容如下 include ' <LocationMatch "...;."> Redirect 404 / </LocationMatch> ' 4) 按照如下操作保存文件; 按下 ESC 并依次输入:wq 5) 执行命令刷新配置文件; save /sys config 6) 重启 httpd 服务。 restart sys service httpd 并禁止外部IP对 TMUI 页面的访问。
7 月 7 日更新: 官方初版安全通告里给出的临时缓解方案是在 httpd 配置文件中加入如下部分,以禁止请求的 url 路径里出现 ..; 进行路径跳转:
然而却可以通过 /hsqldb; 无需跳转,去直接请求 org.hsqldb.Servlet,进一步执行 Java 代码。这种漏洞利用的方式,可以绕过上述配置规则。
7 月 9 日更新:
官方安全通告里给出的第二版临时缓解方案中在 httpd 配置文件中加入规则配置如下,以禁止请求的 url 路径里出现 ; 进行授权认证绕过:
然而却可以通过 /hsqldb%0a 的请求方式,再次绕过以往的漏洞缓解规则,去直接请求org.hsqldb.Servlet,进一步执行 Java 代码。