CCProxy Telnet Proxy Ping远程栈溢出分析

By:疯狗(B.C.T)

简单的了解了一下漏洞原因,问题出在ping上,首先先触发这个漏洞看看效果。
开启CC,然后telnet 127.0.0.1 23,出现如下提示
CCProxy Telnet>CCProxy Telnet Service Ready.
CCProxy Telnet>
直接输入ping AAAAAAAAAA…(超长的A),程序崩溃了,看看提示

程序在读取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 ==> 0x44414141
AAAH 8 0x08 EIP ==> 0x48414141
AAAL 12 0x0c EIP ==> 0x4c414141

生成了3000个字符进行提交后读取的数值变成了这样

变成了424e4241
手工调试跟踪了几次,查看寄存器窗口,发现了想要的东西,被覆盖的ESP,还有面目全非的EIP:)

(cooldiyer的那个小程序)123.exe -c 3000 -v 输出内存数据
然后查找EIP现在的值0x424e4241
ABNB 1016 0x3f8 EIP ==> 0x424e4241
OK,EIP的位置就是提交1012个字符后的位置
在用相同的方法找ESP指向的位置,寻找AAAH
AAAH 8 0x08 EIP ==> 0x48414141
GOOD,是字符串开始的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的小工具和其分析思路,拜一个,但是在学习别人的同时自己理解才是最重要的!!溢出分析真的很有意思,近期就会投入到工作范围中了吧:)

相关日志

抢楼还有机会... 抢座Rss 2.0或者 Trackback

  • crack

    我在单位里用得就是CC,不过我是被代理的,也就是说只有代理我的那个人的机器上才有CC,好像是CC的6.4版的.
    我该怎么利用CC的相关的漏洞或者是别的洞进入他的机器,我们是朋友,我住的地方离单位近,晚上加班的时候得经常从他的机器上拿一些文件,但是他一下班就锁门了,好几次留门,实在是不便.
    望鬼仔指点一二.
    他的机器里有个360,别的什么都没有了.

发表评论