본문 바로가기
프로그래밍/NETWORK HACKING

[네트워크 보안] FTP 통신 동작 / ncat(netcat)

by B T Y 2017. 7. 29.
반응형

FTP 통신 동작 / ncat(netcat)에 대해서 정리한다.

 

 

FTP ( File Transfer Protocol )


1. 서비스 관리

  - 설정: 보안 설정, QoS, ...
  - 취약점 존재

 

2. FTP 통신

  - FTP Bounce Scan(Attack) - 외부에서 DMZ 공간에 있는 FTP 서버에 Active Mode를 이용해서 접근해

                                        데이터를 전달 받는 호스트와 포트를 설정할때 자신이 아닌 접근 불가능한 내부 공간에 있는

                                        호스트의 주소를 추정해서 입력후 프로토콜 명령어를 보내 서버에서 리턴되는 코드를

                                       확인하며 내부에 있는 호스트들의 주소와 열린 포트를 스캔해 정보를 얻어오는 공격 방식이다.
        ( 현재는 FTP 패치가 이루어져 로그인한 호스트와 데이터를 전달받는 호스트가 다르면 통신이 불가능하기 때문에

         현재로써는 불가능하고 예전에는 가능했다고 한다 )

 

  - FTP는 프로토콜이 문자 체계로 되어 있다.

 

1). 요청 포맷

  - 명령어 공백 데이터\r\n
   * 명령어와 데이터를 공백으로 구분하고 끝을 \r\n으로 인식한다.

   * FTP 클라이언트 명령어는 ftp 쉘에 사용자가 입력하는 명령어와 서버로 전달되는 프로토콜 명령어 2가지가 있다.
       ( 예를 들면 ftp 쉘에 입력하는 ls 명령어는 NLST 혹은 LIST로 서버에 전달된다 )


2). 응답 포맷

  - 응답코드 공백 응답문자열\r\n

 

  * 프로토콜 명령어와 응답코드는 wiki를 참조
    FTP commands:
https://en.wikipedia.org/wiki/List_of_FTP_commands
    FTP server return codes: https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes

 

 

( cmd창에서 ftp클라이언트를 사용할때 -d 옵션<debug>을 이용해서 명령어를 입력하거나

로그인 과정에서 요청/응답 포맷을 볼수 있다 )

 

 

( ftp 클라이언트의 명령들은 ftp에서 help 명령을 입력해보면 나오게 된다 )

 

 

( FTP 프로토콜은 위에서 말했듯이 문자 체계로 되어있는걸 wireshark를 통해서 눈으로 직접 확인해 볼 수 있다 )

 

( FTP 응답 같은 경우에는 숫자로 서버에서 리턴 코드를 통해 어떤 상황인지를 알려준다 )

 


* netcat(ncat)

  - 네트워크에 입출력을 지원해준다. ( 기본 TCP )
    ( 리눅스에서 입출력을 지원해주는 cat명령어를 생각해보면 이해하기 쉽다 )


    * 리눅스에서는 nmap을 설치하게 되면 같이 깔린다.

 

  #> ncat host port
  * 해당 호스트 해당 포트에 TCP 세션을 맺어준다.

 

  - TCP 세션을 연결
  - 연결된 세션을 통해서 문자열을 송/수신

 


* FTP에서 데이터를 전달하는 방법

  - 21번 포트와 연결된 세션을 통해서는 데이터를 전달하지 않는다.
  - 21번 포트와 연결된 세션은 인증과 FTP command와 응답 코드를 전달하는 용도로 사용

  - 즉, 데이터를 전달하기 위해서는 새로운 세션을 필요로 한다.


3. Active Mode( 능동 모드 )

  - 서버가 세션을 연결

  - 서버의 포트가 20번으로 정해져 있다.
  - 사용자는 데이터를 전달받을 새로운 포트를 열고 서버에게 알려준다음 대기

 

  - PORT ip,port
  - PORT xxx,xxx,xxx,xxx,p1,p2
    * port는 1바이트씩 16진수로 나눠서 p1, p2에 적어주거나 포트 번호에서 256을 나눈 몫과 나머지를 p1, p2에 적어준다.

    * p1 = port / 256
    * p2 = port % 256

 

    * 로그인한 호스트와 데이터를 전달받는 호스트가 다르면 FTP 통신이 되지 않는다.
     ( Activce Mode를 이용한 FTP Bounce Scan을 방지하기 위해서 해당 상황일때는 FTP 통신을 막아놨다 )

 

Active Mode

 


4. Passive Mode( 수동 모드 )

  - 사용자가 세션을 연결
  - 서버의 데이터 포트가 정해져 있지 않다. ( 1024 ~ 65535 )
  ( Passive Mode의 경우 20번 포트를 사용하지 않고 1024번 이후 모든 포트를 사용한다 )

 

  - 사용자는 서버가 지정해준 호스트의 정보를 가지고 데이터를 전달받기 위한 세션을 연결한다.

 

Passive Mode

 

 

 

 


 

반응형

댓글