Windows内核之中断门提权
前言
在平时三环程序下的开发中,都会用到断点,而这个断点其实就是与中断门有关联的。
1.中断门介绍
在三环程序开发中,编译器进行断点之后反汇编可以查看到,断点反汇编的形式就是 int 3。如下图,在OD中查看,这就是一个断点。
int 0x3; 其实就是查找的IDT表中,从0开始,索引为3的位置,继续看下图,通过windbg查看到int 3的段描述符。
INT段描述符对应的分解图如下:
构造中断门的高32位中的低16位的值是固定的,也就是ee00
而offset就是要跳转的函数地址(高32位中高16位和低32位中低16位)
低32位中,高16位是我们的段选择子偏移(index),查询的是GDT表
2.中断门的实现
接下来找一段空的位置,在把我们新构造的段描述符放进去。
1.构建段描述符
我们需要的两个条件,第一个是函数地址,第二个是段选择子 (index),这里我新建了一个__declspec的空函数,然后取地址即可
40100a。
第二个段选择子,我们用0008即可,就是GDT表中偏移为8的地方。
GDT表
kd> dq 80b99000
80b99000 0000000000000000 00cf9b00
0000ffff
80b99010 00cf93000000ffff 00cffb00
0000ffff
80b99020 00cff3000000ffff 80008b1e
400020ab
80b9