/* $Id: silk.c,v 1.2 2000/06/04 23:08:49 obecian Exp $ * * . . * _( (_) )_ _________ ________ * <----, / _____// _____// _____/ * <-----====\_____ \=\_____ \/ \========== RELEASE * <----' / \/ \ \_\ \ * /_______ /_______ /\______ / * /\___________\/________\/_______/ / * /_________________________________/ * * silk.c - SSG HTTP Request Packet Injection * (c) 2000 obecian * */ #define TITLE "silk.c - SSG HTTP Request Packet Injection" #define CODER "(c) 2000 obecian (obecian@subterrain.net)" #include #include #include #include #include #include #include #include void usage(char *arg) { printf("%s -s server -u uri [-p port] [-m method] [-r referer] [-v version]\n\n", arg); exit(-1); } int main(int argc, char **argv) { int opt, i, sock; extern char *optarg; extern int opterr; struct sockaddr_in sin; struct hostent *he; char buffer[1024]; int port = 80; char *method = "GET"; char *server = "www.subterrain.net"; char *vhost = "www.subterrain.net"; char *referer = "http://402686256/"; char *agent = "silk/SSG"; char *version = "HTTP/1.0"; char *uri = "/"; putchar('\n'); puts(TITLE); puts(CODER); putchar('\n'); if (argc < 2) usage(argv[0]); opterr = 0; while ((opt = getopt(argc, argv, "h:u:v:r:s:p:a:m:")) != EOF) { switch (opt) { case 's': server = optarg; break; case 'p': port = atoi(optarg); break; case 'm': method = optarg; break; case 'h': vhost = optarg; break; case 'r': referer = optarg; break; case 'a': agent = optarg; break; case 'v': version = optarg; break; case 'u': uri = optarg; break; case '?': usage(argv[0]); break; } } if ((he = gethostbyname(server)) == NULL) { herror("gethostbyname"); exit(-1); } if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(-1); } sin.sin_family = AF_INET; sin.sin_port = htons(port); sin.sin_addr = *((struct in_addr *)he->h_addr); bzero(&(sin.sin_zero), 8); if (connect(sock, (struct sockaddr *)&sin, sizeof(struct sockaddr)) == -1) { perror("connect"); exit(-1); } snprintf(buffer, sizeof(buffer), "%s %s %s\r\nHost: %s\r\nReferer: %s\r\nUser-Agent: %s\r\n\r\n", method, uri, version, vhost, referer, agent); if ((write(sock, buffer, sizeof(buffer)))<0) { perror("write"); exit(-1); } printf("Caught!\n\n"); bzero(&buffer, sizeof(buffer)); while((i=read(sock, buffer, sizeof(buffer)))!=0) write(1, buffer, i); close(sock); putchar('\n'); exit(0); }