• 段间跳转之中断门


    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置零使其拒绝一切可屏蔽中断。

  • 相关阅读:
    c++多继承布局
    copy constructor
    default construction
    对象模型如何影响程序
    c++对象模型-对象模型
    在网站中引入特殊字体
    数组基础相关
    CSS3 transform3D
    即时效果--元素出现在页面特定区域时加载
    svg动态绘制饼状图
  • 原文地址:https://www.cnblogs.com/revercc/p/14461289.html
Copyright © 2020-2023  润新知