Win10内核调试

踩坑无数。折腾了一晚上,才算连接上了调试主机(Win10,debugger)和被调试虚拟机(Win10,debuggee)。
吾爱破解下载了用于win10的windbg。在里面有一个symproxy.reg的文件,猜测是设置符号文件的代理(因为貌似要FQ才能下载,只能windbg访问而不能浏览器访问)。不知道有没有用,运行之前一直连接不上;运行之后允许设置注册表,又经过了其他操作,才连上,所以不知道这里有没有影响。

debugger IP:192.168.0.161
debuggee IP:192.168.0.189
关了防火墙,可以互相ping 通。
win10虚拟机镜像下载地址:
链接:https://pan.baidu.com/s/1NBL3EiNNYFU-ByDBC4OosQ
提取码:mb6o
吾爱破解windbg下载地址:
链接:https://pan.baidu.com/s/135mYBWw3S3B9-jkuMrm5Lg
提取码:w7j5

环境搭建

这个方法没有成功

在debuggee中新建:C:\KDNET,从debugger中复制出kdnet.exe和VerifiedNICList.xml到这个文件夹。
然后运行

1
kdnet.exe 192.168.0.161 51111

注意这个端口,需要在49152 到 65535范围。
按照道理这时候可以生成Key了,但是我报错:

查看VerifiedNICList.xml,确认PIC没问题。。
此路不通。over

这个方法成功了

用bcdedit手动设置连接,这个方法我也踩了不少坑。总之就是生成key的时候注意总线参数。
查看网卡:

1
2
3
C:\Users\Administrator>bcdedit /set "{dbgsettings}" busparams 11.0.0
C:\Users\Administrator>bcdedit /dbgsettings NET HOSTIP:192.168.0.161 PORT:51111
Key=s0fmq5mhk1zq.2wlthj5gmyz52.16g22l0wd9cku.ewgp0kskrwmy

debugger命令行:

1
A:\Windows Kits\10\Debuggers\x64>windbg -k net:port=51111,key=s0fmq5mhk1zq.2wlthj5gmyz52.16g22l0wd9cku.ewgp0kskrwmy

然后运行,显示waiting to reconnect

重启debuggee
有变化之后按下break

成功连接:

token注入获取system权限

https://www.ired.team/miscellaneous-reversing-forensics/windows-kernel-internals/how-kernel-exploits-abuse-tokens-for-privilege-escalation#_eprocess

https://blog.xpnsec.com/becoming-system/

您经常会看到 Windows 内核提权漏洞利用篡改内核地址空间中的进程结构,目的是更新进程令牌。例如,在流行的 MS15-010 权限提升漏洞利用(可在exploit-db 上找到)中,我们可以看到许多对操纵访问令牌的引用。
指令快速上手:

