段间跳转之中断门
发布日期:2021-05-19 04:41:45 浏览次数:16 分类:博客文章

本文共 649 字,大约阅读时间需要 2 分钟。

IDTR与IDT

中断描述符表寄存器IDTR有48位,其中32位存储中断描述符表的基地址,剩余16位存储表的长度。IDT就是中断描述符表,中断描述符表中存储中断门,陷阱门和任务门的门描述符。

中断门描述符

中断门描述符与调用门描述符差不多,其低四个字节的高16位存储的是隐藏的段选择子,中断跳转的目标地址为:隐藏的段选择子指向的段的基地址 + 偏移地址

中断门提权

无论中断提权与不提权,中断成功都需要 中断门的DPL = CPL。

我们在IDT表的第0x20索引位置构造一个中断门,此中断门的中断描述符的隐藏段选择子的索引为1,指向一个DPL为0的代码段。

然后我们执行int 0x20,代码会跑到0x00427200处。cs变为8,cpl为0权限提升了,所以堆栈也发生了切换地址为高2GB。

我们在windbg中查看堆栈

所以利用中断门提权堆栈变化如下

中断门不提权

我们在IDT表的第0x20索引位置构造一个中断门,此中断门的中断描述符的隐藏段选择子的索引为3,指向一个DPL为3的代码段。

int 0x20指令执行前堆栈如下

然后我们执行int 0x20,代码会跑到0x00427200处。cpl还为3权限未提升了,所以堆栈没有发生。

所以得出利用中断门不提升权限时的堆栈的变化如下:

注意:之所以在中断时需要保护EFLAGS寄存器是因为中断会将IF位置0来拒绝一切可屏蔽中断。因为中断门主要是用于描述中断处理程序的入口,中断分为可屏蔽中断和不可屏蔽中断,将IF置零使其拒绝一切可屏蔽中断。

上一篇:段间跳转之陷阱门
下一篇:段间跳转之调用门

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月14日 23时38分59秒