오늘은 어제 작성했던 패킷을 덤프하는 프로그램작성을 완성시켰다.
TCP의 데이터까지 출력할 수 있게 만들었다.
(패킷 덤프 프로그램 코드)
(실행결과.(왼쪽-패킷내용, 오른쪽-TCP 통신프로그램))
이 때 Data를 보내는데 TCP에서 많은 패킷이 왔다갔다 한 것을 볼 수 있었다.
TCP헤더의 flag 필드를 보면 패킷의 용도를 확인 할 수 있다.
* TCP는 통신하기 앞서 동기화과정이 먼저 들어간다.
(SYN 패킷)
위 캡쳐한 패킷을 보면 Flag가 SYN으로 나와있다.
캡쳐한 패킷내용을 보면 IP주소 165가 client고 239가 server여서 server로 동기화 요청하였다.
(SYN-ACK 패킷)
그 다음으로 서버측에서 SYN-ACK 패킷을 보내오는 것을 확인할 수 있다.
ACK 패킷은 응답을 주는 것이다. 또 서버측도 내게 동기화를 맞춰야해서 SYN패킷을 보낸다.
(ACK 패킷)
마지막으로 클라이언트쪽에서 서버로 응답 ACK 패킷을 보내는 것을 확인할 수 있다.
여기서 데이터도 같이 보냈는데,
지금 상황에서는 데이터보내는 겸 같이 ACK 패킷을 전송한 것이다.
바로 이런식으로 보내는 것을 Piggyback이라고 한다.
바로 위에서 본 것이 3 Hand Shaking 과정을 본것이다.
3 Hand shaking은 데이터를 주고 받기 전에세션을 맺는 과정이다.
전에 확인했던 걸 생각해보면
TCP에는 상태라는 게 있었다. (Listen, Established...)
그래서 Listen 상태일 때 SYN패킷이 오면 응답을 해주고 쓰리핸드쉐이킹과정을 할 수 있다.
Listen 상태가 아니면 응답을 못해주게 된다. (이점이용하면 SYN Flooding 공격을 할 수 있다.)
3 Hand shaking이 진행됨에 따라 서버측의 상태변화
Listen -> Syn receive -> sysn sent -> established
* 세션을 끝낼때는 4 Hand 쉐이킹 과정이 있다.
이건 나중에 확인해 보겠다.
* Syn 패킷에 들어있는 시퀀스 넘버를 ISN (Initial Sequence Number) 초기 시퀀스번호라고 한다.
-> 서버에게 나를 식별할 수 있는 번호를 보내준다. 서버와 클라이언트는 이 시퀀스 번호를 서로를 알아본다.
-> SYN 패킷의 목적은 이 ISN을 서버에 전달하는 목적이다.
3 Hand shaking 동작 내용.
1. 클라이언트는 SYN 패킷에 ISN을 넣어서 보낸다.
2. 서버도 SYN-ACK 패킷으로 응답을 한다. 이 때 서버의 ISN을 생성해서 클라이언트에 보내면서 응답을 한다.
(서버의 ACK 필드에는 클라이언트의 시퀀스넘버에 1을 더한 값이 들어간다.)
그래서 이 시퀀스 넘버가 틀어지지 않는 이상 이 연결은 유효하다.
3. 클라이언트는 ACK 패킷을 전송한다.
* 세션 하이재킹 -> 남이 로그인한 세션이 인증된 패킷 시퀀스 넘버를 예측해서 그 값을 데이터로 만들어서 보내면 서버에 로그인할수있다.
-> 시퀀스 넘버는 서로 주고받는 크기만큼 늘어난다.
* ACK -> 잘 받았다는 응답이다.
만약 이 패킷을 못받으면 잘 안간줄 간주하고 다시 보낸다.
이게 TCP가 가지고있는 에러정정(Error Control)이다.
이걸 응용하여 다음 ACK응답으로 올 번호를 예상하여 출력해보았다.
(추가한 코드)
(예상 다음 ACK 번호와 일치)
확인해보면 다음 받을 ACK 번호랑 예측한 값과 같음을 확인할 수 있다.
* IP에 관해 이야기를 시작하겠다.
Layer 3
- IP - 경로 설정
- 네트워크 상에서 호스트를 식별하는 식별자(IP주소)로도 사용한다.
- 라우팅 프로토콜이 들어간다.
-> ( 라우팅 프로토콜을 이용하여 취약점을 공략해 공격할 수 있다.)
PDU : Packet (IP 패킷)
- 라우팅 장비가 IP주소를 보고 어디로 보낼지 결정한다.
IP address
-> IANA에서 IP주소 관리, 할당, 표준 제정등을 한다.
- IPv4, IPv6
- 주소의 분류 (체계적으로 관리하기 위해서)
: IPv4의 주소 체계이다.
- 4자리 자연수를 '.' 으로 구분해서 표기한다.
- 1자리 수는 0~255까지 표현이 가능하다.
전체 사용가능한 ip주소 범위 -> 0.0.0.0 ~ 255.255.255.255
-> 실제 사용 불가능한 주소가 있다.
ex) 0.0.0.0 ( 모든 ip를 의미한다. )
255.255.255.255 (브로트캐스팅 주소)
: A class, B class, C class, D class, E class
IP 주소 클래스
A Class
-> 앞에 한자리가 구역을 나타낸다. 이것을 network id라고 표현한다.
-> 나머지 세자리는 host id이다.
-> 네트워크 id : 첫번째 자리
-> host id : 나머지 세 자리. (host를 구별하기위해 사용)
-> 맨 앞 1비트가 0으로 공통이다.
ex) 1.xxx.xxx.xxx
10.xxx.xxx.xxx
-> 2진수로 표현하면 0000 0000.hhhh hhhh.hhhh hhhh.hhhh hhhh
-> 맨 앞비트가 0이어야한다. 즉, 0000 0000 ~ 0111 1111 까지 표현 가능하다.
-> 10진수로 따지면 1.h.h.h(10) ~ 126.h.h.h 까지 가능한 A클래스 주소 범위다. (0도 안된다.) (127도 가상ip주소이므로 사용못한다.)
-> 또 10.h.h.h 도 사용하지 못한다. -> 사설 IP주소이다.
-> 127로 시작하는건 loop back 주소로 자기자신을 표현하는 IP주소이다.
ex) 1.0.0.0 ~ 1.255.255.255 ( 1.h.h.h 주소를 가지고 있다면, 이만큼 쓸수 있는 것이다.)
-> 1.0.0.0 (x)
-> 1.255.255.255 (x)
-> 이 두개는 사용하지 못한다. 이유는 1.0.0.0 은 1.h.h.h를 대표하는 IP주소이고
1.255.255.255는 1.h.h.h 네트워크에 있는 전체에 보내는 브로드캐스트주소이다.
실제 사용 가능한 주소는 1.0.0.1 ~ 1.255.255.254 이다.
'Hacking > Network Hacking' 카테고리의 다른 글
Network Hacking - Layer 2, Data Link Layer (0) | 2016.12.22 |
---|---|
Network Hacking - IP Address, 서브넷마스크, public network, fragmentaion (0) | 2016.12.22 |
Network Hacking - TCP Header 분석 (0) | 2016.12.20 |
Network Hacking - UDP Header, IP Header (1) | 2016.12.17 |
Network Hacking - TCP, UDP (0) | 2016.12.16 |