段间跳转之中断门
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置零使其拒绝一切可屏蔽中断。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】