科技行者

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

知识库

知识库 安全导航

至顶网网络频道对WindowsXP SP2溢出漏洞进行保护(3)

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

  • 扫一扫
    分享文章到微信

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

我们知道在我们对溢出漏洞进行eXP的时候,经常要利用全局性的指针,利用异常处理。那么XP的SP2对此作了处理。使得我们无法运用以前的技巧来完成我们的工作。
  • 评论
  • 分享微博
  • 分享邮件
ZwQueryInformationProcess最后会调用一个系统调用,转到内核运行,最后会调用内核中的函数NtQueryInformationProcess,并且调用该函数的子功能代码为0x24。该子功能直接取出保存在进程中的一个随机数,并将其拷贝到用户堆栈中的一个临时变量中。
 

如果该随机数为0,则还要根据系统时间重新生成该随机数,一般在进程刚开始创建的时候,这个随机数为0,从而会重新生成该随机数。由于该随机数跟进程创建的时间有关,所以这个随机数是无法猜测的。该函数在ntoskrnl.exe中导出,跟这个功能相关的函数代码为:
  
  PAGE:004970CC loc_4970CC:
  ;下面的代码得到一个进程唯一的随机数,子功能代码为0x24
  PAGE:004970CC cmp edi, edx ; case 0x24
  PAGE:004970CE jnz loc_497349
  PAGE:004970D4 cmp dword ptr [ebp+8], 0FFFFFFFFh
  PAGE:004970D8 jnz loc_4977B8
  ;下面的代码得到保存随机数的地址
  PAGE:004970DE mov eax, large fs:124h
  PAGE:004970E4 mov eax, [eax+44h]
  PAGE:004970E7 mov [ebp-34h], eax
  PAGE:004970EA
  PAGE:004970EA loc_4970EA:
  PAGE:004970EA mov edi, [ebp-34h]
  PAGE:004970ED add edi, 258h
  ;edi地址中保存的是一个跟进程相关的随机数,这里取出这个随机数
  PAGE:004970F3 mov eax, [edi]
  PAGE:004970F5 test eax, eax
  PAGE:004970F7 jz loc_4B2379
  {
  ;如果得到的随机数为0,则重新得到随机数,得到随机数的过程如下:
  ;1、先得到系统的时间,
  ;2、而后将这个时间和系统内核中的一个值进行不断的异或操作,
  ;就产生了一个随机数
  PAGE:004B2379
  PAGE:004B2379 loc_4B2379:
  ;得到系统时间
  PAGE:004B2379 lea eax, [ebp-3Ch]
  PAGE:004B237C push eax
  PAGE:004B237D call KeQuerySystemTime
  PAGE:004B2382 db 3Eh
  ;得到系统内核中的一个全局变量,该全局变量估计也是一个随机数
  PAGE:004B2382 mov eax, ds:0FFDFF020h
  PAGE:004B2388 mov ecx, [eax+518h]
  PAGE:004B238E xor ecx, [eax+4B8h]

  ;将得到的随机数和得到系统时间进行异或
  PAGE:004B2394 xor ecx, [ebp-38h]
  PAGE:004B2397 xor ecx, [ebp-3Ch]
  ;将计算得到的随机数保存在上面的跟进程相关的全局变量中,edi中保存的就是
  ;这个地址。

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

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

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