Windbg双机调试配置

zhaojunqi Lv2

前言:从这篇文章开始我们将进入windows内核的利用教程,目的是和JS引擎中的漏洞配合起来,组成一条利用链,内核的漏洞可以做到一个提升用户权限的效果,以达到更大程度的利用效果。

Windbg调试配置

说明:

目标机(debuggee machine): Hype-V中的虚拟机 

主机(debugger machine): Windbg所在机器

由于本次教程涉及到windows7和windows10,所以这两个版本的操作系统在虚拟机中都需要配置

Windows11双机网络调试:

本人踩坑:

手动通过bcdedit配置一堆,添加启动项,然后配置dbgsettings,开启debug选项,配置网卡,等等,最终没成功

最终解决:

根据官方教程https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection-automatically(将主机中的文件拷到宿主机上时可以使用主机通过远程桌面连接目标机的方式,或者通过目标机的增强会话功能(我没成功))

利用kenet.exe自动完成配置相应的hostip和port(此处hostip为debugger的ip,port为debugger中监听的端口号),并在windbg中设置后打开windbg.exe,接着重启一下目标机,在Hype-V管理器->虚拟网络适配器管理中添加一个外部网络适配器,计为kd,将网络适配器的NET模式改为Kd模式,即可进行调试

目标机中上不了网的问题:在Hype-V管理器中为目标机添加网络适配器,并配置静态ip,即可s

1
netsh interface ip set address "以太网 N" static [IP地址] [子网掩码] [网关]

目的:将名为“以太网 N”的网卡配置为静态ip

再配置dns:

netsh interface ip set dns “以太网 N” static 8.8.8.8

windows7串口调试:

非常简单,就只用运行命令

1
2
3
4
5
C:\Windows\system32>bcdedit /copy {current} /d "Kernel Debugging On"
The entry was successfully copied to {3709675a-4632-11ee-b00a-b3e46a698b2a}.

C:\Windows\system32>bcdedit /debug {3709675a-4632-11ee-b00a-b3e46a698b2a} on
The operation completed successfully.

然后在虚拟机中的系统配置->引导->修改Kernel Debugging On启动项的调试端口(com)和波特率(1152000)

再在虚拟机管理器上hype-V或VM Ware 上对应的com上添加为命名管道,并且起一个名字,再在windbg上通过com连接,填入对应的名字就行。

windows7配网:

配置windows 7的网络时,首先需要在hype-V中给该虚拟机添加一个虚拟网络适配器,并选上NAT模式,(因为在宿主机上打印ipconfig,发现192.168.137.1对应的是Ethernet(NAT)所以我猜是要改成NAT),然后在目标机上对应的网卡配置静态ip和dns即可

Windows7配置HEVD,OSRLoader,ghidra

直接在GitHub上下载.zip即可,然后解压下来后就会有HEVD.sys文件,再安装osrloader,并加载这个sys文件即可

然后在主机上的windbg中加载符号,并验证HEVD符号是否成功加载即可(这里注意路径问题,还需要把整个文件copy到主机对应的路径中)

.sympath SRVC:\Symbolshttps://msdl.microsoft.com/download/symbols;C:\projects\hevd\build\driver\vulnerable\x64

对于ghidra:下载后需要配置java,再打开.bat文件,即可,再新建项目,加载HEVD.sys即可

在windbg中加载HEVD.pdb符号:

1.首先lm m H*检查模块信息中是否输出HEVD服务

2.设置路径:

设置微软服务器符号:.sympath SRVC:\symbolshttps://msdl.microsoft.com/download/symbols

添加额外的路径:.sympath+ C:\projects\hevd\build\driver\vulnerable\x86

3.加载符号:!sym noisy 启动调试日志 .reload /f HEVD.sys 加载符号

a4.验证符号:x HEVD!*

注:在调试过程过遇到偏移量不对的问题,例如dt _EPROCESS 0x86980d40指令有可能默认选定的符号信息是基于ntdll(ntdll!前缀,用户态dll,适用于windows10/11所以应该将该指令改为dt nt! _EPROCESS 0x86980d40(nt!前缀,内核结构体,适用于本系统windows)

Windbg常用调试命令:

命令 功能 典型应用场景
k L5 显示调用栈(限制帧数) 快速查看崩溃上下文
u 反汇编代码 分析崩溃点的汇编指令
bu 设置延迟绑定断点 在符号未加载时预先设置断点
bl 列出所有断点 检查断点状态或删除无效断点
r 查看当前寄存器的值 查看当前寄存器的值
.frame 0n0 切换到调用栈的第 0 帧(即当前执行的函数帧) 在分析崩溃或断点触发时,定位到最相关的栈帧
dv /t /v 显示当前栈帧中的局部变量(display variables),并附加类型和地址信息 /t 附加类型信息 /v 附加地址信息
locals 显示局部变量(需符号) 调试函数内部逻辑
dd rsp L1 查看栈顶的4字节值 分析栈操作或返回地址
dS 显示ANSI字符串 查看字符串参数或缓冲区
!thread 显示当前线程的详细信息,包括线程对象地址、所属进程、TEB(线程环境块)、栈信息等
dd fs:[0x124] L1 dd:以 DWORD 格式显示内存。 fs:[0x124]:从 FS 段寄存器偏移 0x124 处读取内存(x86 内核模式下指向 _KTHREAD)。 L1:仅显示 1 个 DWORD(4 字节)。
dg @fs 显示 FS 段寄存器的段描述符信息(基址、长度、权限等)。
dt_KPCR dt(即display type)显示 _KPCR(处理器控制区)的结构定义,包括字段偏移和类型。
dt _KTHREAD 0x867095b0 显示指定地址(0x867095b0)的 _KTHREAD 结构内容。
bc n 移除n号断点
t 单步执行汇编指令
F10/P 步过
F8/t 步入
shift+F11/gu 返回到上层call执行
dx -id 0,0,87a95918 -r1 (*((ntdll!_KPRCB *)0x807ca120)) dx:WinDbg 的高级数据表达式计算器。 -id 0,0,87a95918:指定调试会话和进程/线程上下文。 (*((ntdll!_KPRCB *)0x807ca120)):将地址 0x807ca120 强制转换为 _KPRCB 结构并显示。 -r1:递归展开 1 层。
ep <地址> <值> 在指定内存地址处写入一个 指针宽度(32位/64位) 的数据
dp <地址> 从指定地址开始,以 指针宽度(32位/64位) 显示内存内容
  • Title: Windbg双机调试配置
  • Author: zhaojunqi
  • Created at : 2025-06-22 16:58:39
  • Updated at : 2025-10-17 17:30:51
  • Link: https://redefine.ohevan.com/2025/06/22/Windbg双机调试配置/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments