[Windows翻译]Windows调试与开发第一部分–环境设置

原文地址:www.trustwave.com/en-us/resou…

原文作者:

发布时间:2019年10月23日

简介

在这个博客系列中,我将尝试为Windows系统调试和利用设置一些基础知识,并介绍如何为远程内核调试设置一个环境。这个环境对学习Windows内部知识很有帮助,对我们今后关于其利用的文章也是不可或缺的。关于Windows内部,我真的推荐Pavel Yosifovich在Pluralsight的培训,如果你是这个主题的新手,它将扩大你对系统的熟悉程度。

Windows开发当然不是一个容易学习的课题,因为没有很多Windows的挑战。例如,当你查看当前的CTF时,你会发现只有一些基本的/介绍性的写法,涉及Windows保护和内存分配,但我将尝试在未来的文章中写到这个主题。

这个系列也将是我学习的一部分,所以希望这能帮助处于同样情况下的每个人!

环境

对于这个环境,你将需要一个调试器、几个虚拟机和好奇心

WinDBG是一个由微软开发的调试器,我们将需要它来调试用户和内核空间。还有其他的选择,但是WinDBG绝对是最适合我们工作的工具,所以让我们开始吧

我们的实验室还需要两个虚拟机。一个将被用作调试器,另一个将作为目标系统。在这种情况下,我们将使用Windows 10 x64进行调试–选择它是因为WinDBG预览版在该操作系统上的可用性。作为目标系统,我们将使用Windows 7 x64,因为它比Windows 10有更少的保护措施,在我们学习的时候会使我们的生活更轻松。顺便说一下,我们可以启用本地内核调试,但这并不允许研究人员进行 “现场 “调试,如对驱动程序的断点功能等。

目标机

你需要在这台Windows机器上启用调试模式,因为它默认是不启用的。你可以使用一个升高的提示符命令(cmd.exe)和 “bcdedit “工具来完成。在我们的例子中,我们将配置我们的目标机使用串行连接进行调试,具体步骤如下。

C:\Windows\system32>bcdedit /dbgsettings serial debugport:1 baudrate:115200
The operation completed successfully.

C:\Windows\system32>bcdedit /debug on
The operation completed successfully.
复制代码

如果我们同时使用Windows 10,我们可以通过网络设置启用调试选项。然而,Windows 7没有这个选项,所以我们将使用串行连接。

连接

现在我们已经将调试器设置为使用串行连接,我们现在需要为每台机器添加和配置一个串行端口。在我的例子中,我使用的是VMWare Workstation,但这种配置可以复制到任何虚拟机厂商的VirtualBox上。在Windows 7上,你设置 “终点是服务器”。

image.png

图1 – Windows 7的虚拟机设置

在Windows 10上,你设置了 “端是客户端。”。

image.png

配置-win10图2-Windows 10的虚拟机设置

调试机

在目标机设置了调试模式,并且两台机器都配置了串行连接后,我们现在可以继续设置WinDBG。

打开WinDBG预览版,进入 “附加到内核”,选择 “COM “并使用下面这个配置。

image.png

Com1-windbg图3 – 调试器机器上的WinDBG预览版COM配置

这很棘手,这个端口名称与我们在VMWare设置中给我们的端口连接的名称不相关。这实际上是设备管理器中的端口。基本上,如果你在这个新端口之前没有任何端口,你应该只有一个串行端口,所以你将使用 “com1″,然而,如果已经有其他端口,你将使用 “com2″、”com3″,等等。

开始调试

在确定之后,你将连接到目标机。

Microsoft (R) Windows Debugger Version 10.0.19494.1001 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.


Opened \\.\com1
Waiting to reconnect...
Connected to Windows 7 7601 x64 target at (Fri Oct 18 10:50:26.300 2019 (UTC - 3:00)), ptr64 TRUE
Kernel Debugger connection established.


************* Path validation summary **************
Response                         Time (ms) Location
Deferred                         SRV*C:\SymCache*http://msdl.microsoft.com/download/symbols
Symbol search path is: SRV*C:\SymCache*http://msdl.microsoft.com/download/symbols
Executable search path is: 
Windows 7 Kernel Version 7601 (Service Pack 1) MP (1 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 7601.17514.amd64fre.win7sp1_rtm.101119-1850
Machine Name:
Kernel base = 0xfffff800`02a01000 PsLoadedModuleList = 0xfffff800`02c46e90
Debug session time: Fri Oct 18 10:38:56.797 2019 (UTC - 3:00)
System Uptime: 0 days 0:04:03.716
Break instruction exception - code 80000003 (first chance)

*******************************************************************************
*                                                                             *
*   You are seeing this message because you pressed either                    *
*       CTRL+C (if you run console kernel debugger) or,                       *
*       CTRL+BREAK (if you run GUI kernel debugger),                          *
*   on your debugger machine's keyboard.                                      *
*                                                                             *
*                   THIS IS NOT A BUG OR A SYSTEM CRASH                       *
*                                                                             *
* If you did not intend to break into the debugger, press the "g" key, then   *
* press the "Enter" key now.  This message might immediately reappear.  If it *
* does, press "g" and "Enter" again.                                          *
*                                                                             *
*******************************************************************************

nt!RtlpBreakWithStatusInstruction+0x1:
fffff800`02a79491 c3              ret
复制代码

然后我们就可以开始了!

你应该注意到,这里有一个关于 “Symbols “的配置。 符号基本上是给用户API和内核文件上的函数的名称。这一点非常有帮助。例如,如果你没有NTDLL.dll的符号,你会看到一个函数被调用为ntdll!7fff’73049342(随机地址),这并没有提供任何关于正在执行的东西的额外信息。 然而,如果你有符号,你会看到函数名称是什么,例如:ntdll!RtlUserThreadStart。这可以节省一些时间,帮助确定我们的代码中实际发生了什么。

微软为大多数(如果不是所有的)Windows版本提供了一个公共资源库。供应商也可以为他们的应用程序提供PDB文件,这是一个非常好的举措。有必要在调试器上配置服务器,然后符号文件就会被下载到你的本地计算机。在WinDBG预览版上,进入菜单,设置,将符号路径设置为 “SRV*C:\SymCache*http://msdl.microsoft.com/download/symbols“。这将确保所有下载的符号都进入本地路径 “C:\SymCache”。

image.png
符号图4 – WinDBG符号路径

总结

现在我们已经为我们的测试建立了环境。在下一部分中,我将介绍WinDBG的功能,以熟悉Windows系统的调试。然后,我将继续写一些内部结构、应用程序和内核的利用。如果你有任何疑问或意见,请告诉我 希望在这个系列结束时,你会在你的安全武库中拥有一个新工具。


通过www.DeepL.com/Translator(免费版)翻译

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享