Cisco - vmanage
路径 1
(示例来自https://www.synacktiv.com/en/publications/pentesting-cisco-sd-wan-part-1-attacking-vmanage.html)
在查阅一些与confd和不同二进制文件相关的文档后(可通过Cisco网站上的帐户访问),我们发现为了对IPC套接字进行身份验证,它使用位于/etc/confd/confd_ipc_secret中的一个密钥:
vmanage:~$ ls -al /etc/confd/confd_ipc_secret
-rw-r----- 1 vmanage vmanage 42 Mar 12 15:47 /etc/confd/confd_ipc_secret记得我们的Neo4j实例吗?它是在vmanage用户的权限下运行的,因此允许我们使用先前的漏洞检索文件:
GET /dataservice/group/devices?groupId=test\\\'<>\"test\\\\\")+RETURN+n+UNION+LOAD+CSV+FROM+\"file:///etc/confd/confd_ipc_secret\"+AS+n+RETURN+n+//+' HTTP/1.1
Host: vmanage-XXXXXX.viptela.net
[...]
"data":[{"n":["3708798204-3215954596-439621029-1529380576"]}]}confd_cli程序不支持命令行参数,但会调用/usr/bin/confd_cli_user并传递参数。因此,我们可以直接调用/usr/bin/confd_cli_user并附上我们自己的参数。然而,由于我们当前的权限无法读取,所以我们需要从rootfs中检索它并使用scp进行复制,读取帮助信息,然后使用它获取shell:
路径 2
synacktiv 团队的博客¹ 描述了一种优雅的方式来获取 root shell,但需要注意的是,这需要获取 /usr/bin/confd_cli_user 的副本,而该文件只能被 root 读取。我找到了另一种无需这么麻烦就能升级到 root 的方法。
当我反汇编 /usr/bin/confd_cli 二进制文件时,我观察到以下内容:
当我运行“ps aux”时,我观察到以下内容(注意 -g 100 -u 107)
我假设“confd_cli”程序将从已登录用户收集的用户ID和组ID传递给“cmdptywrapper”应用程序。
我的第一次尝试是直接运行“cmdptywrapper”,并提供-g 0 -u 0参数,但失败了。似乎在某个地方创建了一个文件描述符(-i 1015),我无法伪造它。
如synacktiv的博客中所述(最后一个示例),confd_cli程序不支持命令行参数,但我可以通过调试器影响它,幸运的是系统中包含了GDB。
我创建了一个GDB脚本,在其中强制API getuid 和 getgid 返回0。由于我已经通过反序列化RCE获得了“vmanage”权限,我有权限直接读取/etc/confd/confd_ipc_secret。
root.gdb:
控制台输出:
最后更新于