1
2
3
4
5
6
g 解除冻结,解除后可以在虚拟机内进行操作
break 冻结虚拟机,windbg操作
!process 0 0 cmd.exe 查看cmd.exe进程
dt _eprocess ffffe00091856080
? (ffffe000`80ae0063) & (ffffffff`fffffff0)
eq ffffe0009169b840+0x358 ffffc001`7dbf4ae0

连接上远程主机后,打开一个cmd进程。然后查看这个进程的地址

1
2
3
4
5
0: kd> !process 0 0 cmd.exe
PROCESS ffffe0009169b840
SessionId: 1 Cid: 05d8 Peb: 7ff74918f000 ParentCid: 0ad8
DirBase: 30049000 ObjectTable: ffffc00180adf900 HandleCount: <Data Not Accessible>
Image: cmd.exe

可以看到地址是ffffe0009169b840,然后查看这块地址的偏移都是什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
0: kd> dt _eprocess ffffe0009169b840
ntdll!_EPROCESS
+0x000 Pcb : _KPROCESS
+0x2d8 ProcessLock : _EX_PUSH_LOCK
+0x2e0 RundownProtect : _EX_RUNDOWN_REF
+0x2e8 UniqueProcessId : 0x00000000`000005d8 Void
+0x2f0 ActiveProcessLinks : _LIST_ENTRY [ 0xffffe000`927d64f0 - 0xffffe000`92620b30 ]
+0x300 Flags2 : 0x200d000
+0x300 JobNotReallyActive : 0y0
+0x300 AccountingFolded : 0y0
+0x300 NewProcessReported : 0y0
+0x300 ExitProcessReported : 0y0
+0x300 ReportCommitChanges : 0y0
+0x300 LastReportMemory : 0y0
+0x300 ForceWakeCharge : 0y0
+0x300 CrossSessionCreate : 0y0
+0x300 NeedsHandleRundown : 0y0
+0x300 RefTraceEnabled : 0y0
+0x300 DisableDynamicCode : 0y0
+0x300 EmptyJobEvaluated : 0y0
+0x300 DefaultPagePriority : 0y101
+0x300 PrimaryTokenFrozen : 0y1
+0x300 ProcessVerifierTarget : 0y0
+0x300 StackRandomizationDisabled : 0y0
+0x300 AffinityPermanent : 0y0
+0x300 AffinityUpdateEnable : 0y0
+0x300 PropagateNode : 0y0
+0x300 ExplicitAffinity : 0y0
+0x300 ProcessExecutionState : 0y00
+0x300 DisallowStrippedImages : 0y0
+0x300 HighEntropyASLREnabled : 0y1
+0x300 ExtensionPointDisable : 0y0
+0x300 ForceRelocateImages : 0y0
+0x300 ProcessStateChangeRequest : 0y00
+0x300 ProcessStateChangeInProgress : 0y0
+0x300 DisallowWin32kSystemCalls : 0y0
+0x304 Flags : 0x144d0c11
+0x304 CreateReported : 0y1
+0x304 NoDebugInherit : 0y0
+0x304 ProcessExiting : 0y0
+0x304 ProcessDelete : 0y0
+0x304 ControlFlowGuardEnabled : 0y1
+0x304 VmDeleted : 0y0
+0x304 OutswapEnabled : 0y0
+0x304 Outswapped : 0y0
+0x304 FailFastOnCommitFail : 0y0
+0x304 Wow64VaSpace4Gb : 0y0
+0x304 AddressSpaceInitialized : 0y11
+0x304 SetTimerResolution : 0y0
+0x304 BreakOnTermination : 0y0
+0x304 DeprioritizeViews : 0y0
+0x304 WriteWatch : 0y0
+0x304 ProcessInSession : 0y1
+0x304 OverrideAddressSpace : 0y0
+0x304 HasAddressSpace : 0y1
+0x304 LaunchPrefetched : 0y1
+0x304 Background : 0y0
+0x304 VmTopDown : 0y0
+0x304 ImageNotifyDone : 0y1
+0x304 PdeUpdateNeeded : 0y0
+0x304 VdmAllowed : 0y0
+0x304 ProcessRundown : 0y0
+0x304 ProcessInserted : 0y1
+0x304 DefaultIoPriority : 0y010
+0x304 ProcessSelfDelete : 0y0
+0x304 SetTimerResolutionLink : 0y0
+0x308 CreateTime : _LARGE_INTEGER 0x01d8387d`317d7e34
+0x310 ProcessQuotaUsage : [2] 0xe00
+0x320 ProcessQuotaPeak : [2] 0xf10
+0x330 PeakVirtualSize : 0x00000200`00df3000
+0x338 VirtualSize : 0x00000200`00cf1000
+0x340 SessionProcessLinks : _LIST_ENTRY [ 0xffffe000`927d6540 - 0xffffe000`9241ab80 ]
+0x350 ExceptionPortData : 0xffffe000`91225610 Void
+0x350 ExceptionPortValue : 0xffffe000`91225610
+0x350 ExceptionPortState : 0y000
+0x358 Token : _EX_FAST_REF
+0x360 WorkingSetPage : 0x27b45
+0x368 AddressCreationLock : _EX_PUSH_LOCK
+0x370 PageTableCommitmentLock : _EX_PUSH_LOCK
+0x378 RotateInProgress : (null)
+0x380 ForkInProgress : (null)
+0x388 CommitChargeJob : (null)
+0x390 CloneRoot : _RTL_AVL_TREE
+0x398 NumberOfPrivatePages : 0x7a
+0x3a0 NumberOfLockedPages : 8
+0x3a8 Win32Process : 0xfffff901`44a7fc10 Void
+0x3b0 Job : (null)
+0x3b8 SectionObject : 0xffffc001`7f316fc0 Void
+0x3c0 SectionBaseAddress : 0x00007ff7`49a10000 Void
+0x3c8 Cookie : 0x40355f1f
+0x3d0 WorkingSetWatch : (null)
+0x3d8 Win32WindowStation : (null)
+0x3e0 InheritedFromUniqueProcessId : 0x00000000`00000ad8 Void
+0x3e8 LdtInformation : (null)
+0x3f0 OwnerProcessId : 0x345
+0x3f8 Peb : 0x00007ff7`4918f000 _PEB
+0x400 Session : 0xffffd001`45ebd000 Void
+0x408 AweInfo : (null)
+0x410 QuotaBlock : 0xffffe000`8eb09900 _EPROCESS_QUOTA_BLOCK
+0x418 ObjectTable : 0xffffc001`80adf900 _HANDLE_TABLE
+0x420 DebugPort : (null)
+0x428 Wow64Process : (null)
+0x430 DeviceMap : 0xffffc001`7e95dc50 Void
+0x438 EtwDataSource : 0xffffe000`92984c01 Void
+0x440 PageDirectoryPte : 0
+0x448 ImageFileName : [15] "cmd.exe"
+0x457 PriorityClass : 0x2 ''
+0x458 SecurityPort : (null)
+0x460 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
+0x468 JobLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
+0x478 HighestUserAddress : 0x00007fff`ffff0000 Void
+0x480 ThreadListHead : _LIST_ENTRY [ 0xffffe000`9243b710 - 0xffffe000`9243b710 ]
+0x490 ActiveThreads : 1
+0x494 ImagePathHash : 0xbd30981
+0x498 DefaultHardErrorProcessing : 1
+0x49c LastThreadExitStatus : 0n0
+0x4a0 PrefetchTrace : _EX_FAST_REF
+0x4a8 LockedPagesList : (null)
+0x4b0 ReadOperationCount : _LARGE_INTEGER 0x0
+0x4b8 WriteOperationCount : _LARGE_INTEGER 0x0
+0x4c0 OtherOperationCount : _LARGE_INTEGER 0x0
+0x4c8 ReadTransferCount : _LARGE_INTEGER 0x0
+0x4d0 WriteTransferCount : _LARGE_INTEGER 0x0
+0x4d8 OtherTransferCount : _LARGE_INTEGER 0x0
+0x4e0 CommitChargeLimit : 0
+0x4e8 CommitCharge : 0x181
+0x4f0 CommitChargePeak : 0x282
+0x4f8 Vm : _MMSUPPORT
+0x5f0 MmProcessLinks : _LIST_ENTRY [ 0xffffe000`927d67f0 - 0xffffe000`92620e30 ]
+0x600 ModifiedPageCount : 0
+0x604 ExitStatus : 0n259
+0x608 VadRoot : _RTL_AVL_TREE
+0x610 VadHint : 0xffffe000`90ca5420 Void
+0x618 VadCount : 0x19
+0x620 VadPhysicalPages : 0
+0x628 VadPhysicalPagesLimit : 0
+0x630 AlpcContext : _ALPC_PROCESS_CONTEXT
+0x650 TimerResolutionLink : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
+0x660 TimerResolutionStackRecord : (null)
+0x668 RequestedTimerResolution : 0
+0x66c SmallestTimerResolution : 0
+0x670 ExitTime : _LARGE_INTEGER 0x0
+0x678 InvertedFunctionTable : (null)
+0x680 InvertedFunctionTableLock : _EX_PUSH_LOCK
+0x688 ActiveThreadsHighWatermark : 2
+0x68c LargePrivateVadCount : 0
+0x690 ThreadListLock : _EX_PUSH_LOCK
+0x698 WnfContext : (null)
+0x6a0 Spare0 : 0
+0x6a8 SignatureLevel : 0 ''
+0x6a9 SectionSignatureLevel : 0 ''
+0x6aa Protection : _PS_PROTECTION
+0x6ab HangCount : 0 ''
+0x6ac Flags3 : 0
+0x6ac Minimal : 0y0
+0x6ac ReplacingPageRoot : 0y0
+0x6ac DisableNonSystemFonts : 0y0
+0x6ac AuditNonSystemFontLoading : 0y0
+0x6ac Crashed : 0y0
+0x6ac JobVadsAreTracked : 0y0
+0x6ac VadTrackingDisabled : 0y0
+0x6ac AuxiliaryProcess : 0y0
+0x6ac SubsystemProcess : 0y0
+0x6ac IndirectCpuSets : 0y0
+0x6ac InPrivate : 0y0
+0x6b0 DeviceAsid : 0n0
+0x6b8 SvmData : (null)
+0x6c0 SvmProcessLock : _EX_PUSH_LOCK
+0x6c8 SvmLock : 0
+0x6d0 SvmProcessDeviceListHead : _LIST_ENTRY [ 0xffffe000`9169bf10 - 0xffffe000`9169bf10 ]
+0x6e0 LastFreezeInterruptTime : 0
+0x6e8 DiskCounters : 0xffffe000`9169bfd8 _PROCESS_DISK_COUNTERS
+0x6f0 PicoContext : (null)
+0x6f8 TrustletIdentity : 0
+0x700 KeepAliveCounter : 0
+0x704 NoWakeKeepAliveCounter : 0
+0x708 HighPriorityFaultsAllowed : 0
+0x710 EnergyValues : (null)
+0x718 VmContext : (null)
+0x720 Silo : (null)
+0x728 SiloEntry : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
+0x738 SequenceNumber : 0x45
+0x740 CreateInterruptTime : 0x3f66abe1
+0x748 CreateUnbiasedInterruptTime : 0x3f66abe1
+0x750 TotalUnbiasedFrozenTime : 0
+0x758 LastAppStateUpdateTime : 0x3f66abe1
+0x760 LastAppStateUptime : 0y0000000000000000000000000000000000000000000000000000000000000 (0)
+0x760 LastAppState : 0y000
+0x768 SharedCommitCharge : 0x61
+0x770 SharedCommitLock : _EX_PUSH_LOCK
+0x778 SharedCommitLinks : _LIST_ENTRY [ 0xffffc001`7f39d438 - 0xffffc001`7f3f7b08 ]
+0x788 AllowedCpuSets : 0
+0x790 DefaultCpuSets : 0
+0x788 AllowedCpuSetsIndirect : (null)
+0x790 DefaultCpuSetsIndirect : (null)


