일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- vmware 반응 속도
- tool
- python
- Seccomp bypass
- OpenAI 개발
- 리커버릿
- GEF
- c++
- VSCode C++ 표준 버전 수정
- wsl2 복구
- python3.11 설치
- 실시간로깅
- GDB
- 지훈현서
- 임베디드 시스템 해킹
- 공유 라이브러리는 왜 항상 같은 순서로 맵핑 될까?
- DYNAMIC Section
- Python3
- Windows 부팅 오류
- pwn
- pwntools
- z3 signed 이슈
- pip 에러 해결
- docker
- python3.11 pip
- std::cerr
- Recoverit
- Python.h: No such file or directory
- vhdx 파일 복구
- 개발
- Today
- Total
OZ1NG의 뽀나블(Pwnable)
[Network] FTP 정리 본문
[*] 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 모드
Active 모드의 흐름은 위와 같다.
1. 클라이언트가 FTP서버로 접근을 요청함과 동시에 서버가 접속해야 할 클라이언트의 IP와 Data Port를 같이 보내줌.
2. 서버는 수락 패킷을 보냄.
3. FTP서버가 클라이언트로부터 받은 데이터 포트 및 IP 정보를 토대로 데이터 채널 연결을 요청함.
4. 클라이언트는 수락 패킷을 보냄.
중요한건 클라이언트가 서버에 자신의 데이터 채널의 정보를 알려주어 서버 -> 클라이언트로 데이터 채널의 연결을
요청한다는 것임.
하지만 이 Active 모드엔 단점이 있음. 만약 클라이언트 쪽에 방화벽이 닫혀 있다면 서버 쪽에서는 접근이 불가능함.
그래서 이러한 단점을 극복하기 위해 나온것이 Passive 모드라고 함.
- Passive 모드
Passive 모드는 EPSV모드와 PASV모드로 나누어진다.
: EPSV 모드
EPSV 모드는 Extended Passvie Mode로 말그대로 확장 패시브 모드이다.
EPSV 모드의 흐름은 위와 같다.
1. 클라이언트가 FTP 서버로 접근을 요청함.
2. 서버는 수락 패킷과 함께 클라이언트가 접속해야 할 서버의 임시 Data Port를 같이 보내줌.
3. 클라이언트가 FTP 서버로부터 받은 데이터 포트 정보를 토대로 데이터 채널 연결을 요청함.
4. FTP 서버는 수락 패킷을 보냄.
: 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 정리내용이 필요하셔서 들어오시는 분들이 많아 따로 글을
만들었습니다.
'Laboratory' 카테고리의 다른 글
[Lab] Segment Register 정리 (좀 자세히...) (0) | 2021.06.04 |
---|---|
[Lab] TLS/TCB 정리 (0) | 2021.06.03 |
[CVE] CVE-2020-8284 : trusting FTP PASV responses 정리 (0) | 2021.02.20 |
[Lab] glibc 2.23 malloc.c 분석 (아직 쓰는 중) (0) | 2020.08.15 |
[PWN] Pwntools ssh접속 후 특정 바이너리 실행 및 argv 입력 (0) | 2020.02.23 |