标签:权限 CPL Windows 基础知识 内核 CS DPL 级别 RPL
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的选择们才行。
标签:权限,CPL,Windows,基础知识,内核,CS,DPL,级别,RPL 来源: https://www.cnblogs.com/Sna1lGo/p/15191281.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。