zoukankan      html  css  js  c++  java
  • 段间跳转之中断门

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

  • 相关阅读:
    <!内容//>请问在CSS里面,这个符号是什么 意思?
    java.sql.Timestamp;
    struts做开发的时候action是继承Action方法还是ActionSupport方法
    @Autowired的用法和作用
    JavaScript方法和技巧大全
    Spring@Autowired注解与自动装配
    关于Class File Editor Source not found
    程序员:各种快捷键的用法及掌握 .
    Struts2的Preparable接口 .
    测试
  • 原文地址:https://www.cnblogs.com/revercc/p/14461289.html
Copyright © 2011-2022 走看看