记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

iNodeManager远程拒绝服务或执行任意代码漏洞

2013-07-23 11:15
由于完成SSL数据交互过程较困难,只做原理说明。在安装inode时,客户端存在认证过程所需的所有证书和key,所以一定能够构造出来。
 
分析的目标程序的版本为H3C iNode PC 5.1 E0307,存在漏洞的进程为iNodeMngChecker.exe
 
可以看到程序绑定9090端口监听连接。
 
在线程函数int __stdcall sub_420430(SOCKET *a1)中调用sub_41F730(v8, v5)接收并处理数据。
 
 
在sub_415AE0函数中完成数据的接收,缓冲区v90存放接收到的数据,v52为接收数据的长度
 
 
函数sub_419600处理数据,参数1为接收到的数据,参数2为数据长度
 
sub_419600中调用sub_41B950(&v105, a1, a2)函数,将a1中的数据拷贝到v105开始的缓冲区,并作一些初始化
 
sub_41BEE0函数完成对v105的处理
 
 
sub_41BEE0函数中首先判断接收数据的前4字节是否为0xA0BF007,然后取出v7 = *((_DWORD *)pRecvData + 2),判断是否小于0x1000。取v6 = *((_DWORD *)pRecvData + 1)判断等于0xC1。如果构造数据使得v6 = 0xC1,v7 = 0x90C,就能执行到
 
 
while循环中,首先判断 v15 = (int)((char *)pRecvData + v8(12))是否为0,显然不为0,取v16 = *(_DWORD *)(v15 + 4),此时相当于取pRecvData + 16处的4字节, 此时v25 = v7 - 0xC = 0x900,此时如果构造的数据中v16的值为0x8FF,就能越过if ( v16 > v25 || v16 < 8 )的判断,同时v17 = v16 - 8 = 0x8F7;到达switch,可以构造v15处的值为 0x14,可以看到程序拷贝数据memcpy((char *)pRecvData + 4108, v15 + 8, v17)到(char *)pRecvData + 4108处,而pRecvData 为sub_419600中的v105缓冲区
 

 
 
缓冲区v105距离栈底为0x1340,而memcpy的目标地址为(char *)pRecvData + 4108,即v105 + 0x100C,而拷贝的数据长度为v17也就是我们所构造的0x8F7,显然已经覆盖了sub_419600的返回地址。所以当sub_41BEE0正常运行结束后,如果不发生异常,则最终能够导致拒绝服务攻击,否则导致执行任意代码
 
溢出为位置显然包含后的多个memcpy 
 
知识来源: www.2cto.com/Article/201307/230095.html

阅读:71713 | 评论:0 | 标签:漏洞

想收藏或者和大家分享这篇好文章→复制链接地址

“iNodeManager远程拒绝服务或执行任意代码漏洞”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云