找到token的位置是偏移0x358。
从另一个 SYSTEM 特权进程中窃取令牌,例如 lsass.exe。

1
2
3
4
5
0: kd> !process 0 0 lsass.exe
PROCESS ffffe00091856080
SessionId: 0 Cid: 0240 Peb: 7ff7a7979000 ParentCid: 01c0
DirBase: 129cd1000 ObjectTable: ffffc0017dbf4600 HandleCount: <Data Not Accessible>
Image: lsass.exe


计算真实token

1
2
3
4
0: kd> dq ffffe00091856080+0x358 L1
ffffe000`918563d8 ffffc001`7dbf4aea
0: kd> ? ffffc001`7dbf4aea & FFFFFFFF`FFFFFFF0
Evaluate expression: -70362339521824 = ffffc001`7dbf4ae0


然后替换cmd结构体中token的位置为system权限token

1
0: kd> eq ffffe0009169b840+0x358 ffffc001`7dbf4ae0

替换完成后,在debuggee那个cmd进程中查看用户

32位win10 内核漏洞利用

下载安装32位win10虚拟机。

启用16位应用程序支持

打开debuggee 的 cmd 执行下面的命令,来启用16位应用程序支持。

1
FONDUE.exe /enable-feature:NTVDM

然后Win+R,启动debug.exe

