OZ1NG의 뽀나블(Pwnable)

[Network] FTP 정리 본문

Laboratory

[Network] FTP 정리

OZ1NG 2021. 4. 12. 23:26

[*] FTP 정리

FTP는 TCP를 사용함. 따라서 사전에 3 Way-Handshake를 함. (종료할땐 4 Way-Handshake를 하여 종료.)

 

FTP는 기본적으로 Command Port(21) Data Port(20)을 사용함.

Command Port는 서버와 클라이언트가 이름대로 Command를 주고 받는 Port이고, 보통 서버의 Command Port는

21번 포트를 사용함. 

Data Port는 서버와 클라이언트가 Data를 주고 받는 Port이고, Active 모드냐 Passive 모드냐에 따라 서버가 20번 포트를 쓰느냐 1024 이상의 비어있는 임시 포트를 쓰느냐로 바뀜. (클라이언트는 Command Port+1을 Data Port로 사용함.)

 

또한 FTP는 기본적으로 Active모드 Passive모드로 나뉨. 그리고 Passive모드는 EPSV PASV로 또 나누어짐.

 

- Active 모드

[사진1] - 정상적인 상황에서의 Active 모드 흐름도

Active 모드의 흐름은 위와 같다.

1. 클라이언트가 FTP서버로 접근을 요청함과 동시에 서버가 접속해야 할 클라이언트의 IP와 Data Port를 같이 보내줌.

2. 서버는 수락 패킷을 보냄.

3. FTP서버가 클라이언트로부터 받은 데이터 포트 및 IP 정보를 토대로 데이터 채널 연결을 요청함.

4. 클라이언트는 수락 패킷을 보냄.

 

중요한건 클라이언트가 서버에 자신의 데이터 채널의 정보를 알려주어 서버 -> 클라이언트로 데이터 채널의 연결을

요청한다는 것임.

 

하지만 이 Active 모드엔 단점이 있음. 만약 클라이언트 쪽에 방화벽이 닫혀 있다면 서버 쪽에서는 접근이 불가능함.

그래서 이러한 단점을 극복하기 위해 나온것이 Passive 모드라고 함.

 

- Passive 모드

Passive 모드는 EPSV모드 PASV모드로 나누어진다.

 

: EPSV 모드

[사진2] - 정상적인 상황에서의 EPSV 모드 흐름도

EPSV 모드는 Extended Passvie Mode로 말그대로 확장 패시브 모드이다.

EPSV 모드의 흐름은 위와 같다.

1. 클라이언트가 FTP 서버로 접근을 요청함.

2. 서버는 수락 패킷과 함께 클라이언트가 접속해야 할 서버의 임시 Data Port를 같이 보내줌.

3. 클라이언트가 FTP 서버로부터 받은 데이터 포트 정보를 토대로 데이터 채널 연결을 요청함.

4. FTP 서버는 수락 패킷을 보냄.

 

: PASV 모드

[사진3] - 정상적인 상황에서의 PASV 모드 흐름도

PASV 모드는 Passvie Mode로 그냥 패시브 모드이다.

PASV 모드의 흐름은 위와 같다.

1. 클라이언트가 FTP 서버로 접근을 요청함.

2. 서버는 수락 패킷과 함께 클라이언트가 접속해야 할 서버의 IP와 임시 Data Port를 같이 보내줌.

3. 클라이언트가 FTP 서버로부터 받은 데이터 포트 정보를 토대로 데이터 채널 연결을 요청함.

4. FTP 서버는 수락 패킷을 보냄.

 

EPSV 모드와 PASV 모드의 차이점을 알겠는가?

EPSV 모드는 데이터 채널의  정보를 보낼 때 IP는 보내지 않지만, PASV모드는 IP와 포트를 같이 보낸다는 것이다.

 

위의 Passive 모드의 중요한 공통점은 다음과 같다.

FTP 서버가 클라이언트에 자신의 데이터 채널의 정보를 알려주어 클라이언트 -> 서버로 데이터 채널의 연결을

요청한다는 것이다.

 

-(Active 모드와 PASV 모드에서 데이터 채널의 정보를 보내주는 방식)

227 명령어와 함께 보낸다.

227 Entering Passive Mode (h1, h2, h3, h4, p1, p2)와 같이 보내고 h1, h2, h3, h4, p1, p2에 데이터 채널의 정보를

넣어서 보낸다.

h1, h2, h3, h4는 각각 IPv4의 각 자리이고 p1, p2는 각각 (포트 번호/256)의 몫과 나머지이다.

예를 들어 데이터 채널의 정보가 127.0.0.1:8080이라고 가정 했을 때 보내는 값은 아래와 같다.

ex) 227 Entering Passive Mode 127, 0, 0, 1, 31, 144

 

 

[*] 원래 CVE-2020-8284 정리 글에 있던 내용인데 그냥 FTP 정리내용이 필요하셔서 들어오시는 분들이 많아 따로 글을

만들었습니다.

Comments