阅读:2377回复:0
MS15-002 telnet服务缓冲区溢出漏洞分析与POC构造
◆0 漏洞原理分析
MS15-002是微软telnet服务中的缓冲区溢出漏洞,下面对其原理进行分析并构造POC。 telnet服务进程为tlntsvr.exe,针对每一个客户端连接会相应启动执行一个tlntsess.exe进程,补丁修补的是tlntsess.exe文件,通过补丁比对,确定漏洞位置如下,函数为 #!c++ signed int __thiscall CRFCProtocol::ProcessDataReceivedOnSocket(CRFCProtocol *this, unsigned __int32 *a2) 图片:2015011600311841215%E6%8D%95%E8%8E%B73.png 补丁前,该函数分别为: 图片:2015011600311841215%E6%8D%95%E8%8E%B73.png 补丁后,该函数为: 图片:2015011600311841215%E6%8D%95%E8%8E%B73.png 也就是说原来一个缓冲区变成了两个,调用完 #!c++ (*(void (__thiscall **)(CRFCProtocol *, unsigned __int8 **, unsigned __int8 **, unsigned __int8))((char *)&off_1011008 + v12))(v2,&v13,&v9,v6) 之后,先对缓冲区中的数据长度进行判断,如果 #!c++ (unsigned int)(v9 - (unsigned __int8 *)&Src - 1) = 0x800 则退出,否则执行 #!c++ memcpy_s(v14, (char *)&v18 - (_BYTE *)v14, &Src, v9 - (unsigned __int8 *)&Src) 将数据拷贝到Dst缓冲区。 而补丁前,只有一个缓冲区,调用 #!c++ (*(&off_1011008 + 3 * v7))(v3, &v14, &v13, *v6) 之前,先对缓冲区中的数据长度进行判定,只有当v13 - &Src |
|
|