关于 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。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!