본문으로 바로가기
728x90

신나게 웹 해킹에 대해서 공부하던 중, FTP를 통해 타 서버로 파일이 업로드 되는 경우 어떻게 웹쉘을 업로드할 것인가에 대해 다루게 되었다. FTP......?


FTP: 파일 전송 프로토콜

 

뭔가 전송 프로토콜하면, OSI 7계층에 대해 반사적으로 떠오르게 된다.

그래서 찾아보았더니, TCP/IP 네트워크 상에서 파일을 전송하기 위해 사용되는 표준 프로토콜이라고 한다.

주로 클라이언트-서버 구조를 따르며, 사용자는 FTP를 사용하여 파일을 다운로드하거나 업로드할 수 있다.

 

그러면 TCP/IP 네트워크를 통해 애플리케이션 통신을 하는 것인가?

 

정답!

FTP는 연결 지향적 프로토콜이므로, TCP 위에서 동작한다. 따라서 데이터를 신뢰성 있게, 순서를 보장하며 전송한다.

 

애플리케이션 통신?
그러면 TCP/IP 연결을 통해 HTTP 통신을 수행하는 것과 차이점이 존재하나?

 

물론이다.

FTP와 HTTP 모두 TCP 위에서 동작하는 애플리케이션 계층 프로토콜이지만, 설계 목적과 동작 방식에 있어 차이점이 존재한다.

  FTP HTTP
목적 파일 전송 웹 리소스 전달
사용처 서버 ↔︎ 클라이언트 간 파일 업로드/다운로드 웹페이지, API, 이미지 등 리소스 요청/응답
동작 명령어 기반+ 다중 연결  요청-응답 기반 + 단일 연결

 

FTP는 두 개의 TCP 연결을 사용한다.

명령과 응답이 텍스트로 오고가는 제어연결과, 실제 파일 바이트가 전송되는 데이터 연결이 있다.

물론 HTTP는 하나의 연결로 요청과 응답이 모두 이루어진다.

 

그리고 FTP의 전송모드에는 능동 모드와 수동 모드가 있다.

  • 능동 모드(Active mode)
    • 클라이언트는 제어 연결을 위해 서버의 21번 포트에 연결
    • 클라이언트는 자신의 포트를 열고 서버에게 알려줌
    • 서버가 클라이언트의 포트로 데이터 연결을 생성
  • 수동 모드(Passive mode)
    • 클라이언트가 제어 연결을 설정한 후, 서버에게 데이터 포트를 알려달라고 요청
    • 서버는 임의의 포트를 열고 클라이언트에게 알려줌
    • 클라이언트가 서버의 데이터 포트로 직접 연결

 

근데 HTTP 서버가 응답하는 것도 결국 데이터 아닌가?
그렇다면 FTP와 HTTP의 차이는 연결 개수의 차이인가?

 

물론 연결 개수의 차이도 존재하지만,명확하게 구분하자면

  • FTP는 제어 명령과 데이터 전송을 완전히 분리한 구조
  • HTTP는 요청/응답이 같은 스트림에서 동작하는 구조

이렇게 구분하는 이유는... 전송 제어 방식, 구현 방식, 보안 정책 등 실제 시스템 구조에 큰 영향을 주기 때문이라고 한다.

다음에 알아보도록 하자.

 

또 다른 차이점으로는 FTP는 대화형으로 통신한다면, HTTP는 요청-응답이 단방향이라는 것이다.