【THM】Networking Core Protocols(网络核心协议)-学习
本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/networkingcoreprotocols
本文相关内容:了解核心 TCP/IP 协议。
介绍
与本文相关的TryHackMe实验房间是关于计算机网络的一系列实验房间中的第三个:
- Networking Concepts 网络基础概念
- Networking Essentials 网络基本要点
- Networking Core Protocols 网络核心协议(与本文相关的TryHackMe实验房间)
- Networking Secure Protocols 网络安全协议
前置学习条件
为了从本文的内容中受益,我们建议你先了解以下信息:
- ISO OSI 模型和分层
- TCP /IP 模型和分层
- 以太网(Ethernet)、IP 和TCP协议
换句话说,建议在完成了网络基础概念之后再开始学习本文相关内容。
学习目标
当你完成本文的内容学习之后,你将大致了解以下协议:
- WHOIS
- DNS
- HTTP 和 FTP
- SMTP, POP3 和 IMAP
点击 与本文相关的TryHackMe实验房间页面顶部的 Start AttackBox按钮;然后继续单击下面的“启动计算机”按钮启动要连接的目标虚拟机 ( VM )。
等待大约 2-3 分钟的时间来完成环境部署。在以上两台机器准备就绪后,我们还需要打开 AttackBox 上的终端界面,以便从本文的第 4 小节开始执行一些命令。
DNS: 记住地址
你还记得你最喜欢的网站的IP地址吗?除非是本地设备的私有IP地址,否则没有人需要担心如何记住具体的IP地址。这是由于域名系统(DNS-Domain Name System)的存在,它负责将域名正确映射到IP地址。
DNS在应用层运行,即 ISO OSI 模型的第 7 层。 DNS流量默认使用的是 UDP 端口 53,并会将 TCP 端口 53 作为默认备用。 DNS记录有多种类型;然而,在本小节中,我们将重点关注以下四个:
- A 记录:A(Address-地址)记录会将主机名(hostname)映射到一个或多个 IPv4 地址;例如,你可以将
example.com
设置成解析为172.17.2.172
。 - AAAA 记录:AAAA 记录与 A 记录类似,但它适用于 IPv6。请记住,它是 AAAA(四 A),因为 AA 和 AAA 指的是电池尺寸;此外,AAA还可以指认证(Authentication)、授权(Authorization)和计费(Accounting) ;这两者都不属于DNS的概念范围。
- CNAME 记录:CNAME(Canonical Name-规范名称)记录会将一个域名映射到另一个域名。例如,
www.example.com
可以映射到example.com
甚至example.org
。 - MX 记录:MX(Mail Exchange-邮件交换)记录 将指定负责处理域电子邮件的邮件服务器。
换句话说,当你在浏览器中输入example.com
时,浏览器会尝试通过查询DNS服务器的 A 记录来解析此域名;但是,当你尝试向test@example.com
发送电子邮件时,邮件服务器将会查询DNS服务器以查找 MX 记录。
如果你想要使用命令行界面查找一个域的 IP 地址,你可以使用nslookup
之类的工具。参考下面的终端界面示例,我们将要查找的目标是example.com
。
user@TryHackMe$ nslookup www.example.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: www.example.com
Address: 93.184.215.14
Name: www.example.com
Address: 2606:2800:21f:cb07:6820:80da:af6b:8b2c
上面的查询产生了四个数据包。在下面的终端界面示例中,我们可以看到第一个和第三个数据包分别发送 A 和 AAAA 记录的DNS查询。第二个和第四个数据包显示的是对应的DNS查询响应。
user@TryHackMe$ tshark -r dns-query.pcapng -Nn
1 0.000000000 192.168.66.89 → 192.168.66.1 DNS 86 Standard query 0x2e0f A www.example.com OPT
2 0.059049584 192.168.66.1 → 192.168.66.89 DNS 102 Standard query response 0x2e0f A www.example.com A 93.184.215.14 OPT
3 0.059721705 192.168.66.89 → 192.168.66.1 DNS 86 Standard query 0x96e1 AAAA www.example.com OPT
4 0.101568276 192.168.66.1 → 192.168.66.89 DNS 114 Standard query response 0x96e1 AAAA www.example.com AAAA 2606:2800:21f:cb07:6820:80da:af6b:8b2c OPT
答题
哪种 DNS 记录类型会引用相关的 IPv6地址 ?
AAAA
哪种 DNS 记录类型会引用相关的电子邮件服务器?
MX
WHOIS
在上一个小节中,我们介绍了如何将域名解析为 IP 地址。然而,要实现这一点,需要有人有权限设置域名的 A、AAAA 和 MX 记录以及域的其他DNS记录。任何注册域名的人都会被授予这种权限。因此,如果你注册了 example.com域名,那么你就可以为 example.com 设置任何有效的DNS记录。
你可以注册任何可用的域名,有效期为一年或多年。你需要为域名缴纳年费,并且需要你作为注册人提供准确的联系信息。这些信息会包含在 WHOIS 记录中,并且是公开的。(尽管 WHOIS 全是大写字母,但它并不是一个缩写词;它的发音是 who is 。)如果你想注册域名但又不想公开透露你的联系信息,也不用担心;你可以使用隐私服务,将你的所有信息隐藏以避免其被包含在相关的 WHOIS 记录中。
你可以使用一些在线查询服务或者通过Linux系统上可用的命令行工具whois
来查找任何已注册的域名的 WHOIS 记录。正如预期的那样,WHOIS 记录将提供有关已注册的域名的相关实体的信息,包括姓名、电话号码、电子邮件和地址等。在下面的屏幕截图中,你可以看到记录的首次创建时间以及最后更新时间。此外,你还可以找到注册人的姓名、地址、电话和电子邮件等信息。
在下面的终端输出示例中,我们尝试使用whois
命令查找了 WHOIS 记录受隐私保护的域。
user@TryHackMe$ whois [REDACTED].com
[...]
Domain Name: [REDACTED].COM
Registry Domain ID: [REDACTED]
Registrar WHOIS Server: whois.godaddy.com
Registrar URL: https://www.godaddy.com
Updated Date: 2017-07-05T16:02:43Z
Creation Date: 1993-04-02T00:00:00Z
Registrar Registration Expiration Date: 2026-10-20T14:56:17Z
Registrar: GoDaddy.com, LLC
Registrar IANA ID: 146
Registrar Abuse Contact Email: abuse@godaddy.com
Registrar Abuse Contact Phone: +1.4806242505
[...]
Registrant Name: Registration Private
Registrant Organization: Domains By Proxy, LLC
Registrant Street: DomainsByProxy.com
[...]
答题
x.com 记录是什么时候创建的?以 YYYY-MM-DD 格式提供答案。
tips:你可以使用 AttackBox 上的命令行工具 whois。或者,你可以使用在线 WHOIS 查询服务。
使用在线 WHOIS 查询服务:
1993-04-02
twitter.com 记录是什么时候创建的?以 YYYY-MM-DD 格式提供答案。
2000-01-21
HTTP(S): 访问Web
当你启动浏览器时,主要会使用的是 HTTP 和 HTTPS 协议。 HTTP 代表超文本传输协议(Hypertext Transfer Protocol); HTTPS 中的 S 代表安全(Secure)。这个协议依赖于TCP并且将定义你的 Web 浏览器与 Web 服务器的通信方式。
你的 Web 浏览器通常可以向 Web 服务器发出的一些命令或方法是:
GET
从服务器检索数据,例如 HTML 文件或图像。POST
允许我们向服务器提交新数据,例如提交表单或上传文件。PUT
用于在服务器上创建新资源以及更新和覆盖现有信息。DELETE
,顾名思义,用于删除服务器上的指定文件或资源。
HTTP 和 HTTPS 通常会分别使用TCP端口 80 和 443,较少情况下会使用其他端口,例如 8080 和 8443。
在以下示例中,我们使用 Firefox 浏览器访问MACHINE_IP
上的 Web 服务器。我们的浏览器会获取相关的网页并完美显示;然而,我们通常会对目标网站幕后发生的事情更加感兴趣。
使用Wireshark,我们可以更仔细地检查Firefox浏览器和Web服务器之间的数据交换情况。下面的Wireshark截图显示了浏览器发送的文本(红色)和 Web 服务器的响应(蓝色) 。我们可以知道,客户端和服务器之间交换了大量的信息,但这些信息并不会呈现给用户,例如 Web 服务器版本以及页面的最后修改时间等信息。
正如我们在网络基础概念中所提及的那样,我们可以使用telnet
客户端连接到在MACHINE_IP
的端口80
上运行的目标 Web 服务器。我们必须发送以下几行命令: GET / HTTP/1.1
和Host: anything
才能获取到我们想要的页面 (在某些服务器上,你可能无需发送Host: anything
即可获取文件)。你可以使用此方法来访问任何网站页面,而不仅仅是默认页面/
。
例如,如果想要获取file.html
页面,你可以发送GET /file.html HTTP/1.1
( GET /file.html
是否有效取决于目标所使用的Web服务器)。这种方法对于故障排除非常有效,因为你将与服务器“进行HTTP对话”。
答题
使用telnet
访问MACHINE_IP
上的文件flag.html
。最终发现的隐藏flag是什么?
root@ip-10-10-187-1:~# telnet 10.10.0.29 80
Trying 10.10.0.29...
Connected to 10.10.0.29.
Escape character is '^]'.
GET /flag.html HTTP/1.1
Host: 10.10.0.29
———————————————————————————————————————————————
THM{TELNET-HTTP} 。
FTP: 传输文件
与旨在检索网页的 HTTP 协议不同,文件传输协议 (FTP- File Transfer Protocol) 旨在传输文件。因此,FTP 用于文件传输时的效率非常高,并且在所有条件相同的情况下,它可以实现比HTTP更高的数据传输速度。
FTP协议定义的命令示例有:
USER
用于输入用户名;PASS
用于输入密码;RETR
(retrieve-检索) ,用于从FTP服务器下载文件到客户端;STOR
(store-存储),用于将文件从客户端上传到FTP服务器。
FTP服务器默认将监听TCP端口21;数据传输是通过从客户端到服务器的另一个连接进行的。
在下面的终端示例中,我们执行了ftp MACHINE_IP
命令,使用本地ftp
客户端连接到远程FTP服务器,然后我们执行了以下步骤:
- 我们使用
anonymous
用户名尝试进行登录; - 对于用户名
anonymous
,我们不需要提供任何密码; - 发出
ls
命令 以返回可供下载的文件列表; - 输入
type ascii
以切换到 ASCII 模式,因为这是一个文本文件; - 输入
get coffee.txt
以允许我们检索我们想要的文件。
上述通过 FTP 客户端进行的命令交换显示在下面的终端示例界面中:
user@TryHackMe$ ftp MACHINE_IP
Connected to MACHINE_IP (MACHINE_IP).
220 (vsFTPd 3.0.5)
Name (MACHINE_IP:strategos): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,10,41,192,134,10).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 1480 Jun 27 08:03 coffee.txt
-rw-r--r-- 1 0 0 14 Jun 27 08:04 flag.txt
-rw-r--r-- 1 0 0 1595 Jun 27 08:05 tea.txt
226 Directory send OK.
ftp> type ascii
200 Switching to ASCII mode.
ftp> get coffee.txt
local: coffee.txt remote: coffee.txt
227 Entering Passive Mode (10,10,41,192,57,100).
150 Opening BINARY mode data connection for coffee.txt (1480 bytes).
WARNING! 47 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 Transfer complete.
1480 bytes received in 8e-05 secs (18500.00 Kbytes/sec)
ftp> quit
221 Goodbye.
我们可以使用 Wireshark 更仔细地检查交换的消息。请查看下面的截图,客户端的消息为红色,而服务器的响应为蓝色。请注意客户端和服务器之间的各种命令有何差异。例如,当你在客户端上键入ls
时,客户端实际上会向服务器发送LIST
。最后需要注意的是,目录列表和我们所下载的文件将分别通过单独的连接发送。
答题
使用 AttackBox 上的 FTP 客户端ftp
,访问位于MACHINE_IP
的FTP 服务器并检索flag.txt
。可以发现的flag内容是什么?
ftp 10.10.0.29
Name (MACHINE_IP:root): anonymous
Password:
ftp> ls
ftp> type ascii
ftp> get flag.txt
ftp> quit
catflag.txt
THM{FAST-FTP} 。
SMTP: 发送电子邮件
与浏览网页和下载文件一样,发送电子邮件也需要自己的协议。简单邮件传输协议(SMTP-Simple Mail Transfer Protocol)可以定义邮件客户端如何与邮件服务器通信以及一个邮件服务器如何与另一个邮件服务器通信。
SMTP协议可以类比为——你去当地的邮局发送包裹。你先和工作人员打招呼,告诉他们你想把包裹寄到哪里,并且在把包裹交给他们之前提供寄件人的信息。根据你所在的国家/地区的不同要求,你可能会被要求出示身份证件。这个过程与SMTP会话在概念上没有太大区别。
让我们介绍一下你的邮件客户端在将电子邮件传输到SMTP服务器时 将会使用到的一些命令:
HELO
或EHLO
启动SMTP会话MAIL FROM
指定发件人的电子邮件地址RCPT TO
指定收件人的电子邮件地址DATA
指示客户端将开始发送电子邮件消息的内容。.
单独发送一行,表示电子邮件消息的结束。
下面的终端示例 显示了通过telnet
发送电子邮件的示例,SMTP服务器默认将侦听TCP端口 25:
user@TryHackMe$ telnet MACHINE_IP 25
Trying MACHINE_IP...
Connected to MACHINE_IP.
Escape character is '^]'.
220 example.thm ESMTP Exim 4.95 Ubuntu Thu, 27 Jun 2024 16:18:09 +0000
HELO client.thm
250 example.thm Hello client.thm [10.11.81.126]
MAIL FROM: <user@client.thm>
250 OK
RCPT TO: <strategos@server.thm>
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
From: user@client.thm
To: strategos@server.thm
Subject: Telnet email
Hello. I am using telnet to send you an email!
.
250 OK id=1sMrpq-0001Ah-UT
QUIT
221 example.thm closing connection
Connection closed by foreign host.
显然,使用telnet
发送电子邮件是相当繁琐的;但是,它可以帮助你更好地理解电子邮件客户端在后台发出的命令。 如下面的截图所示,Wireshark捕获的数据包以不同颜色显示了数据交换过程——客户端的消息被显示为红色,而服务器的响应则显示为蓝色。
现在我们已经学习了一些基本的HTTP、FTP和SMTP命令,你应该已经对协议的设计和使用方式有了更加深入的了解。这个时候,你去学习其他基于文本的协议(例如 POP3 和IMAP)的工作原理应该会比较容易一些。
答题
哪个 SMTP 命令会指示客户端将启动电子邮件消息的内容发送?
DATA
电子邮件客户端会发送什么来表明电子邮件消息已完全输入?
.
POP3: 接收电子邮件
你收到了一封电子邮件并希望将其下载到本地邮件客户端。邮局协议版本3 (POP3 -Post Office Protocol version 3) 旨在允许客户端与邮件服务器进行通信并检索电子邮件。
在本小节中,我们无需深入探讨相关的技术细节,只需要知道:电子邮件客户端依靠SMTP发送消息并且能使用 POP3 检索消息。 SMTP类似于将信封或包裹交给邮局,而 POP3则类似于检查本地邮箱中是否有新信件或新包裹。
一些常见的POP3命令是:
USER <username>
标识用户;PASS <password>
提供用户的密码;STAT
请求消息数量和总大小;LIST
列出所有消息及其大小;RETR <message_number>
检索指定的消息;DELE <message_number>
将消息标记为删除;QUIT
结束POP3 会话并应用更改(例如删除)。
在下面的终端示例中,我们可以看到通过telnet连接进行的POP3会话。由于POP3服务器默认会侦听TCP端口 110 ,因此连接到TELNET端口的命令是telnet MACHINE_IP 110
。下面的POP3命令 会检索在上一个小节中发送的电子邮件。
user@TryHackMe$ telnet MACHINE_IP 110
Trying MACHINE_IP...
Connected to MACHINE_IP.
Escape character is '^]'.
+OK [XCLIENT] Dovecot (Ubuntu) ready.
AUTH
+OK
PLAIN
.
USER strategos
+OK
PASS
+OK Logged in.
STAT
+OK 3 1264
LIST
+OK 3 messages:
1 407
2 412
3 445
.
RETR 3
+OK 445 octets
Return-path: <user@client.thm>
Envelope-to: strategos@server.thm
Delivery-date: Thu, 27 Jun 2024 16:19:35 +0000
Received: from [10.11.81.126] (helo=client.thm)
by example.thm with smtp (Exim 4.95)
(envelope-from <user@client.thm>)
id 1sMrpq-0001Ah-UT
for strategos@server.thm;
Thu, 27 Jun 2024 16:19:35 +0000
From: user@client.thm
To: strategos@server.thm
Subject: Telnet email
Hello. I am using telnet to send you an email!
.
QUIT
+OK Logging out.
Connection closed by foreign host.
Someone capturing the network packets would be able to intercept the exchanged traffic. As per previous Wireshark captures, the commands in red are sent by the client, and the lines in blue are the server’s. It is also clear that someone capturing the traffic can read the passwords.
捕获网络数据包的人将能够拦截交换的流量。根据之前的Wireshark捕获情况,红色内容显示的命令是由客户端发送的,蓝色部分的内容则是由服务器发送的。很明显,捕获到下面这些流量交换情况的第三方人员是可以读取到密码信息的。
连接到POP3服务器需要身份验证,请根据需要在实验示例中使用以下登录凭据:
- Username:
linda
- Password:
Pa$$123
答题
查看流量交换情况,远程服务器上运行的 POP3 服务器的名称是什么?
tips:参考本小节给出的示例终端输出(或者查看下一个问题的终端输出截图),使用我们最喜欢的搜索引擎搜索 Ubuntu 旁边的单词。
Dovecot
使用telnet
连接到MACHINE_IP
上的 POP3 服务器,查看第四条消息中包含的flag内容是什么?
telnet 10.10.0.29 110
USER linda
PASS Pa$$123
STAT
LIST
RETR 4
QUIT
THM{TELNET_RETR_EMAIL} 。
IMAP: 同步电子邮件
如果你只使用一台设备(例如你的台式计算机上的电子邮件客户端)工作,POP3 就足够了。但是,如果你想在办公室中的台式计算机以及笔记本电脑或智能手机上同时查看电子邮件,应该怎么办?在这种情况下,你需要一个允许邮件消息同步的协议,而不是在检索邮件消息后将其删除。跨多个设备维护同步邮箱的一种解决方案是使用互联网消息访问协议 ( IMAP -Internet Message Access Protocol)。
IMAP允许同步已读、已移动和已删除的邮件。当你使用多个客户端查看电子邮件时, IMAP非常方便。与 POP3 不同,POP3 在从远程服务器下载和删除电子邮件时倾向于尽量减少服务器存储空间的使用,而IMAP则倾向于使用更多存储空间,因为电子邮件需要被保存在服务器上并在各个电子邮件客户端之间同步。
IMAP协议的命令比POP3协议相关命令更加复杂。我们在下面列出了几个例子:
LOGIN <username> <password>
对用户进行身份验证SELECT <mailbox>
选择要使用的邮箱文件夹FETCH <mail_number> <data_item_name>
示例fetch 3 body[]
表示获取消息编号 3、标题和正文MOVE <sequence_set> <mailbox>
将指定邮件移动到另一个邮箱COPY <sequence_set> <data_item_name>
将指定邮件复制到另一个邮箱LOGOUT
退出登录
IMAP服务器默认将侦听TCP端口 143,我们将使用telnet
连接到MACHINE_IP
上的端口 143 并获取我们在之前的示例中所发送的消息。
user@TryHackMe$ telnet 10.10.41.192 143
Trying 10.10.41.192...
Connected to 10.10.41.192.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN] Dovecot (Ubuntu) ready.
A LOGIN strategos ##################
A OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LITERAL+ NOTIFY SPECIAL-USE] Logged in
B SELECT inbox ##################
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 4 EXISTS
* 0 RECENT
* OK [UNSEEN 2] First unseen.
* OK [UIDVALIDITY 1719824692] UIDs valid
* OK [UIDNEXT 5] Predicted next UID
B OK [READ-WRITE] Select completed (0.001 + 0.000 secs).
C FETCH 3 body[] ###################
* 3 FETCH (BODY[] {445}
Return-path: <user@client.thm>
Envelope-to: strategos@server.thm
Delivery-date: Thu, 27 Jun 2024 16:19:35 +0000
Received: from [10.11.81.126] (helo=client.thm)
by example.thm with smtp (Exim 4.95)
(envelope-from <user@client.thm>)
id 1sMrpq-0001Ah-UT
for strategos@server.thm;
Thu, 27 Jun 2024 16:19:35 +0000
From: user@client.thm
To: strategos@server.thm
Subject: Telnet email
Hello. I am using telnet to send you an email!
)
C OK Fetch completed (0.001 + 0.000 secs).
D LOGOUT #################
* BYE Logging out
D OK Logout completed (0.001 + 0.000 secs).
Connection closed by foreign host.
下面的截图显示了从 Wireshark 中看到的电子邮件客户端和电子邮件服务器之间交换的消息。客户端只需要发送四个命令(下图中的红色部分),而“长”的服务器响应将以蓝色内容显示。
答题
什么 IMAP 命令可以用来检索第四封电子邮件?
FETCH 4 body[]
本文小结
在之前的学习活动中,我们讨论了TELNET协议;而本文重点讨论了其他的基础协议:DNS、HTTP、FTP、 SMTP 、POP3 和IMAP 。通过讨论这些协议,我们现在可以更好地了解如何进行域名解析、如何提供网页服务以及如何发送和接收电子邮件。学习本文的另一个主要目的是让你更好地了解协议在图形界面背后的工作原理。
下表总结了我们迄今为止所讨论过的协议所使用的默认端口号。
Protocol(协议) | Transport Protocol(传输协议) | Default Port Number(默认端口号) |
---|---|---|
TELNET | TCP | 23 |
DNS | UDP 或 TCP | 53 |
HTTP | TCP | 80 |
HTTPS | TCP | 443 |
FTP | TCP | 21 |
SMTP | TCP | 25 |
POP3 | TCP | 110 |
IMAP | TCP | 143 |