By:疯狗(B.C.T)简单的了解了一下漏洞原因,问题出在ping上,首先先触发这个漏洞看看效果。开启CC,然后telnet 127.0.0.1 23,出现如下提示CCProxy Telnet>CCProxy Telnet Service Ready.CCProxy Telnet>直接输入ping AAAAAAAAAA...(超长的A),程序崩溃了,看看提示500)this.width=500;">程序在读取41414141也就是AAAA时出错,41414141是我提交的超长的AAA...并不是正确的指令,况且这里的内存还是为分配的,典型的栈溢出。漏洞分析暂时略过,已经被分析的很透彻了,CC在发ping命令的时候用的是send函数和WSASend函数, send一次只能发送一个缓冲区,而且效率底下,WSASend可以发送多个缓冲区,而且性能要比send高,所以CC肯定使用了WSASend,经过一些人的分析确实如此。OD载入,动态分析,这次我使用了cooldiyer的检测溢出点的程序,在xfocus下的好code,工具的原理(借助于英文26个字母实现了26进制,4位最多可以到ZZZZ也就是26的4次方就是十进制的456976十六进制的0x6f910,原理是因为编译器字节对齐默认情况下是按双字(4bytes)对齐的)AAAD 4 0x04 EIP ==> 0x44414141AAAH 8 0x08 EIP ==> 0x48414141AAAL 12 0x0c EIP ==> 0x4c414141...生成了3000个字符进行提交后读取的数值变成了这样500)this.width=500;">变成了424e4241手工调试跟踪了几次,查看寄存器窗口,发现了想要的东西,被覆盖的ESP,还有面目全非的EIP:)500)this.width=500;">(cooldiyer的那个小程序)123.exe -c 3000 -v 输出内存数据然后查找EIP现在的值0x424e4241ABNB 1016 0x3f8 EIP ==> 0x424e4241OK,EIP的位置就是提交1012个字符后的位置在用相同的方法找ESP指向的位置,寻找AAAHAAAH 8 0x08 EIP ==> 0x48414141GOOD,是字符串开始的4 字符,为什么?1字符=2字节,2×4=8...关于exploit,不想浪费太多精力在上面,昨天就浪费好多时间在写shelllcode上,网上那么多随便找个不就得了:(不过还是要分析下这个exploit中感兴趣的部分memset(Buff, 0x90, sizeof(Buff)-1); //NOP空操作填充 程序不中断 一直往下走...memcpy(&Buff[1017], JUMPESP,4); //ping+空格+1012个字符正好到EIP:) 1017个字符厄memcpy(&Buff[9], shellcode,sizeof(shellcode)-1); // ping+空格+4 控制ESP后来得知由于填充数据太长,shellcode被放在了前面的1017个字符中,而且程序在前面有个ESI可以被控制,指向的正是填充数据区域,所以利用格式就是ping+空格+AAAA...+shellcode+jmp esi。ok,分析到此结束,这次分析主要依靠cooldiyer的小工具和其分析思路,拜一个,但是在学习别人的同时自己理解才是最重要的!!溢出分析真的很有意思,近期就会投入到工作范围中了吧:)