当前位置:网站首页>中断门&陷阱门
中断门&陷阱门
2022-04-22 06:19:00 【Misaka10046】
中断门,就是通过中断提权的一种手段
下图为中断门的构造

陷阱门也和中断门类似调用什么都类似就是构造不一样

跟调用门类似,但是不能往里面传参,所以高32位的前4位一定为0,同时TYPE位也有细微的改动,其他的并没有太大的改动。
执行流程
直接int 然后根据编号查IDT表,然后IDT表再去查段选择符,然后找到处理的函数,每个编号对应的中断类型都能在官方文档中找到。


构造过程
最基础的构造

#include "stdafx.h"
#include <WINDOWS.H>
void __declspec(naked) func()
{
__asm{
iretd;
}
}
int main(void)
{
printf("%x\n",func);
system("pause");
__asm{
push fs;
int 0x20;//通过中断直接调用
pop fs;
}
return 0;
}
可以再执行的前后对比下efl,会发现中断门会把其中的IF位置0,也就是屏蔽可屏蔽中断。
中断门和陷阱门唯一的不同也就是置0的不同,陷阱门不会将IF位置0。
通过中断门来劫持INT 3
#include "stdafx.h"
#include <Windows.h>
typedef int (__cdecl *DbgPrintProc)(_In_z_ _Printf_format_string_ const char * _Format, ...);
DbgPrintProc DbgPrint = (DbgPrintProc)0x83e5f41f;//uf nt!DbgPrint
char *output = "111111";
void __declspec(naked) test()
{
__asm
{
sub esp,8;
lea eax, change;
mov [esp],eax;
mov [esp+4],0x8;
jmp fword ptr[esp];//修改CS标志位,不修改的话不会蓝屏,会直接崩系统,原地爆炸
change:
add esp,8;
push fs;
push 0x30;
pop fs;
mov eax,[output];
push eax;
call DbgPrint;
add esp, 4;
pop fs;
mov eax,0x83e8f5c0;//跳回原来的INT 3中
jmp eax;
}
}
void _tmain(int argc, _TCHAR* argv[])
{
printf("%x\r\n",test);
system("pause");
__asm
{
int 3
};
system("pause");
}
kd> r gdtr
gdtr=80b95000
kd> dq 80b95000
80b95000 00000000`00000000 00cf9b00`0000ffff
80b95010 00cf9300`0000ffff 00cffb00`0000ffff
80b95020 00cff300`0000ffff 80008b1e`400020ab
80b95030 834093f7`bc003748 0040f300`00000fff
80b95040 0000f200`0400ffff 7ccf9b57`1a40ffff
80b95050 830089f7`90000068 830089f7`90680068
80b95060 00000000`00000000 00000000`00000000
80b95070 800092b9`500003ff 00000000`00000000
kd> r idtr
idtr=80b95400
kd> dq 80b95400
80b95400 83e88e00`0008efc0 83e88e00`008f150
80b95410 83e8ee00`0048f5c0 83e8ee00`0008f5c0
80b95420 83e8ee00`0008f748 83e88e00`0008f8a8
80b95430 83e88e00`0008fa1c 83e98e00`00080018
80b95440 00008500`00500000 83e98e00`00080478
80b95450 83e98e00`0008059c 83e98e00`000806dc
80b95460 83e98e00`0008093c 83e98e00`00080c2c
80b95470 83e98e00`000812fc 83e98e00`000816b0
kd> eq 80b95418 83e8ee00`0048f5c0
这里修改的是INT 3中的段选择子,而段选择子是决定代码开始地址的地方,因此我们修改段选择子指向GDT表中的第10项,再GDT表项中创建第10项,然后第10项大部分复制第2项,只修改其中的基地址,修改为test函数地址减去INT 3中断的代码起始地址,这样基地址根据偏移就会直接去执行我们的test函数,然后再去执行INT 3。

然后实验成功。PS:后面跟了一串不知道啥。不用去管他。
TIPS
在中断门内部调用代码的时候,需要使用CLI/STI来屏蔽中断,不进行屏蔽的话,可能在切换进程的时候蓝屏。
版权声明
本文为[Misaka10046]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Misaka10046/article/details/116141878
边栏推荐
- Detailed overview of this keyword
- H. Happy number (binary conversion / nth special number) (2021 Niuke summer multi school training camp 9)
- A. Weird Flecks, But OK (计算几何&三维最小圆覆盖)(2021年度训练联盟热身训练赛第一场)
- 15. Full arrangement
- Bom 浏览器对象模型
- 并发编程的艺术(11):JUC里的工具类介绍
- CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)
- FFmpeg命令(八)、 视频添加水印
- Codeforces Round #779 (Div. 2)
- This关键字详细概述
猜你喜欢

Detailed overview of this keyword

1005 Monopoly 同余求解(2021中国大学生程序设计竞赛CCPC-网络选拔赛重赛)

H. Happy number (binary conversion / nth special number) (2021 Niuke summer multi school training camp 9)

This关键字详细概述

Quick sort and merge sort

On time complexity and space complexity

Leetcode - 3 - (string addition, maximum number of consecutive 1 < Ⅰ Ⅲ >, maximum difficulty of the exam, deletion of the penultimate node of the linked list)

C. Ducky debugging (Game 5 of 2021 training League warm-up training competition)

Leetcode - 6 - (string multiplication, next larger element < Ⅰ Ⅱ Ⅲ >, K sets of inverted linked list)

2019.1.2版的Idea使用教程
随机推荐
Leetcode - 2 - (parenthesis generation, longest palindrome string, ring linked list, reverse linked list, nodes in pairwise exchange linked list)
系统日志收集系列
Dom 文档对象模型
P1095 [noip2007 popularity group] escape of the catcher
并发编程的艺术(6):详解ReentrantLock的原理
323 · string game
I.Jam-packed (均分/最大最小值) (2021年度训练联盟热身训练赛第五场)
If I make this silly mistake again/ (ㄒoㄒ)/~~
C.Ducky Debugging(简单判断/签到)(2021年度训练联盟热身训练赛第五场 )
L1-064 估值一亿的AI核心代码 (20 分) 格式错误
Detailed explanation of linked list
2019.1.2 idea usage tutorial
FFmpeg命令(八)、 视频添加水印
Links summary qwq
Final关键字
L2-002 链表去重(测试点1的坑)
B.Cutting Corners (简单几何/签到)(2021年度训练联盟热身训练赛第五场)
Leetcode - 6 - (string multiplication, next larger element < Ⅰ Ⅱ Ⅲ >, K sets of inverted linked list)
Minimum circle coverage (basis of computational geometry)
Introduction