首页
社区
课程
招聘
[翻译]介绍windows内核驱动程序的利用(第一部分) - 搭建环境
发表于: 2017-10-22 23:34 8138

[翻译]介绍windows内核驱动程序的利用(第一部分) - 搭建环境

2017-10-22 23:34
8138

关于 windows, exploit, driver
2017年9月2日

这是通过利用有漏洞的驱动程序,来利用Windows内核系列文章的第一部分。

我用来exploit的项目是HackSys Extreme Vulnerable Driver,它是一个非常酷的并且有一系列的不同维度的Windows驱动小漏洞,你可以编写基于IOCTL的exploit来利用内核。

驱动程序可以下载为x86和amd64预置 - 我选择了x86选项,只是为了使事情变得更简单。

要将驱动程序即时加载到Windows中,HackSys建议使用OSR加载驱动。这使得热插拔驱动程序很容易被加载到Windows中。

由于我正在运行Linux,所以无法在主机上运行WinDbg,并通过VirtualBox的人工串行端口与易有漏洞的Windows 7 VM进行通信。

我安装结束后有两个虚拟机(来源都是同一个纯净版的Windows 7 SP1 x86系统
),我使用VirtualBox在Linux主机上的文件在两个虚拟机之间建立串行连接。

关闭时,我设置虚拟机的串行端口为运行在WinDBG上,并进行以下调试:

而设置的虚拟机,会有hacksys驱动安装和exploit如下:

这使得机器可以通过临时文件通信/tmp/win_link

现在,VM安装好后,还要做一些配置,使通信可以正常地进行。

启动调试器VM并安装WinDbg。完成后需要配置环境变量,以便WinDbg知道内核标志的位置。将环境变量_NT_SYMBOL_PATH设置为https://msdl.microsoft.com/download/symbols

现在启动有漏洞的虚拟机,我们需要开启Windows调试选项。

首先,将当前的引导设置复制到我们将要编辑的新目录下:

此命令将会输出一个GUID,我们将使用它来引用刚才创建的调试选项。现在我们可以启用调试模式了。

完成了!在虚拟机启动调试模式的窗口上有一个引导选项 - 所以它通过串行发送信息(到我们的通信文件),所以调试器VM可以读懂它!

现在我们回到调试器并打开WinDBG。点击File->Kernel debug ,输入115200作为串行连接的波特率,端口是com1

重新启动有漏洞的VM,在引导菜单中选择“Debug”选项。让它启动进入桌面(需要一段时间),如果这样做,通过选择Debug->Break选项创建一个中断,这将中断有漏洞的机器。如果WinDbg在屏幕底部提供了一个kd>提示符,那么有漏洞的Windows VM不会让您与任何其他的Windows进行交互,那么中断就成功了!

现在,虚拟机配置为调试模式,我们希望在有漏洞的虚拟机上安装HackSys驱动程序,以便我们可以开始攻击测试。

默认情况下,驱动程序没有开启verbose选项,但是我们希望在调试HackSys驱动程序时,尽可能多地将信息打印到WinDbg控制台,因此我们必须启用verbose来调试字符串。

当虚拟机中断的时候,通过运行以下命令就可以更改WinDbg里的Default Mask 选项:

建议不要考虑速度问题,只需在VM上运行DebugView应用程序来查看调试的字符串 - 我没有遇到速度变慢的情况,所以我不用担心这个问题。

您可以在kd>提示符下输入g来继续执行命令。现在我们可以做任何想做的,所以开始安装驱动程序。

假设您已经将OSR驱动加载程序和内置的驱动程序下载到VM上,然后可以安装驱动程序。打开OSR可以设置驱动程序路径,并将服务设置为自启动,然后注册服务。注册完成,服务开启。

这样做会将一些调试字符串打印到WinDbg控制台。

现在驱动已经安装并正在运行,我们要安装HackSys驱动程序符号,以便WinDbg发挥更大的作用。

我们可以通过在WinDbg控制台中运行以下命令找到HEVD模块。

最后一行是HEVD驱动,通过deffered(延迟),我们可以看到WinDbg没有加载任何标志。
运行命令的模块符号的详细路径信息,可以找到放置用于HEVD的pdb的位置:

通过打印HEVD的所有功能,我们可以看到路径查找WinDbg正在找到我们必须放置HEVD pdb文件的路径。

无法在线查找,因此路径是第二个选择 - C:\ ProgramData \ dbg \ sym \ HEVD.pdb \ D241CC04CE0B472CB88B1476958369FB1 \ HEVD.pdb

保存pdb文件的版本和你加载的驱动程序版本一致(在VM调试器上),再次运行.reload将会加载符号。所以现在可以运行:

得到可用于HEVD的符号的完整列表。成功了!

最后我们可以测试驱动程序的预先写入的exploit,以确保一切都正常工作,然后我们开始编写自己的exploit。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错!
2017-10-23 21:46
0
雪    币: 290
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
期待第二部分
2017-10-24 08:27
0
雪    币: 341
活跃值: (143)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
lm  m  H  *    多了个空格~
2017-12-28 15:32
0
雪    币: 3302
活跃值: (1144)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
5
地狱怪客 lm m H * 多了个空格~
已修改~
2018-1-1 18:29
0
雪    币: 300
活跃值: (2477)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark
2018-1-1 20:45
0
游客
登录 | 注册 方可回帖
返回
//