在进程中可以查看到 NTVDM 的 PID。

进程注入

进程注入有DLL注入、直接注入等方式。为简化流程,在这里我们先用到DLL注入。
If we spawn a 16-bit application (e.g. debug.exe) and inject our exploit into ntvdm, we can prevent the system from instantly crashing when trying to write to address 0 in nt!WbAddLookupEntryEx.
如果我们生成一个16位应用程序,(如debug.exe)并将shellcode 注入 NTVDM,可以在我们写入nt!WbAddLookupEntryEx 中的地址 0 时候(?啥)防止系统崩溃。
我们需要了解进程注入是如何工作的,以及我们如何使用进程注入让 NTVDM 在其地址空间内执行我们的代码,从而允许我们利用那个NULL映射页面(that NULL mapped page)。
Windows 上的进程注入通常使用 Win32 API 执行,特别是:

  1. OpenProcess
    打开进程,获取进程 handle(我真的很讨厌句柄这个词,所以我不写它)。handle 就是用于处理资源的一个编号。从进程的 PID 检索 handle,允许我们执行进一步操作。
  2. VirtualAllocEx
    用于在目标进程中分配内存,为我们保留空间以添加 shellcode,或者将参数传递给远程线程。
    在受害的远程进程中分配空间,为 DLL 路径创建内存空间。
  3. WriteProcessMemory
    把 DLL 路径字符串写进分配的空间。提供地址和进程 handle,允许我们将数据复制到远程进程地址空间。写入是为了作为参数传递
  4. CreateRemoteThread
    创建并运行一个新的远程线程。这是主要函数,前面三个在为调用这个函数做准备。需要的三个参数:OpenProcess 获取的进程 handle,注入线程的入口点(GetProcAddress 加载kernel32.dll 获取到的 loadlibrary 地址,kernel32的导出函数在所有进程中的映射地址都一样)以及线程参数(VirtualAllocEx 和 WriteProcessMemory 完成写入 destMem 的恶意 DLL 的路径)。
    我们用到另一个Win API来调用要加载DLL,就是 LoadLibrary。这个API函数可以获取DLL的路径并将其动态加载到进程地址空间中。

