您的位置:首页 > 其它

Windows内核基础知识-4-权限级别

2021-08-26 19:46 246 查看

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的选择们才行。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: