从R3到R0权限

本文探讨了黑客如何通过写入调用门来直接从R3权限进入R0权限的技术细节。文中介绍了如何使用非特权指令SGDT获取全局描述符表(GDT)的地址,并讨论了通过DevicePhysicalMemory设备访问内核内存区域的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前看过一个这样的文章没太明白,今天在看《天书夜读》第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代码实现>>文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值