所以我们的注入需要做下面的事情:

  1. 使用 OpenProcess 获取 NTVDM 进程的句柄。
  2. 使用 VirtualAllocEx 申请足够的空间,用来存储 LoadLibrary 的参数值,即DLL的路径。
  3. 使用 WriteProcessMemory 将DLL路径写入申请到的空间。
  4. 使用 CreateRemoteThread 生成一个线程并在远程进程中调用 LoadLibrary,来将存储的DLL路径地址作为参数传递。

先本地attach to a process进行调试。

在 visual studio 2017中生成dll


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <Windows.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
MessageBoxA(0, "msg from pukrquq", "DLL Injection", MB_OK);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

这里。。如果debug版本不成功的话,换release版本试试。我在这里卡了两天╮(╯▽╰)╭。死活不注入,不弹框,最后换成release解决了。但是我依然不知道为什么 debug 版本的不行。指令用熟悉了去调试看看。

DLL加载器

在debuggee中安装了vc++6.0编译的,工程选择 Win32 Console Application。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

int main(int argc, char **argv)
{
int pid = 0;
HANDLE pHandle;
SIZE_T written = 0;
void *destMem, *loadLibrary;
char currentDir[MAX_PATH];
char dllPath[MAX_PATH];

if (argc != 2) {
printf("Usage: %s NTVDM_PID\n");
printf("Note: NTVDM can be launched by executing debug.exe\n\n");
return 1;
}

pid = atoi(argv[1]);

if ((pHandle = OpenProcess(PROCESS_ALL_ACCESS, false, pid)) == NULL) {
printf("[X] OpenProcess() failed, make sure PID is for NTVDM process\n");
return 2;
}
else {
printf("[.] OpenProcess() completed, handle: %d\n", pHandle);
}

if ((destMem = VirtualAllocEx(pHandle, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE)) == NULL) {
printf("[X] VirtualAllocEx() failed to allocate memory in process\n");
return 3;
}
else {
printf("[.] VirtualAllocEx() allocated memory at %p\n", destMem);
}

if ((loadLibrary = (void *)GetProcAddress(LoadLibraryA("kernel32.dll"), "LoadLibraryA")) == NULL) {
printf("[X] GetProcAddress() failed to find address of LoadLibrary()\n");
return 3;
}
else {
printf("[.] Found LoadLibrary() at address %p\n", loadLibrary);
}

GetCurrentDirectoryA(sizeof(currentDir), currentDir);
sprintf(dllPath, "%s\\%s", currentDir, "exploit.dll");

if (WriteProcessMemory(pHandle, destMem, dllPath, strlen(dllPath), &written) == 0) {
printf("[X] WriteProcessMemory() failed\n");
return 3;
}
else {
printf("[.] WriteProcessMemory() successfully wrote exploit DLL path to NTVDM\n");
}

if (CreateRemoteThread(pHandle, NULL, NULL, (LPTHREAD_START_ROUTINE)loadLibrary, destMem, NULL, NULL) == NULL) {
printf("[X] CreateRemoteThread() failed to load DLL in victim process\n");
return 3;
}
else {
printf("[!!!] CreateRemoteThread() finished, exploit running...\n");
}
}

