Il Forum di Orebla.it

Benvenuto nella community di Orebla.it
Oggi è mer 20 nov, 2019 5:20 am

Tutti gli orari sono UTC + 1 ora




Apri un nuovo argomento Rispondi all’argomento  [ 1 messaggio ] 
Autore Messaggio
 Oggetto del messaggio: [C] Basic packet injecter
Messaggio da leggereInviato: ven 15 feb, 2008 10:07 am 
Non connesso
super-guru
super-guru
Avatar utente

Iscritto il: mar 28 dic, 2004 6:54 pm
Messaggi: 300
Località: Pisa
Usando i raw socket ho preparato un injecter di base...
Questo codice prende come argomenti l'IP sorgente (può essere spoofato) e quello di destinazione e una porta TCP da testare, quindi invia un pacchetto SYN a questa porta:

Codice:
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <sys/socket.h>
#include <netinet/in.h>

#include <linux/if_ether.h>
#include <linux/ip.h>
#include <linux/tcp.h>

typedef unsigned short u16;
typedef unsigned long  u32;

unsigned short csum (unsigned short *buf, int nwords)  {
        unsigned long sum;

        for (sum = 0; nwords > 0; nwords--)
                sum += *buf++;
                sum = (sum >> 16) + (sum & 0xffff);
                sum += (sum >> 16);
        return ~sum;
}

main(int argc, char **argv)  {
        int i,sd,one;
        unsigned char buff[BUFSIZ];

        struct sockaddr_in sin;
        struct iphdr *ip = (struct iphdr*) malloc(sizeof(struct iphdr));
        struct tcphdr *tcp = (struct tcphdr*) malloc(sizeof(struct tcphdr));

        if (argc<4)  {
          printf ("%s <ip_src> <ip_dst> <port>\n",argv[0]);
          exit(1);
        }

        srand ((unsigned) time(NULL));
        sd=socket (PF_INET, SOCK_RAW, IPPROTO_TCP);

        sin.sin_family=AF_INET;
        sin.sin_port=htons(atoi(argv[3]));
        sin.sin_addr.s_addr=inet_addr(argv[2]);

        memset (buff,0,sizeof(buff));

        ip->version=4;
        ip->ihl=5;
        ip->tos=0;
        ip->tot_len=sizeof(struct iphdr)+sizeof(struct tcphdr);
        ip->id=htonl(12345);
        ip->frag_off=0;
        ip->ttl=255;
        ip->protocol=IPPROTO_TCP;
        ip->check=0;
        ip->saddr=inet_addr(argv[1]);
        ip->daddr=inet_addr(argv[2]);
        ip->check = csum ((unsigned short *) buff, ip->tot_len >> 1);

        tcp->source = (rand()%64511)+1024;
        tcp->dest=htons(atoi(argv[3]));
        tcp->seq = rand()%0xffffffff;
        tcp->ack_seq=0;
        tcp->doff=5;
        tcp->res1=0;
        tcp->fin=0;
        tcp->syn=0;
        tcp->rst=1;
        tcp->psh=0;
        tcp->ack=0;
        tcp->urg=0;
        tcp->ece=0;
        tcp->cwr=0;
        tcp->window=htonl(0xffff);
        tcp->check=0;
        tcp->urg_ptr=0;

        memcpy (buff,ip,sizeof(struct iphdr));
        memcpy (buff+sizeof(struct iphdr),tcp,sizeof(struct tcphdr));

        for (i=0; i<sizeof(struct iphdr)+sizeof(struct tcphdr); i++)
                printf ("%x ",buff[i]);
        printf ("\n");

        one=1;

        if (setsockopt (sd, IPPROTO_IP, IP_HDRINCL, &one, sizeof (one)) < 0)
                printf ("Warning: Cannot set HDRINCL!\n");

        if (sendto (sd,
                          buff,
                          ip->tot_len,
                          0,
                          (struct sockaddr *) &sin,
                          sizeof (sin)) < 0)
                printf ("error\n");
        else
                printf (".\n");

        close(sd);
}

_________________
Immagine
Immagine


Top
 Profilo  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 1 messaggio ] 

Tutti gli orari sono UTC + 1 ora


Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduzione Italiana phpBBItalia.net basata su phpBB.it 2010
phpBB SEO