科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道对WindowsXP SP2溢出漏洞进行保护(1)

对WindowsXP SP2溢出漏洞进行保护(1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我们知道在我们对溢出漏洞进行eXP的时候,经常要利用全局性的指针,利用异常处理。那么XP的SP2对此作了处理。使得我们无法运用以前的技巧来完成我们的工作。
  • 评论
  • 分享微博
  • 分享邮件

  我们知道在我们对溢出漏洞进行eXP的时候,经常要利用全局性的指针,利用异常处理。那么XP的SP2对此作了处理。使得我们无法运用以前的技巧来完成我们的工作。例如,对全局性的指针都作了编码处理。

  那么具体来讲,本文主要谈到以下:

  1、映射给PEB管理结构的起始地址做了随机处理。后面我们会看到这种随机是很弱的,但已经足够让eXP无法完成或者说是稳定的工作。

  2、对TOP SEH的保护

  3、VEH链表指针_RtlpCalloutEntryList的保护

  4、堆块结构的cookie保护

  不涉及内容:

  1、如何绕过保护机制

  2、堆管理的细节,其实没有太大的变化

  主题开始:

  1、PEB的地址的随机

  XP系统下,创建进程使用的是_NtCreateProcessEx函数,而不是_NtCreateProcess函数。_NtCreateProcess主要调用_PspCreateProcess@36函数来完成进程的创建工作

  PAGE:004B4649 call _PspCreateProcess@36 ;PspCreateProcess(x,x,x,x,x,x,x,x,x)

  进程的创建主要包括设置EPROCESS,创建初始进程地址空间等。这里就不罗嗦了。PEB的设置通过调用_MmCreatePeb.

  PAGE:004B428E push eax

  PAGE:004B428F push ebx

  PAGE:004B4290 push dword ptr [ebp-60h]

  PAGE:004B4293 call MmCreateProcessAddressSpace@12 ;MmCreateProcessAddressSpace(x,x,x)

  PAGE:004B43E5 lea eax, [ebx+1B0h]

  PAGE:004B43EB push eax

  PAGE:004B43EC lea eax, [ebp-40h]

  PAGE:004B43EF push eax

  PAGE:004B43F0 push ebx

  PAGE:004B43F1 call MmCreatePeb@12 ;MmCreatePeb(x,x,x)

  而MmCreatePeb又主要通过调用_MiCreatePebOrTeb

  PAGE:004B4A61 ;__stdcall MmCreatePeb(x,x,x)

  PAGE:004B4A61 ">_MmCreatePeb@12 proc near ;CODE XREF: PspCreateProcess(x,x,x,x,x,x,x,x,x)+303p

  PAGE:004B4A61

  PAGE:004B4A61 ;FUNCTION CHUNK AT PAGE:005267FF SIZE 000000DC BYTES

  PAGE:004B4A61

  PAGE:004B4A61 push 3Ch

  PAGE:004B4A63 push offset dword_42DAA8

  PAGE:004B4A68 call __SEH_prolog

  PAGE:004B4A6D xor ebx, ebx

  PAGE:004B4A6F mov [ebp-20h], ebx

  PAGE:004B4A72 mov [ebp-4Ch], ebx

  PAGE:004B4A75 mov [ebp-48h], ebx

  PAGE:004B4A78 mov [ebp-2Ch], ebx

  PAGE:004B4A7B mov esi, [ebp+8]

  PAGE:004B4A7E push esi

  PAGE:004B4A7F call _KeAttachProcess@4 ;KeAttachProcess(x)

  PAGE:004B4A84 push 2

  PAGE:004B4A86 pop edi

  PAGE:004B4A87 push edi

  PAGE:004B4A88 push (offset loc_4FFFFE+2)

  PAGE:004B4A8D push 1

  PAGE:004B4A8F lea eax, [ebp-2Ch]

  PAGE:004B4A92 push eax

  PAGE:004B4A93 lea eax, [ebp-4Ch]

  PAGE:004B4A96 push eax

  PAGE:004B4A97 push ebx

  PAGE:004B4A98 push ebx

  PAGE:004B4A99 lea eax, [ebp-20h]

  PAGE:004B4A9C push eax

  PAGE:004B4A9D push esi

  PAGE:004B4A9E push ds:_InitNlsSectionPointer

  PAGE:004B4AA4 call _MmMapViewOfSection@40 ;MmMapViewOfSection(x,x,x,x,x,x,x,x,x,x)

  PAGE:004B4AA9 mov [ebp-24h], eax

  PAGE:004B4AAC cmp eax, ebx

  PAGE:004B4AAE jl loc_5267FF

  PAGE:004B4AB4 lea eax, [ebp-1Ch]

  注意下面这个210参数,类似一个Flag。在后面你会发现,如果该参数不等于210,那么映射的PEB地址将不会产生随机值,而是会跟以前的一样,始终在7FFDF000位置。

  PAGE:004B4AB7 push eax

  PAGE:004B4AB8 push 210h

  ;注意这个参数!

  PAGE:004B4ABD push esi

  PAGE:004B4ABE call ">_MiCreatePebOrTeb@12 ;MiCreatePebOrTeb(x,x,x)

  真正完成工作

  MiCreatePebOrTeb@12 函数

  PAGE:004B01AE call ExAllocatePoolWithTag@12 ;ExAllocatePoolWithTag(x,x,x)

  PAGE:004B01B3 mov esi, eax

  PAGE:004B01B5 test esi, esi

  PAGE:004B01B7 jz loc_52678E

  PAGE:004B01BD mov eax, [ebp+arg_8]

  PAGE:004B01C0 mov ecx, [ebp+arg_8]

  PAGE:004B01C3 and eax, 0FFFh

  PAGE:004B01C8 neg eax

  PAGE:004B01CA sbb eax, eax

  PAGE:004B01CC neg eax

  PAGE:004B01CE shr ecx, 0Ch

  PAGE:004B01FB cmp [ebp+arg_8], 210h

  PAGE:004B0202 jz loc_4B4A0A

  ;这里将210与压栈的参数比较,如果压入栈的不是210呢

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章