介绍
在其一项操作中,红色团队以非特权用户的身份在周边网页上执行了命令。本文描述了对漏洞(CVE-2018-1685)的分析和利用,该漏洞可能允许攻击者读取任意文件,但不知道其公开细节。最后,我们将介绍一种方法,在玩Active Directory加入Linux机器时(通过Kerberos<a/a>)将这种类型的漏洞(任意文件读取)转化为完整的系统妥协(命令执行)。
特权升级eop漏洞
被入侵的机器是最近更新的红帽服务器,因此通过内核漏洞的特权升级被丢弃。在典型的例程检查后,检测到一些具有SUID位集的根拥有的可执行文件:
/home/db2test/sqllib/adm: total 5.3M drwxr-sr-x. 2 db2test db2test 112 Oct 8 10:29 . drwxrwsr-t. 19 db2test db2test 4.0K Oct 8 10:32 .. -r-sr-xr-x. 1 db2test db2test 152K Oct 8 10:29 db2audit -r-
s
r-xr-x. 1 root db2test 19K Oct 8 10:29
db2cacpy
-r-xr-xr-x. 1 db2test db2test 195K Oct 8 10:29 db2cap -r-
s
r-x---. 1 root db2test 32K Oct 8 10:29
db2iclean
-r-
s
r-x---. 1 root db2test 87K Oct 8 10:29
db2licm
-r-xr-xr-x. 1 db2test db2test 120K Oct 8 10:29 db2set
-r-sr-sr-x. 1 db2test db2test 4.7M Oct 8 10:29 db2trc
“db2test”用户似乎与IBM的数据库管理系统DB2测试安装有关。在谷歌快速搜索后,我们发现了供应商发布的关于其中一个可执行文件(db2cappy)的安全公告:
![图片[1]-从Linux环境中的N-day漏洞到Kerberos EoP](http://www.jinggr.com/wp-content/uploads/2024/11/image-1024x194.png)
![图片[2]-从Linux环境中的N-day漏洞到Kerberos EoP](http://www.jinggr.com/wp-content/uploads/2024/11/image-1-1024x125.png)
虽然它们没有透露有关漏洞的技术细节,但我们可以强调两个有趣的提示:
- 它可以允许本地用户读取系统上的任何文件。
- 在“变通方法”部分,他们指出,在为“配置助理”添加新数据库时,删除此二进制文件将删除向/etc/services添加端口的功能。
有了这些信息,红色团队开始发现漏洞。
CVE-2018-1685:漏洞狩猎
首先,我们下载可执行文件,以便在本地进行分析。我们还需要下载大约10个DB2库,以使该工具正常工作。
经过初步的静态分析后,我们可以分解它的行为。二进制文件接收2个命令行参数,在程序继续之前,它对每个参数执行检查。
第一次检查
它以某种混淆的方式检查第一个参数是否与以明文形式存储在“.rodata”段中的键匹配。
![图片[3]-从Linux环境中的N-day漏洞到Kerberos EoP](http://www.jinggr.com/wp-content/uploads/2024/11/image-2-1024x303.png)
第二次检查
在这种情况下,它检查第二个参数是否以字符串/tmp/services.
开头,可能是因为另一个DB2组件按照此模式生成文件。
![图片[4]-从Linux环境中的N-day漏洞到Kerberos EoP](http://www.jinggr.com/wp-content/uploads/2024/11/image-3.png)
脆弱性
如果满足这两个检查,该工具将指定文件(第二个参数)复制到/etc/services,并将其覆盖。可能的伪代码,简化,可能如下:
func main(argc, argv[]) {
init_db2()
if (argc is 3)
{
if (argv[1] equals HARDCODED_KEY) {
if (argv[2] startsWith "/tmp/services.") {
copy_file(argv[2], "/etc/services")
}
}
}
}
如果我们在 /tmp
目录下创建一个名为“services.”(或以此开头)的目录,我们可以触发复制 /tmp/services./../.. /etc/shadow
的操作,从而满足第二个检查条件。
你可以在该仓库中找到一个可用的漏洞利用程序,该程序还负责在利用后恢复原始的 /etc/services
文件。请注意,关键(第一个检查)可能因 DB2 版本或设置的不同而有所变化(我们无法对此进行测试)。
![图片[5]-从Linux环境中的N-day漏洞到Kerberos EoP](http://www.jinggr.com/wp-content/uploads/2024/11/image-4.png)
从任意读取到作为根的命令执行
由于它是通过Kerberos加入AD的Linux服务器,我们首先检查/tmp中是否有有效的TGT(ccache文件)(以重复使用它们),但所有文件都已过期。因此,我们寻找一个不需要用户交互的路径:keytab文件。
密钥选项卡包含计算机帐户的密钥(默认为红帽中的/etc/krb5.keytab)。您可以使用计算机帐户的密钥来伪造其服务(TGS)的门票。
为了从keytab中提取密钥,我们将脚本与DB2漏洞一起使用。
![图片[6]-从Linux环境中的N-day漏洞到Kerberos EoP](http://www.jinggr.com/wp-content/uploads/2024/11/image-5.png)
然后,使用来自impacket的ticketer.py工具,我们以在机器上拥有管理员权限的域用户的名义为服务器(“主机”SPN)的SSH服务制作TGS。
![图片[7]-从Linux环境中的N-day漏洞到Kerberos EoP](http://www.jinggr.com/wp-content/uploads/2024/11/image-6.png)
最后,我们可以使用生成的票证通过SSH连接,使用Kerberos进行身份验证。
结论
在本文中,我们看到了攻击者如何利用一个众所周知的漏洞,而这个漏洞没有漏洞或公开细节。这就是为什么必须尽快强调应用每个安全补丁的相关性,而不仅仅是在漏洞出现时(一个例子是Zerologon的发布,许多公司直到几个月后在GitHub上发布一些漏洞才看到它的严重性)。