Windows内核基础知识-4-权限级别
Windows内核基础知识-4-权限级别
这里牵扯到三个东西:
1 段选择子里的RPL(请求权限级别 Request Authority Level)
2 段描述符里的DPL(段权限级别 Authority Level):
3:CPL(Current Authority Level)当前请求权限级别
CPL和RPL都是属于段选择子里的最低两位,只是在cs和ss段中是CPL,在别的段寄存器里就是RPL。CS和SS的CPL值一定相等。
请求级别
x86处理器里面有0 1 2 3四种权限级别:数字越小特权越高。Windows只采用了0和3,也就是0环和3环。
如何分析指令实在哪一种特权级别里面跑:
根据指令里的段寄存器不同又分不同的情况:
普通数据段ds、堆栈数据段、代码段。
当处于堆栈数据段ss和代码段cs时,CPL,DPL,RPL三个必须值相同,要么都为3要么都为0.
普通数据段:
RPL(请求权限级别):当前办事情的身份
DPL(段权限级别):去办什么权限的事情
CPL(当前权限级别):真实的身份
也就是说DPL其实是最终的考验,如果RPL小了,或者CPL也小了就不行
只有 CPL>=DPL && RPL >= CPL才行。
提权测试
RPL:可以通过查看段选择子
DPL:可以通过查看段描述符
CPL:可以通过查看CS和SS的RPL
RPL:可以通过除了CS,SS和GS的寄存来找
DPL:可以通过CS/SS寄存器来找
其实就用提高RPL和CPL就行了,DPL就像是一个写实的,然后用RPL和CPL来和DPL比较。
提高RPL
这里我们通过修改DS段的RPL来提高代码的RPL
这样就提高了RPL的权限了,就从3提高到了0。
提高CPL
通过提高RPL的办法不行,不能直接mov赋值给SS,CS寄存器。
但是可以通过jmp,call等修改CS:IP指令地址的方式来修改CS的段选择子也不行。所以CPL暂时无法解决。
得用CPU的选择们才行。
- Windows内核基础知识-2-段描述符
- windows程序设计的一些基础知识点——内核对象以及它们的句柄
- Windows内核基础知识-8-监听进程、线程和模块
- 2、Windows权限控制,共享管理,配额分配的基础知识
- Windows内核安全编程基础知识(一)
- Windows内核基础知识-1-段寄存器
- 1.9 基础知识——GP2.10 高级别的领导检查(Higher level management)
- windows基础知识
- Linux基础知识-用户管理与权限~19-07.27
- [Windows驱动开发](二)基础知识——数据结构
- Linux基础知识:内核编译-内核管理概述
- [译]Kinect for Windows SDK开发入门(三):基础知识 下
- 深度剖析WinPcap之(三)——内核驱动NPF涉及的基础知识(1)
- Windows异常世界历险记(一)——Windows系统用户级结构化异常处理机制(SEH)的基础知识和Unwind展开操作
- Win7迁移基础知识(1):WET(Windows轻松传送)
- Windows下降权MYSQL和apche的运行级别(普通用户权限运行)
- PHP内核介绍及扩展开发指南—基础知识
- [Windows驱动开发](三)基础知识——驱动例程
- [Windows驱动开发](三)基础知识——驱动例程
- [译]Kinect for Windows SDK开发入门(三):基础知识 下