<FTP 프로토콜>

파일 트랜스퍼 프로토콜 : 파일을 전송하는 하나의 어떤 통신 기업

소켓 -> 하나의 전화 / 연결하도록 도와주는 소프트웨어 / 거는용 받는용 따로있음
전화를 주고받는 방식과 굉장히 유사 (서버 - 클라이언트)
운영체제가 만듦 / 운영체제로부터 빌려서 사용
소켓을 생성한다 -> 전화기를 빌린다
생성 이후, 연결을 시도하고 허락이 뜰 때까지 대기, 이후 받을 때 conn 이라는 객체가 떨어짐
이 객체를 갖고 데이터를 받거나 보내거나 / 즉 받을 때 연결이 받아짐

 

<클라이언트 작성>

포트 = 소켓의 번호 / 웹통신시 보통 80, 443을 씀 

socket.socket() -> 개통

s.connect(addr) -> 접속 (전화걸기) - 커넥트를 했다 = 서로간에 주고받았다

s.send('GET /\n".encode()) -> 데이터를 쏘려면 인코딩해야함

s.recv(1024) -> 1024 바이트 데이터 받기

data.decode() -> 데이터 디코딩

<서버 작성>

addr = ("0.0.0.0", 80) -> 80번 개통 (전화 받을 포트)

s.bind(addr) -> 여기는 본인 주소가 아님 / 어떤 IP를 허용할건가

s.listen() -> 리스닝 상태로 돌려주면 서버 시작

conn, addr = s.accept() -> 요청 들어오면 accept

conn.send() 

conn.recv()

에코서버 -> 한 말을 반복해주는 서버


<FTP> 

File Transfer Protocol -> 파일 전송 프로토콜

FTP -> 포트 두개 사용

명령 연결 -> 명령어를 전달하는 / 특수하게 데이터를 전송하기도 함

파일을 전송하기 전 어떤 파일을 전송할건지 찾고 디렉터리 생성 후 내부에서 명령어를 실행,
작업하고 하는 것을 명령 연결해서 함

데이터 전송용 연결 -> 파일만

방화벽 -> 포트를 함부로 못 열게 / 포트 허용하지 않은건 전부 막힘

클라이언트에서 나가는건 자유로움, 그러나 들어오는 포트가 민감함

FTP -> 능동모드, 수동모드 

* 명령연결, 데이터 전송용 연결 포트가 2개임

* 나가는건 괜찮은데 들어오는건 검증한다


<FTP 서버 공격>

Exploit -> 어떤 프로그램을 공격해서 다른 동작을 하게 만드는

shellcode -> 코드 조각 -> binary가 있으면 CPU가 실행 -> 이걸 실행할 수 있다 =  시스템 프로세스의 어떤 것도 실행할 수 있다

 

 

 

 

 

복사했습니다!