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

2016. 4. 27. 16:50네트워크 보안 수업/네트워크 취약점 분석

반응형

wireshark: 모니터링 툴


ARP REQUEST


0000   ff ff ff ff ff ff 90 9f 33 ec ca 07 08 06 00 01 )

0010   08 00 06 04 00 01 90 9f 33 ec ca 07 c0 a8 0f 63 ) 이더넷 프레임

0020   00 00 00 00 00 00 c0 a8 0f 0a )


ff ff ff ff ff ff 90 9f 33 ec ca 07 08 06 맨 처음 14바이트는 이더넷 헤더라 부름


00 ff ff ff ff ff ff 도착지 맥 어드레스

00 90 9f 33 ec ca 07 출발지 맥 어드레스

00 08 06 프로토콜 타입 - ARP

00 00 01 하드웨어 타입


10 08 00 IP

10 06 하드웨어 크기

10 04 ip 버전

10 00 01 op코드 리퀘스트는(맥주소를 물어보는) 01  

리플라이는(맥주소를 알려주는) 02

10 90 9f 33 ec ca 07 보내는 사람의 맥주소

10 c0 a8 0f 63 보내는 사람의 IP


20 00 00 00 00 00 00 받는사람의 맥 어드레스, 모르므로 0으로 채움

20 c0 a8 0f 0a 받는사람의 IP


ARP Reply


0000 90 9f 33 ec ca 07 50 6a 03 af 2a 98 08 06 00 01

0010 08 00 06 04 00 02 50 6a 03 af 2a 98 c0 a8 0f 01

0020 90 9f 33 ec ca 07 c0 a8 0f 07



0000   ff ff ff ff ff ff 90 9f 33 ec ca 07 08 06 00 01

0010   08 00 06 04 00 01 90 9f 33 ec ca 07 c0 a8 0f 63

0020   00 00 00 00 00 00 c0 a8 0f 0a


[실습]: ARP REQUEST


192.168.15.140 ---> 192.168.15.150


ff ff ff ff ff ff 08 00 27 25 5d 35 08 06 00 01

08 00 06 04 00 01 08 00 27 25 5d 35 c0 a8 0f 8c

00 00 00 00 00 00 c0 a8 0f 96


리눅스 네트워크 프로그래밍


- 리눅스 소켓 프로그래밍(RAW socket)


- 소켓: 네트워크 스트림에 대한 식별자




yum install -y wireshark.x86_64



#include <stdio.h>

#include <unistd.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <netinet/ip.h>

#include <net/if.h>

#include <net/if_arp.h>

#include <linux/if_packet.h>

#include <linux/if_ether.h>

#include <net/ethernet.h>

#include <arpa/inet.h>


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

{

        int sock = 0;

        struct sockaddr_ll sll;


        char data[42] = {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;


        //data fill


        // dst mac address

        data[0] = 0xff;

        data[1] = 0xff;

        data[2] = 0xff;

        data[3] = 0xff;

        data[4] = 0xff;

        data[5] = 0xff;


        //src mac address

        data[6] = 0x08;

        data[7] = 0x00;

        data[8] = 0x27;

        data[9] = 0x25;

        data[10] = 0x5d;

        data[11] = 0x35;


        //ether type

        data[12] = 0x08;

        data[13] = 0x06;


        //hw type

        data[14] = 0x00;

        data[15] = 0x01;


        //proto type

        data[16] = 0x08;

        data[17] = 0x00;


        //hw len

        data[18] = 0x06;


        //proto len

        data[19] = 0x04;


        //opcode

        data[20] = 0x00;

        data[21] = 0x01;


        //sender mac address

        data[22] = 0x08;

        data[23] = 0x00;

        data[24] = 0x27;

        data[25] = 0x25;

        data[26] = 0x5d;

        data[27] = 0x35;


        //sender ip address

        data[28] = 0xc0;

        data[29] = 0xa8;

        data[30] = 0x0f;

        data[31] = 0x8c;


        //target mac address

        data[32] = 0x00;

        data[33] = 0x00;

        data[34] = 0x00;

        data[35] = 0x00;

        data[36] = 0x00;

        data[37] = 0x00;


        //target ip address

        data[38] = 0xc0;

        data[39] = 0xa8;

        data[40] = 0x0f;

        data[41] = 0x96;


        //send


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


        return 0;

}

반응형