Tương tự với SSH nhưng dữ liệu không được mã hóa và chạy ở port 23.

Info

Đối với giao thức Telnet, khi người dùng bấm một phím thì sẽ có một gói tin TCP tương ứng được gửi đi.

Structure

Cấu trúc gói tin của Telnet (kết quả từ Scapy):

###[ Ethernet ]###
  dst       = 02:42:0a:09:00:69
  src       = 02:42:0a:09:00:05
  type      = IPv4
###[ IP ]###
	 version   = 4
	 ihl       = 5
	 tos       = 0x10
	 len       = 53
	 id        = 49532
	 flags     = DF
	 frag      = 0
	 ttl       = 64
	 proto     = tcp
	 chksum    = 0x651a
	 src       = 10.9.0.5
	 dst       = 10.9.0.6
	 \options   \
###[ TCP ]###
		sport     = 51554
		dport     = telnet
		seq       = 4004003512
		ack       = 2330620592
		dataofs   = 8
		reserved  = 0
		flags     = PA
		window    = 249
		chksum    = 0x1444
		urgptr    = 0
		options   = [('NOP', None), ('NOP', None), ('Timestamp', (1551771165, 1622443594))]
###[ Raw ]###
		   load      = 'a'

Có thể thấy, bản chất của gói tin Telnet là một gói tin TCP.

Unencrypted Data

Important

Dữ liệu trao đổi thông qua Telnet không được mã hóa.

Xét ví dụ kết nối đến MACHINE_IP như sau:

pentester@TryHackMe$ telnet MACHINE_IP
Trying MACHINE_IP...
Connected to MACHINE_IP.
Escape character is '^]'.
Ubuntu 20.04.3 LTS
bento login: frank
Password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-84-generic x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
System information as of Fri 01 Oct 2021 12:24:56 PM UTC

Gói tin trao đổi giữa hai máy có dạng như bên dưới:

Chữ màu đỏ là dữ liệu của server hiển thị trên terminal và chữ màu xanh là dữ liệu mà ta nhập vào. Có thể thấy, khi nhập password, dữ liệu không được mã hóa và có thể bị bắt bởi các ứng dụng bắt gói tin chẳng hạn như Wireshark.

Port Connection

Chúng ta có thể kết nối đến port bất kỳ, chẳng hạn như port 80 (port của HTTP), của máy mục tiêu mà không cần sử dụng username và password:

telnet MACHINE_IP 80

Sau đó chúng ta nhập vào các dòng sau:

GET / HTTP/1.1
host: telnet

Và Enter hai lần để gửi đi request.

Giải thích:

  • Dòng đầu tiên là để mô tả GET request đến đường dẫn / với phiên bản của HTTP là 1.1. Chúng ta có thể request trang web khác chẳng hạn như /page.html.
  • Dòng thứ hai là để mô tả tên host (bắt buộc).

Output nhận được có thể là:

HTTP/1.1 200 OK
Date: Sat, 24 Jun 2023 07:15:04 GMT
Server: Apache/2.4.10 (Debian)
Last-Modified: Mon, 30 Aug 2021 12:09:24 GMT
ETag: "15-5cac5b436ddfa"
Accept-Ranges: bytes
Content-Length: 21
Content-Type: text/html

Từ output trên ta biết được server đang chạy là Apache với phiên bản là 2.4.10 và hệ điều hành là Debian.

Resources