首页
论坛
课程
招聘
雪    币: 121
活跃值: 活跃值 (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝

[原创]任务门进1环

2020-4-30 16:44 3345

[原创]任务门进1环

2020-4-30 16:44
3345

0x1:

准备工作:

(需要了解 段任务段, 任务门,  权限)

打开windbg 输入下面指令

  • 构造一系列需要的段描述与符

  • 任务门 eq 8003f500 0000e500`00C30000

  • 任务段 eq 8003f0c0 0000a912`FDCC0068

  • cs: eq 8003f090 00cfbb00`0000ffff

  • ds: eq 8003f0b0 00cfb300`0000fff

0x2:

  • 代码:

#include <STDIO.H>
#include <WINDOWS.H>
DWORD dwOK;
DWORD dwESP;
DWORD dwCS;
void __declspec(naked) func()
{
	dwOK = 1;
	__asm
	{
		//int 3
	    mov eax,esp
            mov dwESP,eax
            mov ax,cs
            mov word ptr [dwCS],ax
            iretd
	}
}

int main(int argc, char* argv[])
{
	char bu[0x10];  //12ff70
	//char esp0[0x10];  //0012FF60
	int iCr3;
	
	printf("input CR3:\n");
	scanf("%x", &iCr3);
	
	//0x0012FDCC
	DWORD iTss[0x68] = {
		        0x00000000,		//link
			0x00000000,		//esp0		//(DWORD)bu
			0x00000000,		//ss0
			(DWORD)bu+4,		//esp1
			0x000000B1,		//ss1
			0x00000000,		//esp2
			0x00000000,		//ss2
			(DWORD)iCr3,	//cr3
			(DWORD)func,	//eip
			0x00000000,		//eflags
			0x00000000,		//eax
			0x00000000,		//ecx
			0x00000000,		//edx
			0x00000000,		//ebx
			(DWORD)bu,		//esp
			0x00000000,		//ebp
			0x00000000,		//esi
			0x00000000,		//edi
			0x00000023,		//es
			0x00000091,		//cs		0x0000001B //0huan 0x00000008
			0x000000B1,		//ss		0x00000023 //0huan 0x00000010
			0x00000023,		//ds
			0x000000b9,		//fs
			0x00000000,		//gs
			0x00000000,		//dit
			0x20ac0000};
		
	char buff[6];
		
	*(DWORD*)&buff[0] = 0x12345678;
	*(WORD*)&buff[4] = 0xC0;
		
	__asm
	{
	    int 0x20
	}
		
	printf("ok=%d \t ESP=%x \t CS=%x \n", dwOK, dwESP, dwCS);
		
	//getchar();
	return 0;
}

0x3:

  • 运行你得程序 (停留在等待输入CR3那里), 然后记住自己程序的名字 比如 1.exe

  • 打开windbg 输入: !process 0 0 找到对应的CR3 (红线部分)

  • 在windbg image 那栏找到你自己程序的名字 

  • 看控制台输出内容是不是自己构造的1环 段选择子, 是就说名成功了


0x4:

Tss:

  • 总结:

  1. 上图中 使用任务门进入一环时候 esp 012 和 ss 012 不需要赋值,程序直接取得就是 esp 和 ss (经过测验得出结论, 不知道原因)

  2. fs:三环一环都可以正常运行

  3. cs:代码段描述符 (dpl = 1)

  4. ss:数据段描述符就可以 (dpl = 1)

  5. 其他值都是我做测试用的,  无视掉就可以

  6. 总结下:  修改 cs ss esp 就可以成功进入一环

  7. 其他门 可以直接修改 esp 0,1,2 and ss 0,1,2 (不得原因 = = 有兴趣得大家可以测试下)

  8. 蓝蓝(你懂的)更健康 哈哈






[公告]看雪论坛2020激励机制上线了!多多参与讨论可以获得积分快速升级?

最后于 2020-4-30 16:49 被清风qfccc编辑 ,原因:
最新回复 (7)
雪    币: 1970
活跃值: 活跃值 (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Mr.hack 活跃值 2020-5-2 19:40
2
0
esp 0 1 2的作用是用来指定    你使用任务门进1环后如果再发生由中断,调用门,陷阱门产生的权限切换的堆栈;使用任务段任务门本身过程中堆栈是由ESP和SS来决定的,和ESP 0 1 2没关系
雪    币: 121
活跃值: 活跃值 (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
清风qfccc 活跃值 2020-5-6 10:50
3
0
Mr.hack esp 0 1 2的作用是用来指定 你使用任务门进1环后如果再发生由中断,调用门,陷阱门产生的权限切换的堆栈;使用任务段任务门本身过程中堆栈是由ESP和SS来决定的,和ESP 0 1 2没关系
原来是这样, 感谢老哥解答啊,  我之前就一直纳闷来着
雪    币: 27
活跃值: 活跃值 (122)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
印度硬汉 活跃值 2020-5-28 20:27
4
0
兄弟,为什么有任务段这种东西了还要提供一下任务门呢?
雪    币: 399
活跃值: 活跃值 (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
koop 活跃值 2020-5-28 21:42
5
0
请问一下,这代码直接崩了吧,能进入到func()这里,只是返回的时候无法返回吧。请问你的过了吗?还执行了什么?谢谢
雪    币: 256
活跃值: 活跃值 (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwCopyAll 活跃值 2020-5-28 22:00
6
0
666
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
smallseven 活跃值 2020-7-4 23:24
7
0
老哥,代码跑起来蓝了,看了下有个地方不解  0x000000b9,     //fs  gdt表里的index:17项好像没改哇?
雪    币: 343
活跃值: 活跃值 (269)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
taolaoda 活跃值 2020-7-25 23:26
8
0
任务段 eq 8003f0c0 0000a912`FDCC0068,大兄弟,如果我没记错的化是E9吧
游客
登录 | 注册 方可回帖
返回