expliot:Expliot编写指南的PNP溢出漏洞分析利用

=tpc_content>个月前和朋友聊天谈到现在网络上蠕虫、病毒是越来越猖狂前年“冲击波”去年“震荡波”今年还不知道又出什么呢?话音刚落个被命名为Zotob蠕虫病毒已经在8月15日开黑客防线始传播后来几天该蠕虫变种相继产生对网络造成了影响  
Zotob蠕虫是基于Windows2000 以上版本即插即用(PNP)服务中产生堆栈溢出漏洞远程攻击者通过TCP 445或139端口向该服务提交畸形请求溢出后可能获取系统权限大家防范意识都比较强了很多用户都及时打了补丁般个人防火墙默认规则也封堵了TCP 139或445端口该漏洞破坏力已经明显不如以前“冲击波”们了言归正传我们还是来分析这个漏洞
、漏洞起因及影响范围
漏洞起因前面已经简单提到了我们可以参见漏洞公告
从漏洞公告我们可以看出两点:
1.漏洞起因:Windows 2000版本以上PNP服务存在远程堆栈溢出漏洞“远程”是该服务可以通过RPC接口来远程
2.影响范围:漏洞只对Windows 2000 有真正威胁而要攻击XP和Windows2003均有限制对于这个RPC接口如果在Windows 2000上则可以远程匿名进行;在 Windows XP SP0、SP1上需要以个有效账号登录后才可以;在Windows XP SP2和Windows 2003上只有管理员组用户才能远程其它账号只能本地
2、远程溢出漏洞宏定位分析
这部分工作我认为很重要因此在本文中正好讲清楚所谓“宏定位”就是指我们应该对我们实现目标进行预先分析调试漏洞是这样做其它工作也是如此步做好了我们在后面可以少走弯路
1.对具有溢出漏洞服务进程归类
这里我们将服务进程分为两类类是服务自身绑定了端口可以是TCP 或UDP端口;另类当然是服务进程自身没有绑定任何端口对于前类服务远程机器直接通过传输层协议(TCP或UDP协议)+应用层协议(如RPC协议、http协议)来访问服务IIS、FTP、HTTP都属于这类服务如果他们服务存在漏洞我们可以通过重复绑定端口、复用个月前和朋友聊天谈到现在网络上蠕虫、病毒是越来越猖狂前年“冲击波”去年“震荡波”今年还不知道又出什么呢?话音刚落个被命名为Zotob蠕虫病毒已经在8月15日开黑客防线始传播后来几天该蠕虫变种相继产生对网络造成了影响  
Zotob蠕虫是基于Windows2000 以上版本即插即用(PNP)服务中产生堆栈溢出漏洞远程攻击者通过TCP 445或139端口向该服务提交畸形请求溢出后可能获取系统权限大家防范意识都比较强了很多用户都及时打了补丁般个人防火墙默认规则也封堵了TCP 139或445端口该漏洞破坏力已经明显不如以前“冲击波”们了言归正传我们还是来分析这个漏洞
、漏洞起因及影响范围
漏洞起因前面已经简单提到了我们可以参见漏洞公告
从漏洞公告我们可以看出两点:
1.漏洞起因:Windows 2000版本以上PNP服务存在远程堆栈溢出漏洞“远程”是该服务可以通过RPC接口来远程
2.影响范围:漏洞只对Windows 2000 有真正威胁而要攻击XP和Windows2003均有限制对于这个RPC接口如果在Windows 2000上则可以远程匿名进行;在 Windows XP SP0、SP1上需要以个有效账号登录后才可以;在Windows XP SP2和Windows 2003上只有管理员组用户才能远程其它账号只能本地
2、远程溢出漏洞宏定位分析
这部分工作我认为很重要因此在本文中正好讲清楚所谓“宏定位”就是指我们应该对我们实现目标进行预先分析调试漏洞是这样做其它工作也是如此步做好了我们在后面可以少走弯路
1.对具有溢出漏洞服务进程归类
这里我们将服务进程分为两类类是服务自身绑定了端口可以是TCP 或UDP端口;另类当然是服务进程自身没有绑定任何端口对于前类服务远程机器直接通过传输层协议(TCP或UDP协议)+应用层协议(如RPC协议、http协议)来访问服务IIS、FTP、HTTP都属于这类服务如果他们服务存在漏洞我们可以通过重复绑定端口、复用来绕过防火墙检测对于后类服务远程机器通过传输层协议+命名管道(IPC$)+应用层协议来访问服务这也就是为什么我们访问LSASS、WorkStation等服务时候要先和远程机器建立IPC$空连接原因这类漏洞要利用要躲避防火墙检测实现起来要困难这个我在后门会提到
感染利用PNP溢出漏洞蠕虫后我们机器会弹出系统显示“系统处理c:\winnt\system32\services出乎意料终止”关机提示框根据以往经验我们可以看出该漏洞是存在于Services进程中点和WorkStation服务因此归为后
2.服务进程接收缓冲区长度是否足够
这个问题集中体现在用于接收请求(如recv、recvfrom等)第3个参数len上如果指定len很小我们是无法次性传送功能复杂很长ShellCode这时就必须采用其他传送方式例如把ShellCode分段传送在10期另篇溢出文章编写分段传送ShellCode有介绍接收缓冲区长度问题般在服务进程自身绑定了端口溢出漏洞中出现因此PNP服务中可以暂不考虑
3.异常发生位置
这个问题是指我们向服务提交超长请求后会覆盖问题返回地址EIP等指针返回时候跳转到我们覆盖数据指定地址时候可能发生异常;另外种情况就是在该返回的前由于我们覆盖了局部变量中其它指针导致对其进行引用时候发生异常简而言的就是ret前和ret后发生异常区别对于ret后异常我们可能需要通过KiUserExceptionDispatcher和监视点思路方法来联合定位溢出点并且漏洞利用方式有两种:改写EIP为jmp esp 地址或改写SEH指针;而对于ret前异常我们般通过KiUserExceptionDispatcher来定位溢出点就够了利用时候也只能改写 SEH指针我们预先并不知道PNP溢出漏洞属于哪不过等下面进步调试后就明确了
4.如果是问题ret后异常则判断该约定
这个问题是最容易被忽略如果我们能够采用jmp esp利用方式可能很多人会在覆盖jmp esp位置紧接4个字节开始地方连接ShellCode问题就出在这里
不管是Windows系统进程、第3方软件Software、还是我们自己用VC6、VC7编写只要和C/C相关般来说可以分为__cdecl和__stdcall两种约定采用__cdecl在返回需要者恢复实参占用堆栈也就是只执行返回指令为ret我们把ShellCode接到保存EIP后面是没问题;而采用__stdcall在返回是执行指令ret n自己恢复实参占用堆栈我们如果把ShellCode接到保存EIP后面话开始n个字节代码就执行不到了这也就是为什么我们在构造些系统进程溢出漏洞(如RPC、WorkStation、LSA等)攻击代码时候jmp esp地址后要有若干保留字节原因好了带着剩下问题我们继续
3、PNP溢出漏洞步分析+利用
现在牛人们利用编写漏洞代码速度是越来越快了蠕虫出来两、 3天攻击代码就已经公布出来了既然有现成我们就直接拿过来用了于是我把www.xfocus.net 上公布代码拿来整理后编译执行结果目标机器还是发生了异常
幸好是用VMWare(+Windows 2000 SP4)作测试否则用我自己机器岂不麻烦?很显然攻击代码存在问题再看看网上代码中地址填充:
EvilRPC.SDA[76] = 0x3e;
EvilRPC.SDA[77] = 0x1e;
EvilRPC.SDA[78] = 0x02;
EvilRPC.SDA[79] = 0x75;
这个地址不是我们熟悉地址需要进步分析这样漏洞分析VMWARE和SoftICE组合是再合适不过了顺便向大家推荐:)启动VMWARE中SoftICE设置断点:
bpx ntdll!KiUserExceptionDispatcher
发生任何异常SoftICE都会先在这个条指令停顿下来有关KiUserExceptionDispatcher及其参数详细介绍2004年黑防10期ISNO我是怎样发现CCPROXY溢出漏洞文中有详细介绍我在05年8期中对Realplay溢出漏洞分析中也有详细介绍大家可以参考这里我只结合本漏洞谈谈
OK重新攻击VMWare系统果然弹出了SoftICE并停留在KiUserExceptionDispatcher入口处
输入命令addr可以看到确是Services进程空间发生了异常输入命令:d (*(esp + 4) + b4), 得到异常发生时:EBP = 0x005bf874, EIP = 0x76750199
在输入命令d (*(esp + 4) + c4)得到异常发生时:ESP = 0x005bf864
调试到这里由EIP = 0x76750199我们应该得出了个结论:该漏洞是典型ret前异常换句话说就是在问题返回的前就已经发生了异常按照前面宏定位分析网上公布代码是定利用了改写SEH指针方式我们来证明下:
输入命令d fs:0我们看到当前线程S E H结构位于0x005bf8f8处
再输入命令d ss:005bf8f8看到了当前线程SEH结构8字节
呵呵当前线程异常处理指针是0x75021e3e也就是前面看到填充地址证明了我前面假设我们将该地址改为Windows 2000下通用jmp ebx地址:0x7ffa1571前面4个字节填写为eb 06 eb 04然后将VMWare系统重启再次测试
这下目标机器没有重启VMWare系统IP为192.168.1.8在本机输入telnet 192.168.1.8 8721立即得到了Shell修改成功了
<b>小结</b>
本文中我简单地和大家起对PNP服务溢出漏洞进行了分析分析过程不复杂只是我想通过这样分析调试和大家起分享我调试这些漏洞些经验本文中涉及宏定位分析在以后大家分析其它复杂



  • 篇文章: 教你如何用VB打造远程屏幕监控木马

  • 篇文章: 编程实现停止瑞星监控delphi
  • Tags:  溢出漏洞 缓冲区溢出的漏洞 缓冲区溢出漏洞 expliot

    延伸阅读

    最新评论

    发表评论