Xhack
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.
Xhack

Un forum dedicato all'hacking
 
IndiceIndice  PortalePortale  CercaCerca  Ultime immaginiUltime immagini  RegistratiRegistrati  Accedi  

 

 [C] Basi di packet injection

Andare in basso 
AutoreMessaggio
BlackLight
Moderatore
Moderatore
BlackLight


Numero di messaggi : 277
Età : 37
Data d'iscrizione : 22.08.07

[C] Basi di packet injection Empty
MessaggioTitolo: [C] Basi di packet injection   [C] Basi di packet injection EmptyVen Nov 09, 2007 11:11 pm

Qui di seguito riporto un codice in C abbastanza inutile di sé (invia un pacchetto HTTP vuoto a localhost, tra l'altro senza fare controlli di checksum a livello dell'header IP e TCP, quindi preparandosi molto probabilmente a essere scartato già al livello 2 dello stack TCP/IP), ma estremamente utile per capire come fare packet injection, quindi come costruirsi da sé un pacchetto come si vuole (quindi volendo falsificando dati del mittente e del destinatario, sia come MAC sia come IP). Il pacchetto lo costruisco semplicemente con un minimo di conoscenza della struttura dei pacchetti TCP/IP, quindi è una costruzione manuale e MOLTO a basso livello. Per l'iniezione del pacchetto così costruito ho usato le PCAP e la relativa funzione pcap_inject.

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <pcap.h>

typedef unsigned char u8;
typedef unsigned short int u16;
typedef unsigned long int u32;

typedef struct  {
        u8 src_mac[6];
        u8 dst_mac[6];
        u16 type;
        u8 ip_head_len;
        u8 zero1;
        u16 tot_len;
        u16 id;
        u8 ip_flags;
        u8 zero2;
        u8 ip_ttl;
        u8 proto;
        u16 ip_checksum;
        u32 src_ip;
        u32 dst_ip;
        u16 src_port;
        u16 dst_port;
        u32 seq_num;
        u32 ack_num;
        u8 tcp_head_len;
        u8 tcp_flags;
        u16 win_size;
        u16 tcp_checksum;
        u8 options[20];
} packet;

packet pkt;

void init_packet (char *data)  {
        u8 ip_head[52];
        int i;
        u8 src[] = { 0x00, 0x16, 0x36, 0x93, 0xd4, 0xdb };
        u8 dst[] = { 0x00, 0x0f, 0x3d, 0x8d, 0xfd, 0xf5 };

        srand((unsigned) time(NULL));

        memcpy (pkt.src_mac,src,sizeof(pkt.src_mac));
        memcpy (pkt.dst_mac,dst,sizeof(pkt.dst_mac));
        pkt.type = 0x0800;
        pkt.ip_head_len = 0x45;
        pkt.zero1=0x0;
        pkt.tot_len=20;
        pkt.id = (u16) rand()%65535;
        pkt.ip_flags = 0x40;
        pkt.zero2 = 0x0;
        pkt.ip_ttl = 0x40;
        pkt.proto = 0x06;
        pkt.ip_checksum=0x0;
        pkt.src_ip=inet_addr("127.0.0.1");
        pkt.dst_ip=inet_addr("127.0.0.1");
        pkt.src_port = (u16) rand()%65535;
        pkt.dst_port=80;
        pkt.seq_num = (u32) rand();
        pkt.ack_num = (u32) rand();
        pkt.tcp_head_len=0x50;
        pkt.tcp_flags=0x10;
        pkt.win_size = (u16) rand()%65535;
        pkt.tcp_checksum=0x0;

        memcpy (ip_head,&pkt,sizeof(ip_head));

        for (i=0; i<36; i++)
                printf ("%.2x ",ip_head[i]);
        printf ("\n");
}

main(int argc, char **argv)  {
        int i;
        pcap_t *sniff;
        char err[PCAP_ERRBUF_SIZE];
        char data[BUFSIZ];
        bpf_u_int32 net,mask;
        u8 ip_head[36];

        init_packet(NULL);
        memcpy (ip_head,&pkt,sizeof(ip_head));

        if (argc==1)  {
                fprintf (stderr,"%s <interface>\n",argv[0]);
                exit(-1);
        }

        if (pcap_lookupnet(NULL,&net,&mask,err)==-1)  {
                fprintf (stderr,"%s\n",err);
                exit(1);
        }

        if (!(sniff=pcap_open_live(argv[1],1024,1,0,err)))  {
                fprintf (stderr,"%s\n",err);
                exit(2);
        }

        pcap_inject (sniff,&pkt,sizeof(packet));
}
Torna in alto Andare in basso
http://blacklight.gotdns.org
 
[C] Basi di packet injection
Torna in alto 
Pagina 1 di 1
 Argomenti simili
-
» SQL injection
» Basi numeriche
» qualche chiarimento sui binari, le basi
» le basi... proprio essenziali del javascript

Permessi in questa sezione del forum:Non puoi rispondere agli argomenti in questo forum.
Xhack :: Programmazione :: C/C++-
Vai verso: