yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1917回复:12

关于WIN9x的c:\\con\\con漏洞问题

楼主#
更多 发布于:2002-05-10 22:23
当WIN9x执行此行命令时会导致蓝屏,我用SoftIce跟踪了一下,发现在内核执行过程中到某一处调用时并没有进行堆栈的保护,导致调用返回时从堆栈中取得一错误的返回地址,从而产生蓝屏,但具体是什么原因会这样并不清楚,有哪位高人能指点一下,在下不胜感激!
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-11 19:57
你在NsFocus看到的吗?
哪里有注解!很清楚的!
你自己看吧不贴了!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-11 21:32
不是在绿盟看到的,是在微软的网站,不过我到绿盟去查过,并没有对该问题给出详细的解释,只是说是内核溢出导致该漏洞,我想彻底的弄清楚究竟是哪部分代码,什么原因导致的,看来路漫漫其修远兮,吾将上下而求索,在此对你的回帖表示感谢
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-13 00:15
首先问一下:
1、\"发现在内核执行过程中到某一处调用时并没有进行堆栈的保护,导致调用返回时从堆栈中取得一错误的返回地址\"是怎么得出来的,你是在函数调用前后看其esp是否相同吗?
2、你的出错处的函数是在ring0还是ring3。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-13 20:22
当然是在内核级下,我是单步跟踪某一处调用时发现返回地址虽已压入堆栈,但从被调用的代码返回时其返回地址不是先头压入堆栈的,其值似乎不固定,从而蓝屏死机
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-15 11:30
你是使用ASM还是C,如果是ASM你可能需要自己保存堆栈,
如果是C,你需要注意不同调用规范之间的差别。
当然如果你使用其它非正规技术(如:修改Windows函数的代码),那么你可能需要考虑该函数是否使用了reigster传递参数等。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-15 12:37
你是使用ASM还是C,如果是ASM你可能需要自己保存堆栈,
如果是C,你需要注意不同调用规范之间的差别。
当然如果你使用其它非正规技术(如:修改Windows函数的代码),那么你可能需要考虑该函数是否使用了reigster传递参数等。

文不对题!
另外,绿盟没有,袁哥的主页上有。
一剑西来,天外飞仙
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-15 13:25
To yanghui:
你能否将被调用的函数和其调用代码贴出来看看是怎么回事
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-17 15:08
我跟踪的时候大概是二个多月以前,具体位置记不太清楚了,稍后我会整理一下并贴出来
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-20 00:08
对不起,时间隔久了,记错了,实际上不是堆栈的原因,函数的调用也没错,据我大概的跟踪分析,与该漏洞的解释相符,是windows内核对特殊设备名的解析错误,以下是我跟踪的代码片段:
0167:7fcb810e push dword ptr [ebp+08] //保存的缓冲地址入栈,该地址指向c:\\con\\con
0167:7fcb8111 call [kernel32!getfileattributesa]
跟踪进7fcb8111的call,来到
0167:bff77bb0 push edi
.....
0167:bff7547e call bff712b9
跟踪进bff7547e的call,来到
0167:bff712b9 push ecx
.....
0167:bff712c0 call kernel32!ord_0001
跟踪进bff712c0的call,来到
0167:bff713d4 mov eax,[esp+04]
.....
0167:bff713db call far cs:[bffca834]
跟踪进bff713db的call,来到
003b:03ac int 30
继续跟进,来到
0028:c0001d94 sub esp,04
.....
0028:c02836e4 call [Exec_PM_Int]
跟踪进c02836e4的call,来到
0028:c0272348 push ebx
.....
0028:c027236a call [Exec_Int]
跟踪进c027236a的call,来到
0028:c0003a30 call [Simulate_Int]
.....
0028:c011e7e8 call [eax+ebx+0c]
跟踪进c011e7e8的call,来到
0028:c011db39 cmp ebx,[c0122510]
.....
0028:c011dd39 call [ecx*4+c0122a24]
跟踪进c011dd39的call,来到
0028:c0291a08 push ebp
.....
0028:c0291a12 call c0291660
跟踪进c0291a12的call,来到
0028:c0291660 push ebp
.....
0028:c0291981 call c011ed30
跟踪进c0291981的call,来到
0028:c011ed30 push ebp
.....
0028:c011ee8c call [ebp+08]
跟踪进c011ee8c的call,来到
0028:c0130dd4 push ebx
.....
0028:c0130e7b call c0138044
跟踪进c0130e7b的call,来到
0028:c0138044 sub esp,10
.....
0028:c01381af call c01381f0
跟踪进c01381af的call,来到
0028:c01381f0 mov [ebp+3e],eax
.....
0028:c01383d3 call c012f852
跟踪进c01383d3的call,来到
0028:c012f852 mov eax,[ebp+4c]
.....
0028:c012f8d8 call c012eaf4
跟踪进c012f8d8的call,来到
0028:c012eaf4 mov edi,[ebp+1c]
.....
0028:c012eb17 call c01302b7
跟踪进c012eb17的call,来到
0028:c01302b7 push esi
.....
0028:c01302be call c0139333
跟踪进c01302be的call,来到
0028:c0139333 push ecx
.....
0028:c013933f call c01392b1
跟踪进c013933f的call,来到
0028:c01392b1 push edx
0028;c01392b2 sub eax,eax
0028:c01392b4 mov esi,[edi+14]
              ~~~~~~~~~~~~~~~~
0028:c01392b7 bt dword ptr [ebp+38],oc
0028:c01392bc sbb edx,edx
0028:c01392be and edx,02000000
0028:c01392c4 test byte ptr [ebp+39],05
0028:c01392c8 jnz c0139313
0028:c01392ca mov ah,02
0028:c01392cc mov esi,[edi+14]
0028:c01392cf movzx ebx,word ptr [esi+0a] //到此处,就会导致页面错,即出现蓝屏,因edi的值为零,从而esi指向的内存地址是无效的,而正常情况下edi的值不为零,有一定的含义,具体是什么含义我还在分析,但我估计与该命令行路径有关,因为在即将蓝屏前会调用Ifs_ParsePath函数,初步分析对edi的值有影响,但windows的内核太庞大了,一大堆的call摆在你面前,这还不算完,还会你中有我,我中有你,只能发扬愚公移山的精神了,稍后我会贴出新的分析,望能与大家共同探讨研究!
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-05-20 10:48
勘误,Ifs_ParsePath实为IFSMgr_FSDParsePath,该服务用于路径的解析,以下是MSDN中的说明:
IFSMgr_FSDParsePath(
 pioreq pir
 )

This service calls the IFS manager\'s parse routine. It provides a way for an FSD to parse a given path if it is called via private APIs. There is never a reason to do this on calls routed through the IFS manager.


AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-20 22:00
我想是其它地方将内存破坏了,你跟踪一下正常的getfileattributesa函数调用,是按上面的调用吗?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
yanghui
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2009-10-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-05-22 14:51
不错,正常情况下也是按我跟踪的代码执行,不同的是edi的值具有一定的意义,不为0,具体我还要分析IFSMgr_FSDParsePath函数,因为调用它后edi的值就会变化
游客

返回顶部