启动 windbg 调试

设置符号文件路径

1
SRV*c:\symbol* http://msdl.microsoft.com/download/symbols


选择文件->Attach to a Process,找到进程PID。

输入g回到进程操作,C:\Users\Administrator\Desktop\dllinjection\Debug>dllinjection.exe 280指令后看到弹框,并且 windbg 中断了下来。

1
2
3
4
5
6
0:004> g
ModLoad: 69a40000 69a46000 C:\Users\Administrator\Desktop\dllinjection\Debug\exploit.dll
ModLoad: 71370000 71385000 C:\Windows\system32\VCRUNTIME140.dll
ModLoad: 72e30000 72ea9000 C:\Windows\system32\uxtheme.dll
ModLoad: 758e0000 75a26000 C:\Windows\System32\MSCTF.dll
ModLoad: 75620000 756b6000 C:\Windows\System32\OLEAUT32.dll

构造漏洞利用

在可以将任何dll加载进 NTVDM 进程中后,思考如何利用。

启动调试debuggee调试:

1
2
3
4
C:\Users\Administrator>bcdedit /debug on
操作成功完成。
C:\Users\Administrator>bcdedit /dbgsettings NET HOSTIP:10.17.20.137 PORT:50000
Key=3mqdxozyk3g2f.mrj3umpv5jku.7v8xdxgow7p3.28srlzw64wh7t

在debugger 中打开windbg并启动内核调试。

输入刚才生成的key。

重启debuggee等待连接。

bcdedit /dbgsettings NET HOSTIP:10.22.57.132 PORT:50000

bcdedit /dbgsettings NET HOSTIP:192.168.0.161 PORT:50000

bcdedit /dbgsettings NET HOSTIP:10.17.20.137 PORT:50000

SRVc:\mySymbolshttp://msdl.microsoft.com/download/symbols

!process 0 0 ntvdm.exe

sxe ld:exploit.dll 加载DLL 的时候断点

bp exploit!DllMain 或者 bu exploit!DllMain 在dll入口下断点

这个需要exploit.pdb调试符合文件,把它放在和exploit.dll一个目录里windbg会自己加载

1、!process 0 0 ntvdm.exe
2、.process /p +EPROCESS信息 切换到目标进程空间
3、.reload /f /user 强制重新加载用户态符号
4、.process /i /p 目标进程的EPROCESS 侵入式调试

  1. win10x86:
    debug.exe
    inject pid
  2. windbg:
    切换进目标应用程序进程的地址空间
    !process 0 0 ntvdm.exe
    .process /p addr
    .reload /f /user
    .process /i /p addr
    g
    x86蓝屏。

1. win10x86:

debug.exe

2. windbg:

break
切换进目标应用程序进程的地址空间
!process 0 0 ntvdm.exe
.process /p addr
.reload /f /user
.process /i /p addr
g
应用层断点
sxe ld:exploit.dll
bu exploit!DllMain
g

3. win10x86:

inject pid

但是断点地址从来不是0h : (
如果是0h:

4. windbg:

eb 0 0xc7
bp e4
g