以前看过一个这样的文章没太明白,今天在看《天书夜读》第12章----CPU权限级与分页机制----12.4.1小节----调用门及其漏洞中看到这样的一段描述,这里记录一下当作一个日后快速查看的笔记。这里学习其思想。原文如下:
"如果黑客可以写入一个调用门,那么就可以利用R3程序直接进入R0权限。“ 这是一个实现思路的提出。
”全局描述符表的位置是很容易找到的,指令SGDT不是特权指令,在R3下直接调用就可以得到GDT的地址,然后目标就是搜索空闲位置插入一个调用门了。“下面给出一段在R3程序中查看GDT地址的测试代码:
#include <stdio.h>
int main()
{
char gdt[6];
unsigned long gdtaddr;
unsigned short gdtlimit;
_asm sgdt gdt;
gdtaddr = *(unsigned long *)(&gdt[2]);
gdtlimit = *(unsigned short *)(&gdt[0]);
printf("GDT Base: %08X\n",gdtaddr);
printf("GDT Limit: %04X\n",gdtlimit);
}
GDT Base: 8003F000
GDT Limit: 03FF
Press any key to continue
“难度在于如何写入GDT所在的内核地址区,R3代码没有对该内存区域的访问权限。但是Windows内部提供了一个设备,名字叫做"Device\PhysicalMemory",这个设备可以被系统用户访问,直接访问这个设备就可以访问物理内存。从管理员(Administrator)得到系统(System)用户权限是可行的。在Windows的世界里,Administrator实际上已经是至
高权限了,只是一些权限需要自己用多余的手续去获取。“
书中后面介绍了一篇文章有关《Windows NT/2000/XP下不用驱动的Ring0代码实现>>文章