欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何利用Windows默认内核调试配置实现代码执行并获取管理员权限

来源:本站整理 作者:佚名 时间:2017-03-24 TAG: 我要投稿

一、前言
本文来自于很久以前我的一次现场渗透测试工作成果。在等待其他测试工作完成间隙,客户对我能否在某个Windows工作站上执行代码很感兴趣(原因在这里并不重要)。在测试现场,我拥有测试机的物理访问权限,因此这件事情不难完成。我最终的解决方案是利用Windows默认内核调试配置,在不对系统配置做出永久性修改的前提下实现了任意代码执行。
这种技术的优点在于它所使用的工具集很小,可以在工作中随身携带以防万一。然而,它要求目标设备存在已启用的COM1串口,且未使用TPM型Bitlocker或类似机制,这一条件不一定能得到满足。
有人可能会对此不以为然,因为能够物理访问目标机器意味着攻击目标已基本达成,这也是我为什么认为这种方法是Windows设备中存在的末日型漏洞。然而,内核调试配置是系统的默认设置,管理员可能不知道如何修改。从客户角度来看,这种方法让我们这些人看起来像是那种混蛋黑客,毕竟使用命令行CDB比WinDBG看起来更酷一些。
为了避免读者误解本文初衷,在此强调:这并不是一个Windows漏洞!
现在,让我们来看一下技术细节。
二、应用场景
你发现自己身处一个布满Windows工作站的房间中(希望是个合法场景),你的任务是在其中一台机器上获得代码执行权。首先映入你脑海的有以下几种办法:
1、更改启动设置,从CD/USB设备中启动,修改HDD
2、打开机器外壳,拉出HDD,修改其中内容并重新插入
3、滥用Firewire DMA访问来读写内存
4、滥用机箱后面的网络连接,尝试进行PXE引导或者对本机的网络/域流量开展MitM(中间人)攻击。
仔细观察工作站,你发现机器引导顺序第一位是硬盘硬盘引导,而BIOS密码的存在使你无法修改此顺序(假设本机BIOS不存在漏洞)。此外,此例中工作站机箱上有个物理锁,你无法打开它的外壳。最后,工作站没有Firewire或其他外部PCI总线来DMA攻击。我没有测试网络攻击场景,但进行PXE启动攻击或MitM攻击可能会遇到IPSec问题,导致攻击难以奏效。
这些工作站存在一个经典的9针串行接口。藉此我想到了Windows在COM1上有个默认配置的内核调试接口,然而内核调试在本案例中并没有启用。那么有没有一种办法使我们在不具备管理员权限下启用系统的内核调试功能呢?本文的答案是肯定的。接下来让我们来研究如何在这种场景下完成这一任务。
三、环境准备
在开始工作前,首先你的手头上需要具备以下几样东西:
1、测试机的串口(这是必要条件)。驱动安装正常的串口转接USB也行。
2、本地安装的Windows。这么要求主要是为了操作便利。现如今也许有工具可以在Linux/macOS上进行完整的Windows内核调试,但我对此表示怀疑。
3、一条调制解调器线缆。你需要这个东西来连接测试机器的串口与工作站的串口。
现在确保你的测试机上环境准备就绪,设置WinDBG使用本地COM口来进行内核调试。只需要打开WinDBG,在菜单中依次选择“文件”、“内核调试”或者按下CTRL+K组合键。你可以看到如下对话框:

在Port一栏填入正确的COM口值(即你的USB转串口值)你不需要修改波特率,保留Windows的默认值115200即可。你可以在另一个系统上以管理员运行“bcdedit /dbgsettings”命令来检查这个值是否设置正确。
你也可以通过这个命令来完成同样工作:

windbg -k com:port=COMX,baud=115200
四、在Windows 7上启用的内核调试功能
在Windows 7上启用内核调试功能十分简单(Vista上也是如此,但现在应该没多少人用了吧?)。重启工作站,在BIOS屏幕加载完毕后按下F8键,顺利的话你可以看到如下界面:
使用方向键,选择调试模式并回车,Windows开始启动。希望你转到WinDBG界面时可以看到界面上显示的系统启动信息。

如果启动信息没有显示,可能是COM口被禁用、内核调试配置发生改变或者你的USB转串口适配器工作不正常。
五、在Windows 8-10上启用内核调试功能
接下来看新版本的Windows上如何操作,你会发现按下F8时没有发生任何变化。这是因为微软自Windows 8以后对引导过程做的一个修改。随着SSD的流行以及Windows启动过程机制的更改,微软已逐渐摒弃F8键功能。此功能依然存在,但你需要在类似UEFI的菜单中进行配置。
现在有个问题,之前我们假设我们无法访问BIOS配置,因此我们也无法访问UEFI配置选项,你能做到的只是进入设置界面,选择重启后进入高级启动模式选项,或者在命令行中利用shutdown命令配合/r /o参数完成这一任务。
这些方法对我们来说都不适用。幸运的是有个文档中描述了另一种方法:在开始菜单中选择重启的同时按住Shift键,这样系统将在重启时进入高级启动选项模式。听起来此方法也不怎么有效,因为你还是得进入系统才能选择菜单。幸运的是在那台工作站的登录界面有个重启选项,而按住Shift这个技巧在这个界面还是可以正常工作。在登录界面右下角点击电源选项,按住Shift同时选择重启,一切顺利的话你可以看到如下界面:
选择“故障排除”选项,进入下一界面。

在这里选择“高级选项”,进入下一界面。

在此界面中,选择“启动设置”选项,进入如下界面。前面那个界面中你第一反应可能认为应该选择“命令行”选项以获取系统命令提示符,但这种情况下你还是需要一个本地管理员用户的密码。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载