엄범


Telnet wiki

RFC 854


0xff

telnet에서는 `` 0xff``를 command 중 하나인 IAC(Interpret As Command)로 예약되어 있다.

각 command의 끝에 IAC를 붙이는 방식으로 일반 data와 command를 구분하게 되는데, 사용자가 `` 0xff``를 입력하는 경우와 구분하기 위해 telnet 프로세스는 사용자로부터 IAC인 `` 0xff``를 입력 받으면 이를 `` 0xff 0xff``로 변경하여 송신하게 된다.

받는 쪽도 telnet이라면, 수신하면서 이를 다시 `` 0xff``로 변환하지만, 수신 측이 raw socket이라면 `` 0xff 0xff``를 그대로 수신하게 된다.

반대로 송신 측이 raw socket, 받는 쪽이 telnet이라면 `` 0xff``가 IAC로 인식되어 그냥 잘려버린다.


원래 telnet은 raw TCP session에 사용 가능하지만, 데이터에 `` 0xff``가 포함되어 있는 경우 위와 같이 동작하고 

이 외에도 

  • CR을 null로 padding해서 전송.
  • `` \x05``를 입력하면 거기까지만 입력받음. 그러나 `` \x05\x05``를 넣으면 정상적으로 `` \x05``가 들어가기는 함.
  • telnet을 파이프와 함께 사용할 때는 ``bash (echo "a"; sleep 1;) | telnet`` 과 같이 ``bash ( ..; sleep 1;)``을 넣어주어야 함.

등등의 이유로 완전한 raw 소켓으로 사용할 수는 없음을 감안해야 한다.


negotiation

negotiation를 위해 추가적인 패킷을 주고받는다는 점도 raw socket과는 차이가 있다.

처음 3 lines가 raw socket HTTP request,

붉은 line 아래 4 lines가 telnet HTTP request인데 둘 다 직접 80으로 접근한 다음 CLI로 request를 작성해 전송했다.

HTTP request, response를 위해 반드시 브라우저를 사용할 필요는 없다. 

HTTP requset, response는 생각보다 간단하게 동작한다.

raw socket 열고

```http

GET / HTTP/1.1

Host: url

```

입력하면 response가 돌아온다. 그래서 HTTP Request Spoofing은 생각보다 쉽게 이루어진다.

telnet의 경우 negotiation을 위해 회색으로 표시된 line이 추가적으로 전송된다.

패킷의 raw data를 확인해 보면 `` ff fb 1f ff fb 20 ...`` 이런 식으로 IAC가 붙은 데이터들이 전송된다.


그래서 서버로부터 아래와 같은 response를 수신하며 세션이 종료된다.



'Network & Protocol & Infra' 카테고리의 다른 글

iptables / firewalld  (0) 2018.08.15
내부망, 인터넷 동시에 연결해서 사용하기  (0) 2017.11.20
Telnet : raw socket과의 차이  (0) 2017.06.27
Ethernet IEEE 802.3  (0) 2016.12.03
Port, Socket, Connection  (0) 2016.11.13
Proxy / VPN  (0) 2016.10.29