一、初步侦察与服务识别
1.1 端口扫描
首先对目标主机 192.168.122.41
进行全端口扫描,以发现其上开放的网络服务。
sudo nmap 192.168.122.41 -p- --min-rate=5000 -A
图1: Nmap扫描结果,显示开放22, 8090, 和 8091端口
扫描结果显示,目标开放了三个端口:SSH (22)、HTTP (8090) 和另一个未知服务 (8091)。我们的攻击重点将首先放在 8090 端口上运行的 Web 服务。
1.2 Web应用识别
我们优先访问 http://192.168.122.41:8090
上的Web服务。通过检查页面页脚的版权信息,可以明确识别出该应用为 Confluence,其版本号为 7.13.6。
图2: Web服务首页,识别为Confluence 7.13.6
二、漏洞利用与初始访问
2.1 历史漏洞查询
针对已识别的 Confluence 7.13.6 版本,我们进行公开漏洞库查询。很快,我们发现一个编号为 CVE-2022-26134 的远程代码执行(RCE)漏洞,该漏洞影响了多个Confluence 7.x 版本,包括目标正在使用的版本。
图3: Confluence 历史漏洞查询结果
2.2 RCE漏洞利用
从 GitHub 上获取针对 CVE-2022-26134 的公开漏洞利用脚本(EXP)。执行该脚本后,我们成功在目标服务器上获得了反弹 shell,取得了对系统的初步访问权限。
图4: 成功利用EXP获得反弹shell
检查当前用户身份和系统中的用户列表,确认我们当前处于一个名为 confluence
的普通用户权限下,这也是运行该Web服务的用户。
图5: 确认当前为普通用户权限
三、本地信息收集与提权分析
3.1 发现可疑的备份脚本
获得初始访问权限后,我们在应用的根目录下进行文件搜寻,试图发现配置文件、凭证或其他可利用的信息。在此过程中,我们发现了一个名为 log-backup.sh
的shell脚本。
图6: 在项目根目录发现 log-backup.sh 脚本
从脚本名称和内容推断,其功能是将应用日志备份到 /root/logs
目录下。值得注意的是,目标目录位于 root
用户的家目录下,这意味着执行此脚本需要 root 权限。
3.2 提权路径分析
检查该脚本的文件权限,发现当前我们所处的 confluence
用户对此脚本拥有写入权限。
图7: 检查发现当前用户对脚本有写权限
基于以上两点发现,一个清晰的提权路径浮现出来:
- 脚本需要
root
权限才能成功执行。 confluence
用户可以修改该脚本内容。- 这极有可能意味着系统存在一个以
root
身份运行的定时任务(Cron Job),用于周期性地执行此备份脚本。
3.3 验证定时任务
为了验证我们的猜想,我们将进程监控工具 pspy
上传到目标服务器并执行。pspy
可以非侵入式地监控系统上的所有进程活动。很快,pspy
的输出证实了我们的判断:一个由 root
用户启动的定时任务每隔一段时间就会执行 log-backup.sh
脚本。
图8: pspy监控到root权限的定时任务正在执行该脚本
四、利用定时任务实现权限提升
4.1 修改脚本并植入后门
既然提权路径已经确认,我们便可以利用 confluence
用户对脚本的写权限,向其中植入提权命令。我们选择的命令是为 /bin/bash
程序设置 SUID 位。当一个可执行文件被设置了 SUID 位后,任何用户执行它时,都会临时获得该文件所有者(在这里是 root)的权限。
使用 echo
命令将提权代码追加到脚本末尾:
echo 'chmod u+s /bin/bash' >> log-backup.sh
4.2 获取Root权限
命令写入后,我们只需等待下一次定时任务的触发。当 root
用户执行被我们修改过的 log-backup.sh
脚本时,我们的 chmod u+s /bin/bash
命令也会以 root
权限被执行。
稍等片刻后,我们执行 /bin/bash -p
命令(-p
参数用于在启动bash时保持有效用户ID,这是利用SUID的关键),成功获得了一个 root 权限的 shell,完成了最终的提权。
图9: 植入SUID后门,成功提权至root