Windows内核基础知识-4-权限级别
2021/8/27 7:06:06
本文主要是介绍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内核基础知识-4-权限级别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16使用vue3+springboot构建简单Web应用教程
- 2024-11-15全栈开发项目实战:从入门到初级项目的实现
- 2024-11-15数据库项目实战:从入门到初级应用教程
- 2024-11-15IDEA项目实战入门教程
- 2024-11-15IT编程项目实战:新手入门的全面指南
- 2024-11-15Java开发项目实战:新手入门与初级技巧
- 2024-11-15Java零基础项目实战:从入门到独立开发
- 2024-11-15MyBatis Plus教程:入门与基础操作详解
- 2024-11-15MyBatis-Plus教程:新手入门与实战技巧
- 2024-11-15MyBatis教程:从入门到实践