Telnet : raw socket과의 차이
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 |
Ethernet IEEE 802.3 (0) | 2016.12.03 |
Port, Socket, Connection (0) | 2016.11.13 |
Proxy / VPN (0) | 2016.10.29 |