Passive Reconnaissance

Introduction

1.Passive Reconnaissance 被动侦察

2.Active Reconnaissance 主动侦察

3. Nmap Live Host DiscoveryNmap 实时主机,发现

4.Nmap Basic Port Scans Nmap 基本端囗扫描

5.Nmap Advanced Port Scans Nmap 高级端囗扫描

6.Nmap Post Port Scans Nmap 后端囗扫描

7.Protocols and Servers 协议和服务器

8. Protocols and Servers 2 协议和服务器 2

9. Network Security Challenge 网络安全挑战

这是我将要学习的内容

Passive Versus Active Recon

侦察分为两种

1.被动侦察

2.主动侦察

被动侦察

被动侦察,依赖于公开的知识,可以从公共资源中获取知识,无需与目标接触

被动侦察例子包括

  • 从公共DNS服务器查找域的DNS服务器

  • 检查与目标网站相关的招聘广告

  • 阅读有关目标公司的新闻文章

主动侦察

主动侦察没办法谨慎的实现,需要与目标直接接触

主动侦察例子包括

  • 连接到公司服务器,如http,ftp,smtp

  • 致电公司或者信息(社会工程)

  • 冒出修理工进入公司场所

Whois

WHOIS 是遵循 RFC 3912 规范的请求和响应协议。 WHOIS 服务器在 TCP 端口 43 上侦听传入请求。域名注册商负责维护其租赁域名的

WHOIS 记录。 WHOIS 服务器回复与请求的域相关的各种信息。

我们可以通过这个来了解到

  • 注册商:域名是通过哪个注册商注册的

  • 注册人的联系信息:姓名,组织,地址,电话

  • 创建,更新和到期日期

  • 名称服务器:请求哪个服务器来解析

启动tryhackme的攻击盒子

在终端上输入

whois tryhackme.com

输出

The Registry database contains ONLY .COM, .NET, .EDU domains and
Registrars.
Domain name: tryhackme.com
Registry Domain ID: 2282723194_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.namecheap.com
Registrar URL: http://www.namecheap.com
Updated Date: 2021-05-01T19:43:23.31Z
Creation Date: 2018-07-05T19:46:15.00Z
Registrar Registration Expiration Date: 2027-07-05T19:46:15.00Z
Registrar: NAMECHEAP INC
Registrar IANA ID: 1068
Registrar Abuse Contact Email: abuse@namecheap.com
Registrar Abuse Contact Phone: +1.9854014545
Reseller: NAMECHEAP INC
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Registry Registrant ID: 
Registrant Name: Redacted for Privacy
Registrant Organization: Privacy service provided by Withheld for Privacy ehf
Registrant Street: Kalkofnsvegur 2 
Registrant City: Reykjavik
Registrant State/Province: Capital Region
Registrant Postal Code: 101
Registrant Country: IS
Registrant Phone: +354.4212434
Registrant Phone Ext: 
Registrant Fax: 
Registrant Fax Ext: 
Registrant Email: a70a4ff6d25041a48378997194f9e834.protect@withheldforprivacy.com
Registry Admin ID: 
Admin Name: Redacted for Privacy
Admin Organization: Privacy service provided by Withheld for Privacy ehf
Admin Street: Kalkofnsvegur 2 
Admin City: Reykjavik
Admin State/Province: Capital Region
Admin Postal Code: 101
Admin Country: IS
Admin Phone: +354.4212434
Admin Phone Ext: 
Admin Fax: 
Admin Fax Ext: 
Admin Email: a70a4ff6d25041a48378997194f9e834.protect@withheldforprivacy.com
Registry Tech ID: 
Tech Name: Redacted for Privacy
Tech Organization: Privacy service provided by Withheld for Privacy ehf
Tech Street: Kalkofnsvegur 2 
Tech City: Reykjavik
Tech State/Province: Capital Region
Tech Postal Code: 101
Tech Country: IS
Tech Phone: +354.4212434
Tech Phone Ext: 
Tech Fax: 
Tech Fax Ext: 
Tech Email: a70a4ff6d25041a48378997194f9e834.protect@withheldforprivacy.com
Name Server: kip.ns.cloudflare.com
Name Server: uma.ns.cloudflare.com
DNSSEC: unsigned
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
>>> Last update of WHOIS database: 2024-07-14T04:05:59.75Z <<<
For more information on Whois status codes, please visit https://icann.org/epp

看见有很多信息

包括注册时间,注册商,服务器之类的

nslookup and dig

nslookup

我们可以用这个来查找域名的ip地址,代表名称服务器查找

命令如下

nslookup tryhackme

还有三个常见的参数

  • OPIONS包含查询类型

  • DOMAIN_NAME是我们正在查找的域名

  • SERVER是要查询的DNS服务器

例如:nslookup -type=A tryhackme.com 1.1.1.1 (或 nslookup -type=a tryhackme.com 1.1.1.1 ,因为它不区分大小写)可用于返回 tryhackme.com 使用的所有 IPv4 地址。

假设我们想了解特定域的电子邮件服务器和配置。我们可以发出 nslookup -type=MX tryhackme.com 。这是一个例子:

进行被动侦察的时候,可以对域名有不同类型的查询

dig

对于更高级的DNS查询和附加,我们可以用dig

让我们使用 dig 查找 MX 记录并将它们与 nslookup 进行比较。我们可以使用 dig DOMAIN_NAME ,但要指定记录类型,我们将使用 dig

DOMAIN_NAME TYPE 。或者,我们可以使用 dig @SERVER DOMAIN_NAME TYPE 选择要查询的服务器。

  • SEVER是我们要查询的DNS服务器

  • DOMAIN_NAME是我们查找的域名

  • TYPE包含DNS记录类型

快速比较 nslookupdig 的输出可以看出, dig 返回了更多信息,例如默认情况下的 TTL(生存时间)。如果我们想查询 1.1.1.1 DNS 服

务器,可以执行 dig @1.1.1.1 tryhackme.com MX

DNSDumpster

上面的两种无法查询子域

我们在 DNSDumpster 中搜索 tryhackme.com ,我们将发现典型 DNS 查询无法提供的子域 blog.tryhackme.com 。此外,DNSDumpster 将以

易于阅读的表格和图表形式返回收集到的 DNS 信息。 DNSDumpster 还将提供有关侦听服务器的所有收集信息。

包括DNSsever,MXRcords,TXTRcords,HostRecords(A)

还有Mapping the domain

Shodan.io

对于渗透测试,Shodan.io可以帮助我们了解客户端网络的各种信息,不用主动连接它

对于防御方面,可以使用 Shodan.io 的不同服务来了解属于我们组织的已连接和公开的设备

Shodan.io

尝试一下tryhack.com

查询一下nginx,可以看到使用情况,常用端口,使用国家

总结

Active Reconnaissance

introduction

主动侦察需要我们与目标进行某种接触。这种联系可以是通过电话或以某种借口访问目标公司以收集更多信息,通常作为社会工程的一部分。或

者,它可以直接连接到目标系统,无论是访问他们的网站还是检查他们的防火墙是否打开了 SSH 端口。想象一下,我们正在仔细检查窗户和门

锁。

主动侦察从与目标机器的直接连接开始。任何此类连接都可能在日志中留下显示客户端 IP 地址、连接时间和连接持续时间等信息。然而,并

非所有联系都是可疑的。可以让我们的主动侦察显示为常规的客户活动。考虑网页浏览;没有人会怀疑与数百名其他合法用户中的目标 Web 服

务器连接的浏览器。当我们作为红队(攻击者)的一部分工作并且不想惊动蓝队(防御者)时,我们可以使用这些技术来发挥自己的优势。

Web Browser

在传输的时候,浏览器连接到

  • HTTP访问网站时默认TCP端口为80

  • HTTPS访问网站时默认TCP端口为443

Firefox 和 Chrome 也有很多插件可以帮助进行渗透测试。这里有一些例子:

  • FoxyProxy 可让快速更改用于访问目标网站的代理服务器。当我们使用 Burp Suite 等工具或需要定期切换代理服务器时,此浏览器扩展非常方便。我们可以从此处获取适用于 Firefox 的 FoxyProxy。

  • 用户代理切换器和管理器使我们能够假装从不同的操作系统或不同的 Web 浏览器访问网页。换句话说,我们可以假装使用 iPhone 浏览某个网站,而实际上我们是通过 Mozilla Firefox 访问该网站。我们可以在此处下载适用于 Firefox 的用户代理切换器和管理器。

  • Wappalyzer 提供有关所访问网站所使用技术的见解。此类扩展很方便,主要是当我们像其他用户一样浏览网站时收集所有这些信息时。 Wappalyzer 的屏幕截图如下所示。我们可以在此处找到适用于 Firefox 的 Wappalyzer。

Ping

简单来说,ping 命令将数据包发送到远程系统,然后远程系统进行回复。这样,我们就可以断定远程系统已在线并且两个系统之间的网络正在

运行

Traceroute

顾名思义,traceroute 命令跟踪数据包从我们的系统到另一台主机所采取的路由。跟踪路由的目的是查找数据包从我们的系统到达目标主机时所经

过的路由器或跃点的 IP 地址。该命令还显示两个系统之间的路由器数量。它很有用,因为它指示系统和目标主机之间的跃点(路由器)数

量。但请注意,数据包所采用的路由可能会发生变化,因为许多路由器使用适应网络变化的动态路由协议。

在 Linux 和 macOS 上,要使用的命令是 traceroute 10.10.161.186 ,在 MS Windows 上,它是 tracert 10.10.161.186traceroute

试发现从我们的系统到目标系统的路径上的路由器。

Telnet

TELNET(电传打字机网络)协议于 1969 年开发,用于通过命令行界面 (CLI) 与远程系统进行通信。因此,命令 telnet 使用TELNET协议进行

远程管理。 telnet 使用的默认端口是 23。从安全角度来看, telnet 以明文形式发送所有数据,包括用户名和密码。以明文发送使得有权访

问通信通道的任何人都可以轻松窃取登录凭据。安全的替代方案是 SSH(Secure SHell)协议。

Netcat

Netcat 或简称 nc 有不同的应用程序,对渗透测试人员来说具有很大的价值。 Netcat 支持 TCP 和 UDP 协议。它可以作为客户端连接到监听

端口;或者,它可以充当侦听我们选择的端口的服务器。因此,它是一个方便的工具,我们可以将其用作 TCP 或 UDP 上的简单客户端或服务器。

在客户端,我们将发出 nc 10.10.161.186 PORT_NUMBER 。下面是使用 nc 进行回显的示例。成功建立与服务器的连接后,我们在客户端输入的任

何内容都将在服务器端得到回显,反之亦然。

考虑以下示例。在服务器端,我们将侦听端口 1234。我们可以使用命令 nc -vnlp 1234 来实现此目的(与 nc -lvnp 1234 相同)。在我们

的例子中,侦听服务器具有 IP 地址 10.10.161.186 ,因此我们可以通过执行 nc 10.10.161.186 1234 从客户端连接到它。此设置会将我们在 T

CP 隧道一侧键入的任何内容回显到另一侧。

连接查看21端口

总结

Nmap Live Host Discovery

Introduction

nmap可以扫描存活主机

扫描存活主机上运行的服务

介绍一下Nmap扫描存活主机的几种方法

  • ARP扫描

  • ICMP扫描

  • TCP/UDP扫描

Subnetwork

作为主动侦察的一部分

我们希望发现有关一组主机或子网的更多信息

如果连接到同一子网,可以通过ARP协议来扫描存活主机

Enumerating Targets

在进行扫描的时候,我们一般可以规定扫描的目标。

可以规定提供列表范围或者子网

  • MACHINE_IP scanme.nmap.org example.com将会扫描三个ip地址

  • 10.11.12.15-20 将扫描 6 个 IP 地址: 10.11.12.1510.11.12.16 、... 和 10.11.12.20.12.15-2010.11.12.15-2010.11.110.11.12.15-202.15-20

  • MACHINE_IP/30 将扫描4个IP地址。

如果我们想检查Nmap将扫描的主机列表,我们可以使用 nmap -sL TARGETS 。这个为我们提供 Nmap 将扫描的主机的详细列表,而无需扫描它们

扫描这个网段的ip地址

看一个这个扫描ip地址数量

Discovering Live Hosts

我们可以用协议来发现存活主机

利用的协议有四种

  • ARP协议

  • ICMP协议

  • TCP/UDP协议

Nmap Host Discovery Using ARP

默认情况下,nmap使用ping命令来扫描存活主机,如果我们不行扫描端口可以用

nmap -sn TARGETS

仅当我们与目标系统位于同一子网时,才可以用ARP扫描

我们可以用参数-PR表示我们只想用ARP请求来扫描,如果说不想扫描端口就加上-sn参数

nmap -PR -sn TARGETS

Nmap Host Discovery Using ICMP

很多防火墙都会阻止ping命令的回显

所以在同一网段的时候,使用ARP查询优于ICMP请求

如果想用ICMP回显请求来发现存活主机,则用参数-PE

由于ICMP回显请求往往会被阻止,因此我们还可以考虑使用 ICMP 时间戳或 ICMP 地址掩码请求来判断系统是否在线。 Nmap 使用时间戳请

求(ICMP 类型 13)并检查是否会得到时间戳回复(ICMP 类型 14)。添加 -PP 选项告诉 Nmap 使用 ICMP 时间戳请求

Nmap 使用地址掩码查询(ICMP 类型 17)并检查是否获得地址掩码回复(ICMP 类型 18)。可以使用选项 -PM 启用此扫描。

Nmap Host Discovery Using TCP and UDP

TCP SYN Ping

可以通过选项 -PS 后跟端口号、范围、列表或它们的组合来实现。

例如, -PS21 将定位端口 21,而 -PS21-25 将定位端口 21、22、23、24 和 25。

最后 -PS80,443,8080 将定位这三个端口80、443 和 8080。

特权用户(root 和 sudoers)可以发送 TCP SYN 数据包,即使端口打开,也不需要完成 TCP 3 次握手,如果端口开放,非特权

用户别无选择,只能完成3次握手。

TCP ACK Ping

这会发送一个设置了 ACK 标志的数据包。我们必须以特权用户身份运行 Nmap 才能完成此操作。如果我们以非特权用户身份尝试,Nmap 将尝试 3 次握手。

默认使用80端口。语法类似于 TCP SYN ping。 -PA 后面应跟端口号、范围、列表或它们的组合。例如,考虑 -PA21-PA21-25-

PA80,443,8080 。如果未指定端口,则将使用端口 80。

UDP Ping

最后,我们可以使用UDP来发现主机是否在线。与 TCP SYN ping 相反,向开放端口发送 UDP 数据包预计不会导致任何回复。然而,如果我

们发送一个UDP数据包到一个关闭的UDP端口,我们期望得到一个ICMP端口不可达数据包;这表明目标系统已启动且可用。

指定端口的语法类似于 TCP SYN ping 和 TCP ACK ping; Nmap 使用 -PU 进行 UDP ping。

Masscan

Masscan 使用类似的方法来发现可用系统。然而,为了快速完成网络扫描,Masscan对其生成的数据包速率相当激进。语法非常相似: -p

后面可以跟端口号、列表或范围。

Using Reverse-DNS Lookup

Nmap 的默认行为是使用反向 DNS 在线主机。由于主机名可以透露很多信息,因此这可能是一个有用的步骤。但是,如果我们不想发送此类

DNS 查询,则可以使用 -n 跳过此步骤。

默认情况下,Nmap会查找在线主机;但是,即使对于离线主机,我们也可以使用选项 -R 来查询 DNS 服务器。如果我们使用特定的 DNS 服

务器,可以添加 --dns-servers DNS_SERVER 选项。

总结

Nmap Basic Port Scans

Introduction

扫描完存活主机我们就要扫一些端口

有着不同类型的端口扫描

  • TCP connect port Scan

  • TCP SYN prot Scan

  • UDP prot Scan

TCP and UDP Ports

与 IP 地址指定网络上的主机以及其他主机一样,TCP 端口或 UDP 端口也用于标识该主机上运行的网络服务。服务器提供网络服务,并且遵循

特定的网络协议。示例包括提供时间、响应 DNS 查询以及提供网页。端口通常使用该特定端口号链接到服务。例如,HTTP 服务器默认绑定

到 TCP 端口 80;此外,如果 HTTP 服务器支持 SSL/TLS,它将侦听 TCP 端口 443。(TCP 端口 80 和 443 是 HTTP 和 HTTPS 的默认端口;但

是,网络服务器管理员可以根据需要选择其他端口号。)此外,最多只有一个服务可以侦听任何 TCP 或 UDP 端口(同一 IP 地址)。

可以将端口分为两种状态

  • 打开端口表示有某个服务正在监听该端口

  • 关闭端口表示该端口没有服务监听

但是在现实情况中往往会有防火墙影响

  • Open:表示有服务正在监听指定端口。

  • Closed:表示指定端口没有服务监听,但该端口可访问。可访问是指它是可访问的并且不会被防火墙或其他安全设备/程序阻止。

  • Filtered:意味着Nmap无法确定端口是打开还是关闭,因为端口不可访问。这种状态通常是由于防火墙阻止 Nmap 到达该端口。 Nmap的数据包可能被阻止到达端口;或者,响应被阻止到达 Nmap 的主机。

  • Unfiltered:表示尽管端口可访问,但 Nmap 无法确定端口是打开还是关闭。使用 ACK 扫描 -sA 时会遇到此状态。

  • Open|Filtered:这意味着Nmap无法确定端口是开放的还是已过滤的。

  • Closed|Filtered:这意味着Nmap无法决定端口是关闭还是过滤。

TCP Flags

这是TCP数据头

标红的代表状态

  • URG:紧急标志,表示提交的紧急指针有意义。紧急指针指示传入数据紧急,并且立即处理设置了 URG 标志的 TCP 分段,而无需考虑必须等待先前发送的 TCP 分段。

  • ACK:确认标志,表示确认号有效。它用于确认 TCP 段的接收。

  • PSH:推送标志,要求 TCP 立即将数据传递给应用程序。

  • RST:复位标志,用于复位连接。另一个设备(例如防火墙)可能会发送它来断开 TCP 连接。当数据发送到主机并且接收端没有服务来应答时,也会使用此标志。

  • SYN:同步标志用于发起 TCP 3 次握手并与其他主机同步序列号。序列号应在 TCP 连接建立期间随机设置。

  • FIN:发送方没有更多数据要发送。

TCP Connect Scan

TCP 连接扫描通过完成 TCP 3 次握手来工作。在标准TCP连接建立中,客户端发送一个设置了SYN标志的TCP数据包,如果端口打开,服务器

用SYN/ACK响应;最后,客户端通过发送ACK完成3次握手。

使用 -sT 运行 TCP 连接扫描

我们可以使用 -F 启用快速模式并将扫描端口的数量从 1000 个最常见的端口减少到 100 个。

还可以添加 -r 选项,以连续顺序而不是随机顺序扫描端口。当测试端口是否以一致的方式打开时(例如,当目标启动时),此选项非常有

用。

TCP SYN Scan

非特权用户仅限连接扫描。但是,默认扫描模式是SYN扫描,并且需要特权用户(root或sudoer)才能运行它。 SYN扫描不需要完成TCP 3次

握手;相反,一旦收到服务器的响应,它就会断开连接。因为我们没有建立 TCP 连接,所以这减少了记录扫描的机会。我们可以使用 -sS

项选择此扫描类型。

TCP SYN 扫描是以特权用户身份运行 Nmap、以 root 身份运行或使用 sudo 运行 Nmap 时的默认扫描模式,它是一个非常可靠的选择。它已

成功发现我们之前通过 TCP 连接扫描找到的开放端口,但尚未与目标完全建立 TCP 连接。

UDP Scan

UDP 是无连接协议,因此它不需要任何握手来建立连接。我们无法保证侦听 UDP 端口的服务能够响应我们的数据包。但是,如果将 UDP 数

据包发送到关闭的端口,则会返回 ICMP 端口不可达错误(类型 3,代码 3)。我们可以使用 -sU 选项选择UDP扫描;此外,我们可以将其

与另一个 TCP 扫描结合起来。

Fine-Tuning Scope and Performance

我们可以指定要扫描的端口,而不是默认的 1000 个端口。

  • 端口列表: -p22,80,443 将扫描端口22、80和443。

  • 端口范围: -p1-1023 将扫描 1 到 1023(含)之间的所有端口,而 -p20-25 将扫描 20 到 25(含)之间的端口。

我们可以使用 -p- 请求扫描所有端口,这将扫描所有 65535 个端口。如果要扫描最常见的 100 个端口,请添加 -F 。使用 --top-ports 10

将检查十个最常见的端口。

我们可以使用 -T<0-5> 控制扫描时序。 -T0 是最慢的,而 -T5 是最快的。

为了避免 IDS 警报,我们可以考虑 -T0-T1 。例如, -T0 一次扫描一个端口,并在发送每个探测之间等待 5 分钟,因此我们可以猜测

扫描一个目标需要多长时间才能完成。如果我们不指定任何时间,Nmap 将使用正常的 -T3 。请注意, -T5 就速度而言是最具侵略性的;

但是,由于丢包的可能性增加,这可能会影响扫描结果的准确性。请注意, -T4 通常在 CTF 期间以及学习扫描练习目标时使用,而 -T1

常在隐秘性更重要的真实交战中使用。

我们可以选择使用 --min-rate <number>--max-rate <number> 控制数据包速率。例如, --max-rate 10--max-rate=10 确保我们的扫描

仪每秒发送的数据包不超过十个。

我们可以使用 --min-parallelism <numprobes>--max-parallelism <numprobes> 控制探测并行化。 Nmap 探测目标以发现哪些主机处于活

动状态以及哪些端口是开放的;探测并行化指定可以并行运行的此类探测的数量。例如, --min-parallelism=512 推动Nmap保持至少512个

探针并行;这512个探测与主机发现和开放端口有关。

总结

Nmap Advanced Port Scans

Introduction

介绍一些高级的扫描类型和选项,其中一些扫描类型可用于特定系统,而其他扫描类型则可用于特定的网络设置。

我们将讨论规避防火墙和 IDS 系统的选项和技术。

TCP Null Scan, FIN Scan, and Xmas Scan

Null Scan

空扫描不设置任何标志;所有六个标志位均设置为零。我们可以使用 -sN 选项选择此扫描。没有设置标志的 TCP 数据包在到达开放端口时不会触发任何响应

从 Nmap 的角度来看,空扫描中缺乏回复表明端口已打开或防火墙正在阻止数据包。

但是,如果端口关闭,我们希望目标服务器能够响应 RST 数据包。因此,我们可以利用缺少 RST 响应来找出未关闭的端口:打开或已过滤。

FIN Scan 

FIN 扫描发送设置了 FIN 标志的 TCP 数据包。我们可以使用 -sF 选项选择此扫描类型。同样,如果 TCP 端口打开,则不会发送任何响应。同样,Nmap 无法确定端口是否打开或防火墙是否阻止与此 TCP 端口相关的流量。

但是,如果端口关闭,目标系统应使用 RST 进行响应。因此,我们将能够知道哪些端口是关闭的,并使用这些知识来推断打开或过滤的端口。值得注意的是,一些防火墙会“默默地”丢弃流量而不发送 RST。

Xmas Scan 

Xmas 扫描同时设置 FIN、PSH 和 URG 标志。我们可以使用选项 -sX

与Null scan和FIN scan一样,如果收到RST数据包,则表明端口已关闭。否则,它将被报告为 open|filtered。

TCP Maimon Scan

Uriel Maimon 于 1996 年首次描述了这种扫描。在此扫描中,FIN 和 ACK 位被设置。目标应发送 RST 数据包作为响应。但是,如果数据包是开放端口,则某些 BSD 派生系统会丢弃该数据包。这种扫描不适用于现代网络中遇到的大多数目标;然而,我们将其包含在这个房间中是为了更好地理解端口扫描机制和黑客思维。要选择此扫描类型,请使用 -sM 选项。

TCP ACK,Window,and Custom Scan

TCP ACK Scan

ACK 扫描将发送设置了 ACK 标志的 TCP 数据包。使用 -sA 选项选择此扫描。如下图所示,无论端口状态如何,目标都会使用 RST 响应 ACK。发生这种行为是因为设置了 ACK 标志的 TCP 数据包应该仅在响应接收到的 TCP 数据包时发送,以确认某些数据的接收,这与我们的情况不同。因此,在简单的设置中,此扫描不会告诉我们目标端口是否打开。

如果目标前面有防火墙,这种扫描会很有帮助。因此,根据哪些 ACK 数据包导致响应,我们将了解哪些端口未被防火墙阻止。换句话说,这种类型的扫描更适合发现防火墙规则集和配置。

Window Scan

另一种类似的扫描是 TCP 窗口扫描。 TCP窗口扫描与ACK扫描几乎相同;但是,它会检查返回的 RST 数据包的 TCP 窗口字段。在特定系统上,这可以表明端口已打开。我们可以使用选项 -sW 选择此扫描类型。如下图所示,无论端口是打开还是关闭,我们都希望收到一个 RST 数据包来回复我们的“不请自来”的 ACK 数据包

Custom Scan

如果我们想尝试内置 TCP 扫描类型之外的新 TCP 标志组合,可以使用 --scanflags 来实现。例如,如果我们想同时设置 SYN、RST 和 FIN,可以使用 --scanflags RSTSYNFIN 来实现。

Spoofing and Decoys

在某些网络设置中,我们将能够使用欺骗性的 IP 地址甚至欺骗性的 MAC 地址来扫描目标系统。此类扫描仅在我们可以保证捕获响应的情况下才有用。如果我们尝试使用欺骗性 IP 地址从某个随机网络扫描目标,则很可能不会收到任何路由到我们的响应,并且扫描结果可能不可靠。

我们可以通过在 -D 之后指定特定或随机 IP 地址来启动诱饵扫描。例如, nmap -D 10.10.0.1,10.10.0.2,ME 10.10.224.28 将使 10.10.224.28 的扫描显示为来自 IP 地址 10.10.0.1、10.10.0.2,然后 ME 表示应显示我们的 IP 地址按第三顺序。另一个示例命令是 nmap -D 10.10.0.1,10.10.0.2,RND,RND,ME 10.10.224.28 ,其中第三个和第四个源 IP 地址是随机分配的,而第五个源将是攻击者的 IP 地址。换句话说,每次执行后一个命令时,我们都会期望两个新的随机 IP 地址成为第三个和第四个诱饵源。

Fragmented Packets

Firewall

防火墙是一种软件或硬件,允许数据包通过或阻止它们。它基于防火墙规则运行,概括为阻止所有有例外的流量或允许所有有例外的流量。例如,我们可以阻止流向服务器的所有流量,但流向 Web 服务器的流量除外。传统防火墙至少会检查 IP 报头和传输层报头。更复杂的防火墙也会尝试检查传输层携带的数据。

IDS

入侵检测系统 (IDS) 检查网络数据包中选定的行为模式或特定内容签名。每当满足恶意规则时,它就会发出警报。除了 IP 报头和传输层报头之外,IDS 还将检查传输层中的数据内容,并检查它是否与任何恶意模式匹配。如何降低传统防火墙/IDS 检测到我们的 Nmap 活动的可能性?回答这个问题并不容易;但是,根据防火墙/IDS 的类型,将数据包划分为更小的数据包可能会受益。

Fragmented Packets

Nmap 提供了对数据包进行分段的选项 -f 。选择后,IP 数据将被分成 8 个字节或更少。添加另一个 -f-f -f-ff ) 会将数据拆分为 16 个字节片段,而不是 8 个字节片段。我们可以使用 --mtu ;但是,我们应该始终选择 8 的倍数。

Idle/Zombie Scan 

空闲扫描或僵尸扫描需要连接到网络的空闲系统,我们可以与之通信。实际上,Nmap 会让每个探测器看起来好像来自空闲(僵尸)主机,然后它会检查空闲(僵尸)主机是否收到对欺骗探测器的任何响应的指标。这是通过检查 IP 标头中的 IP 标识 (IP ID) 值来实现的。我们可以使用 nmap -sI ZOMBIE_IP 10.10.57.187 运行空闲扫描,其中 ZOMBIE_IP 是空闲主机(僵尸)的 IP 地址。

空闲(僵尸)扫描需要以下三个步骤来发现端口是否打开:

  • 触发空闲主机响应,以便我们可以在空闲主机上记录当前 IP ID。

  • 将 SYN 数据包发送到目标上的 TCP 端口。数据包应被欺骗,使其看起来好像来自空闲主机(僵尸)IP 地址。

  • 再次触发空闲计算机进行响应,以便我们可以将新 IP ID 与之前收到的 IP ID 进行比较。

Getting More Details

如果我们希望 Nmap 提供有关其推理和结论的更多详细信息,我们可以考虑添加 --reason

提供该 --reason 标志为我们提供了 Nmap 得出系统已启动或特定端口已打开的明确原因。在上面的控制台输出中,我们可以看到这个系统被认为是在线的,因为 Nmap “收到了 arp-response”。另一方面,我们知道 SSH 端口被视为打开,因为 Nmap 收到了返回的“syn-ack”数据包。

对于更详细的输出,可以考虑使用 -v 详细输出或 -vv 更详细的输出。

如果 -vv 不能满足好奇心,则可以使用 -d 调试详细信息或 -dd 更多详细信息。我们可以保证使用 -d 将创建超出单个屏幕的输出。

总结

Nmap Post Port Scans

Introduction

我们重点介绍如何使用 Nmap 来:

  • 检测正在运行的服务的版本(在所有打开的端口上)

  • 根据目标显示的任何迹象检测操作系统

  • 运行 Nmap 的 traceroute

  • 运行 select Nmap 脚本

  • 以各种格式保存扫描结果

Service Detection

一旦 Nmap 发现打开的端口,我们就可以探测可用端口以检测正在运行的服务。对开放端口的进一步调查是必不可少的信息,因为渗透测试人员可以使用它来了解服务是否存在任何已知的漏洞。加入漏洞 101 以了解有关搜索易受攻击的服务的更多信息。

添加到 -sV Nmap 命令将收集并确定开放端口的服务和版本信息。我们可以控制 --version-intensity LEVEL 强度,级别范围介于 0(最轻)和 9(最完整)之间。 -sV --version-light 强度为 2,而 -sV --version-all 强度为 9。

需要注意的是,使用 -sV 将强制 Nmap 继续进行 TCP 3 向握手并建立连接。建立连接是必要的,因为 Nmap 无法在不完全建立连接并与侦听服务通信的情况下发现版本。换句话说,当选择选项时 -sV ,隐身 SYN 扫描 -sS 是不可能的。

下面的控制台输出显示了带有该 -sV 选项的简单 Nmap 隐身 SYN 扫描。添加该 -sV 选项会导致输出中出现一个新列,显示每个检测到的服务的版本。例如,在 TCP 端口 22 打开的情况下,我们得到 22/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u8 (protocol 2.0) 的不是 22/tcp open ssh 。请注意,由于 TCP 端口 22 处于打开状态,因此 SSH 协议被猜测为服务;Nmap 不需要连接到端口 22 进行确认。但是, -sV 需要连接到此开放端口才能获取服务横幅及其可以获取的任何版本信息,例如 nginx 1.6.2 .因此,与服务列不同,版本列不是猜测。

pentester@TryHackMe$ sudo nmap -sV 10.10.146.188

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 05:03 BST
Nmap scan report for 10.10.146.188
Host is up (0.0040s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 6.7p1 Debian 5+deb8u8 (protocol 2.0)
25/tcp  open  smtp    Postfix smtpd
80/tcp  open  http    nginx 1.6.2
110/tcp open  pop3    Dovecot pop3d
111/tcp open  rpcbind 2-4 (RPC #100000)
MAC Address: 02:A0:E7:B5:B6:C5 (Unknown)
Service Info: Host:  debra2.thm.local; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.40 seconds

OS Detection and Traceroute

OS Detection 

Nmap 可以根据操作系统 (OS) 的行为和响应中的任何迹象来检测操作系统 (OS)。可以使用以下方式 -O 启用操作系统检测;这是一个大写的 O,就像在操作系统中一样。在此示例中,我们在 AttackBox 上运行 nmap -sS -O 10.10.146.188 。Nmap 检测到操作系统是 Linux 3.X,然后它进一步猜测它运行的是内核 3.13。

ntester@TryHackMe$ sudo nmap -sS -O 10.10.146.188

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 05:04 BST
Nmap scan report for 10.10.146.188
Host is up (0.00099s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
110/tcp open  pop3
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:A0:E7:B5:B6:C5 (Unknown)
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3.13
OS details: Linux 3.13
Network Distance: 1 hop

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 3.91 seconds

我们扫描并尝试检测其操作系统版本的系统运行的是内核版本 3.16。在这种情况下,Nmap能够做出密切的猜测。在另一个案例中,我们扫描了内核为 5.13.14 的 Fedora Linux 系统;但是,Nmap 将其检测为 Linux 2.6.X。好消息是 Nmap 正确检测到了操作系统;不太好的消息是内核版本是错误的。

Traceroute

如果你想让 Nmap 找到你和目标之间的路由器,只需添加 --traceroute .在以下示例中,Nmap 在其扫描结果中附加了跟踪路由。请注意,Nmap 的 traceroute 的工作方式与 Linux 和 macOS 上或 tracert MS Windows 上 traceroute 的命令略有不同。标准 traceroute 从低 TTL(生存时间)数据包开始,并不断增加,直到达到目标。Nmap 的 traceroute 从高 TTL 数据包开始,并不断递减。

Nmap Scripting Engine (NSE)

脚本是一段不需要编译的代码。换句话说,它保持其原始的人类可读形式,不需要转换为机器语言。许多程序通过脚本提供附加功能;此外,脚本还可以通过内置命令添加不存在的自定义功能。类似地,Nmap 也支持使用 Lua 语言的脚本。Nmap 脚本引擎 (NSE) 是 Nmap 的一部分,是一个 Lua 解释器,允许 Nmap 执行用 Lua 语言编写的 Nmap 脚本。但是,我们不需要学习 Lua 来使用 Nmap 脚本。

Nmap 默认安装可以轻松包含近 600 个脚本。查看 Nmap 安装文件夹。在 AttackBox 上,检查 中的 /usr/share/nmap/scripts 文件

我们可以指定使用这些已安装脚本中的任何一个或一组;此外,我们可以安装其他用户的脚本并将它们用于扫描。让我们从默认脚本开始。我们可以选择使用 --script=default 或直接添加 -sC 来运行默认类别中的脚本。除默认外,类别还包括身份验证、广播、暴力破解、默认、发现、dos、漏洞利用、外部、模糊测试、侵入性、恶意软件、安全、版本和漏洞。下表显示了简要说明。

Script Category 脚本类别

Description 描述

auth

Authentication related scripts
身份验证相关脚本

broadcast

Discover hosts by sending broadcast messages
通过发送广播消息发现主持人

brute

Performs brute-force password auditing against logins
对登录名执行暴力破解密码审核

default

Default scripts, same as -sC
默认脚本,与 -sC

discovery

Retrieve accessible information, such as database tables and DNS names
检索可访问的信息,例如数据库表和 DNS 名称

dos

Detects servers vulnerable to Denial of Service (DoS)
检测易受拒绝服务 (DoS) 攻击的服务器

exploit

Attempts to exploit various vulnerable services
尝试利用各种易受攻击的服务

external

Checks using a third-party service, such as Geoplugin and Virustotal
使用第三方服务(如 Geoplugin 和 Virustotal)进行检查

fuzzer

Launch fuzzing attacks 发起模糊测试攻击

intrusive

Intrusive scripts such as brute-force attacks and exploitation
侵入性脚本,例如暴力攻击和漏洞利用

malware

Scans for backdoors 扫描后门

safe

Safe scripts that won’t crash the target
不会使目标崩溃的安全脚本

version

Retrieve service versions
检索服务版本

vuln

Checks for vulnerabilities or exploit vulnerable services
检查漏洞或利用易受攻击的服务

某些脚本属于多个类别。此外,一些脚本会对服务发起暴力攻击,而另一些脚本会发起 DoS 攻击并利用系统。因此,如果不想使服务崩溃或利用它们,那么在选择要运行的脚本时要小心至关重要。

我们还可以按名称 using --script "SCRIPT-NAME" 或模式(如 --script "ftp*" )指定脚本 ftp-brute ,其中包括 。如果不确定脚本的作用,可以使用文本阅读器(如 less )或文本编辑器打开脚本文件。在 ftp-brute的情况下 ,它指出:“对 FTP 服务器执行暴力密码审核。我们必须小心,因为某些脚本非常具有侵入性。此外,某些脚本可能是针对特定服务器的,如果随机选择,将浪费我们的时间而没有任何好处。像往常一样,请确保我们有权在目标服务器上启动此类测试。

让我们考虑一个良性脚本, http-date 我们猜测它会检索 http 服务器的日期和时间,这确实在其描述中得到了证实:“从类似 HTTP 的服务中获取日期。此外,它还会打印日期与当地时间的差异......”在 AttackBox 上,我们 sudo nmap -sS -n --script "http-date" 10.10.167.57 执行如下图所示的控制台。

pentester@TryHackMe$ sudo nmap -sS -n --script "http-date" 10.10.167.57

Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-10 08:04 BST
Nmap scan report for 10.10.167.57
Host is up (0.0011s latency).
Not shown: 994 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
|_http-date: Fri, 10 Sep 2021 07:04:26 GMT; 0s from local time.
110/tcp open  pop3
111/tcp open  rpcbind
143/tcp open  imap
MAC Address: 02:44:87:82:AC:83 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 1.78 seconds

Saving the Output

每当运行 Nmap 扫描时,将结果保存在文件中才是合理的。为文件名选择和采用良好的命名约定也很重要。文件数量可能会迅速增加,并阻碍我们查找以前的扫描结果。三种主要格式是:

  1. Normal 正常

  2. Grepable (grepable)

  3. XML 

我们不推荐第四个

  • Script Kiddie 脚本小子

Normal

顾名思义,正常格式类似于扫描目标时在屏幕上看到的输出。我们可以使用以下方法 -oN FILENAME 将扫描保存为普通格式;N 代表正常。

Grepable

grepable 格式的名称来自命令 grep ;grep 代表 全局正则表达式打印机。简单来说,它使过滤特定关键字或术语的扫描输出变得高效。我们可以使用 -oG FILENAME 将扫描结果保存为可复制的格式。扫描输出(上面以正常格式显示)在下面的控制台中使用 grepable 格式显示。正常输出为 21 行;但是,可 grepable 输出只有 4 行。主要原因是 Nmap 希望在用户申请 grep 时让每一行都有意义和完整。因此,在可重复输出中,与正常输出相比,行很长,不方便读取。

XML

第三种格式是 XML。我们可以使用 -oX FILENAME 以 XML 格式保存扫描结果。XML 格式最方便于在其他程序中处理输出。非常方便的是,我们可以使用 -oA FILENAME 组合 -oN-oG-oX normal、grepable 和 XML 以所有三种格式保存扫描输出。

Script Kiddie 

第四种格式是脚本小子。我们可以看到,如果我们想在输出中搜索任何有趣的关键字或保留结果以备将来参考,则此格式是无用的。但是,我们可以使用它来保存扫描 nmap -sS 127.0.0.1 -oS FILENAME 的输出,显示输出文件名。

总结

Option 选择

Meaning 意义

-sV

determine service/version info on open ports
确定开放端口上的服务/版本信息

-sV --version-light

try the most likely probes (2)
尝试最有可能的探针 (2)

-sV --version-all

try all available probes (9)
尝试所有可用的探头 (9)

-O

detect OS 检测操作系统

--traceroute

run traceroute to target
运行 TraceRoute 到 Target

--script=SCRIPTS

Nmap scripts to run 要运行的 Nmap 脚本

-sC or --script=default  -sC--script=default

run default scripts 运行默认脚本

-A

equivalent to -sV -O -sC --traceroute  -sV -O -sC --traceroute 相当于

-oN

save output in normal format
以正常格式保存输出

-oG

save output in grepable format
以 grepable 格式保存输出

-oX

save output in XML format
以 XML 格式保存输出

-oA

save output in normal, XML and Grepable formats
以普通、XML 和 Grepable 格式保存输出

Protocols and Servers

Introduction

介绍一些常见协议

  • HTTP

  • FTP

  • POP3

  • SMTP

  • IMAP

Telent

Telnet 协议是用于连接到另一台计算机的虚拟终端的应用层协议。使用 Telnet,用户可以登录到另一台计算机并访问其终端(控制台)以远程运行程序、启动批处理和执行系统管理任务。

Telnet协议相对简单。当用户连接时,系统将要求他们输入用户名和密码。正确验证后,用户将访问远程系统的终端。不幸的是,Telnet 客户端和 Telnet 服务器之间的所有这些通信都没有加密,这使得它很容易成为攻击者的目标。

尽管Telnet使我们能够立即访问远程系统的终端,但它并不是远程管理的可靠协议,因为所有数据都以明文形式发送。

Hypertext Transfer Protocol (HTTP)

超文本传输协议 (HTTP) 是用于传输网页的协议。我们的 Web 浏览器连接到 Web 服务器并使用 HTTP 请求 HTML 页面和图像以及其他文件,并提交表单和上传各种文件。每当我们浏览万维网 (WWW) 时,我们肯定使用的是 HTTP 协议。

HTTP以明文(未加密)形式发送和接收数据;因此,我们可以使用简单的工具,例如 Telnet(或 Netcat)与 Web 服务器进行通信并充当“Web 浏览器”。主要区别在于我们需要输入与 HTTP 相关的命令,而不是 Web 浏览器为我们执行此操作。

File Transfer Protocol (FTP)

文件传输协议 (FTP) 的开发是为了提高具有不同系统的不同计算机之间的文件传输效率。

FTP 还以明文形式发送和接收数据;因此,我们可以使用 Telnet(或 Netcat)与 FTP 服务器通信并充当 FTP 客户端。

  • 我们使用Telnet客户端连接到FTP服务器。由于 FTP 服务器默认侦听端口 21,因此我们必须指定 Telnet 客户端尝试连接到端口 21 而不是默认的 Telnet 端口。

  • 我们需要为用户名提供命令 USER frank

  • 然后,我们提供了带有命令 PASS D2xc9CgD 的密码

  • 因为我们提供了正确的用户名和密码,所以我们登录了

像这样的 STAT 命令可以提供一些附加信息。该 SYST 命令显示目标的系统类型(在本例中为 UNIX)。 PASV 将模式切换为被动。值得注意的是,FTP有两种模式:

  • 活动:在活动模式下,数据通过源自 FTP 服务器端口 20 的单独通道发送。

  • 被动:在被动模式下,数据通过源自端口号 1023 上方的 FTP 客户端端口的单独通道发送。

该命令 TYPE A 将文件传输模式切换为 ASCII,同时 TYPE I 将文件传输模式切换为二进制。但是,我们不能使用简单的客户端(如Telnet)传输文件,因为FTP为文件传输创建了单独的连接。

由于 FTP 以明文形式发送登录凭据以及命令和文件,因此 FTP 流量很容易成为攻击者的目标。

Simple Mail Transfer Protocol (SMTP)

电子邮件是互联网上最常用的服务之一。电子邮件服务器有多种配置;例如,我们可以设置一个电子邮件系统,允许本地用户在不访问 Internet 的情况下相互交换电子邮件。但是,我们将考虑更通用的设置,其中不同的电子邮件服务器通过 Internet 连接。

通过 Internet 传递电子邮件需要以下组件:

  1. 邮件提交代理 (MSA)

  2. 邮件传输代理 (MTA)

  3. 邮件递送代理 (MDA)

  4. 邮件用户代理 (MUA)

邮件发送可以有一下类比:

  1. 我们 (MUA) 想要发送邮政邮件。

  2. 邮局员工 (MSA) 会在当地邮局 (MTA) 接受邮件之前检查邮件是否有任何问题。

  3. 当地邮局会检查邮件目的地并将其发送到正确国家/地区的邮局 (MTA)。

  4. 邮局 (MTA) 将邮件递送到收件人邮箱 (MDA)。

  5. 收件人 (MUA) 定期检查邮箱中是否有新邮件。他们注意到了新邮件,并接受了它。

同样,我们需要遵循协议来与HTTP服务器进行通信,并且我们需要依靠电子邮件协议来与MTA和MDA进行通信。协议是:

  1. 简单邮件传输协议 (SMTP)

  2. 邮局协议版本 3 (POP3) 或 Internet 邮件访问协议 (IMAP)

简单邮件传输协议 (SMTP) 用于与 MTA 服务器进行通信。由于 SMTP 使用明文,其中所有命令都是在不加密的情况下发送的,因此我们可以使用基本的 Telnet 客户端连接到 SMTP 服务器并充当发送消息的电子邮件客户端 (MUA)。

Post Office Protocol 3 (POP3)

邮局协议版本 3 (POP3) 是用于从邮件传递代理 (MDA) 服务器下载电子邮件的协议

下面的示例显示了通过 Telnet 客户端执行 POP3 会话时的外观。首先,用户在 POP3 默认端口 110 处连接到 POP3 服务器。需要身份验证才能访问电子邮件;用户通过提供其用户名 USER frank 和密码进行身份验证 PASS D2xc9CgD 。使用命令 STAT ,我们得到回复 +OK 1 179 ;基于 RFC 1939,对 STAT 的肯定响应的格式 +OK nn mm 为 ,其中 nn 是收件箱中的电子邮件数,mm 是收件箱的大小,单位为八位字节(字节)。该命令 LIST 提供了服务器上的新消息列表,并 RETR 1 检索了列表中的第一条消息。我们不需要担心记住这些命令;但是,加强我们对此类协议的理解是有帮助的。

pentester@TryHackMe$ telnet 10.10.75.210 110
Trying 10.10.75.210...
Connected to 10.10.75.210.
Escape character is '^]'.
+OK 10.10.75.210 Mail Server POP3 Wed, 15 Sep 2021 11:05:34 +0300 
USER frank
+OK frank
PASS D2xc9CgD
+OK 1 messages (179) octets
STAT
+OK 1 179
LIST
+OK 1 messages (179) octets
1 179
.
RETR 1
+OK
From: Mail Server 
To: Frank 
subject: Sending email with Telnet
Hello Frank,
I am just writing to say hi!
.
QUIT
+OK 10.10.75.210 closing connection
Connection closed by foreign host.

Internet Message Access Protocol (IMAP)

Internet 邮件访问协议 (IMAP) 比 POP3 更复杂。IMAP使我们的电子邮件在多个设备(和邮件客户端)之间保持同步成为可能。换言之,如果我们在智能手机上查看电子邮件时将电子邮件标记为已读,则更改将保存在 IMAP 服务器 (MDA) 上,并在同步收件箱时复制到笔记本电脑上。

总结

Protocol

TCP Port

Application(s)

Data Security

FTP

21

File Transfer

Cleartext

HTTP

80

Worldwide Web

Cleartext

IMAP

143

Email (MDA)

Cleartext

POP3

110

Email (MDA)

Cleartext

SMTP

25

Email (MTA)

Cleartext

Telnet

23

Remote Access

Cleartext

Protocols and Servers 2

Introduction

实现这些协议的服务器会受到不同类型的攻击。

  • 嗅探攻击(网络数据包捕获)

  • 中间人 (MITM) 攻击

  • 密码攻击(身份验证攻击)

  • 漏洞

Sniffing Attack 

嗅探攻击是指使用网络数据包捕获工具收集有关目标的信息。当协议以明文形式通信时,交换的数据可以被第三方捕获以进行分析。如果数据在传输过程中未加密,则简单的网络数据包捕获可以显示信息,例如私人消息的内容和登录凭据。

可以使用以太网 (802.3) 网卡进行嗅探攻击,前提是用户具有适当的权限(Linux 上的 root 权限和 MS Windows 上的管理员权限)。有许多程序可用于捕获网络数据包。我们考虑以下几点:

  • Tcpdump 是一个免费的开源命令行界面 (CLI) 程序,已被移植到许多操作系统上运行。

  • Wireshark 是一个免费的开源图形用户界面 (GUI) 程序,可用于多种操作系统,包括 Linux、macOS 和 MS Windows。

  • Tshark 是 Wireshark 的 CLI 替代品。

假设用户使用 POP3 检查其电子邮件。首先,我们将使用 Tcpdump 尝试捕获用户名和密码。在下面的终端输出中,我们使用了命令 sudo tcpdump port 110 -A 。在解释此命令之前,我们应该提到此攻击需要访问网络流量,例如,通过窃听或具有端口镜像的交换机。或者,如果我们成功发起中间人 (MITM) 攻击,我们可以访问交换的流量。

我们需要 sudo ,因为数据包捕获需要root权限。我们希望将捕获和显示的数据包数限制为与 POP3 服务器交换的数据包数。我们知道 POP3 使用端口 110,因此我们使用 port 110 .最后,我们希望以 ASCII 格式显示捕获的数据包的内容,因此我们添加了 -A .

pentester@TryHackMe$ sudo tcpdump port 110 -A
[...]
09:05:15.132861 IP 10.20.30.1.58386 > 10.20.30.148.pop3: Flags [P.], seq 1:13, ack 19, win 502, options [nop,nop,TS val 423360697 ecr 3958275530], length 12
E..@.V@.@.g.
...
......n......"............
.;....}.USER frank

09:05:15.133465 IP 10.20.30.148.pop3 > 10.20.30.1.58386: Flags [.], ack 13, win 510, options [nop,nop,TS val 3958280553 ecr 423360697], length 0
E..4..@.@.O~
...
....n....".........?P.....
...i.;..
09:05:15.133610 IP 10.20.30.148.pop3 > 10.20.30.1.58386: Flags [P.], seq 19:43, ack 13, win 510, options [nop,nop,TS val 3958280553 ecr 423360697], length 24
E..L..@.@.Oe
...
....n....".........<-.....
...i.;..+OK Password required.

09:05:15.133660 IP 10.20.30.1.58386 > 10.20.30.148.pop3: Flags [.], ack 43, win 502, options [nop,nop,TS val 423360698 ecr 3958280553], length 0
E..4.W@.@.g.
...
......n......".....??.....
.;.....i
09:05:22.852695 IP 10.20.30.1.58386 > 10.20.30.148.pop3: Flags [P.], seq 13:28, ack 43, win 502, options [nop,nop,TS val 423368417 ecr 3958280553], length 15
E..C.X@.@.g.
...
......n......".....6......
.<.....iPASS D2xc9CgD
[...]

在上面的终端输出中,我们删除了不重要的数据包,以帮助我们更好地专注于重要的数据包。特别是,用户名和密码都是在自己的数据包中发送的。第一个数据包显式显示“USER frank”,而最后一个数据包显示密码“PASS D2xc9CgD”。

我们也可以使用 Wireshark 来达到相同的结果。在下面的 Wireshark 窗口中,我们可以看到我们已经进入了 pop 过滤器字段。现在我们已经过滤了我们感兴趣的流量,我们可以看到用户名和密码被捕获了。

简而言之,任何使用明文通信的协议都容易受到这种攻击。要使此攻击成功,唯一的要求是能够访问两个通信系统之间的系统。这种攻击需要注意;缓解措施在于在任何网络协议之上添加加密层。特别是,传输层安全性 (TLS) 已添加到 HTTP、FTP、SMTP、POP3、IMAP 和许多其他内容中。对于远程访问,Telnet 已被安全替代安全外壳 (SSH) 取代。

Man-in-the-Middle (MITM) Attack

当受害者 (A) 认为他们正在与合法目的地 (B) 通信,但在不知不觉中与攻击者 (E) 通信时,就会发生中间人 (MITM) 攻击

每当我们浏览HTTP时,我们都容易受到MITM攻击,可怕的是我们无法识别它。许多工具可以帮助我们进行此类攻击,例如 Ettercap 和 Bettercap。

MITM 还会影响其他明文协议,例如 FTP、SMTP 和 POP3。缓解此攻击需要使用加密技术。解决方案在于对交换的消息进行适当的身份验证以及加密或签名。在公钥基础设施 (PKI) 和受信任的根证书的帮助下,传输层安全性 (TLS) 可防止 MITM 攻击。

Transport Layer Security (TLS)

我们将了解一种标准解决方案,以保护交换数据包的机密性和完整性。以下方法可以防止密码嗅探和 MITM 攻击。

SSL(安全套接字层)在万维网开始看到新的应用程序(例如在线购物和发送支付信息)时开始。Netscape 于 1994 年推出了 SSL,SSL 3.0 于 1996 年发布。但最终,需要更多的安全性,并于 1999 年引入了 TLS(传输层安全)协议。

HTTPS 需要额外的步骤来加密流量。新步骤在建立 TCP 连接后和发送 HTTP 请求之前进行。这个额外的步骤可以从前面显示的图中的 ISO/OSI 模型中推断出来。因此,HTTPS 至少需要以下三个步骤:

  1. 建立 TCP 连接

  2. 建立 SSL/TLS 连接

  3. 向 Web 服务器发送 HTTP 请求

Secure Shell (SSH) 

创建安全外壳 (SSH) 是为了提供一种安全的远程系统管理方式。换句话说,它允许我们通过网络安全地连接到另一个系统,并在远程系统上执行命令。简单地说,SSH中的“S”代表安全,可以简单地概括为:

  • 我们可以确认远程服务器的身份

  • 交换的消息是加密的,只能由目标收件人解密

  • 双方都可以检测到消息中的任何修改

要使用 SSH,我们需要一个 SSH 服务器和一个 SSH 客户端。默认情况下,SSH 服务器侦听端口 22。SSH 客户端可以使用以下命令进行身份验证:

  • 用户名和密码

  • 私钥和公钥(在SSH服务器配置为识别相应的公钥之后)

在 2018 年之后的 Linux、macOS 和 MS Windows 版本上,我们可以使用以下命令 ssh username@10.10.14.113 连接到 SSH 服务器。此命令将尝试使用登录名 username 连接到 IP 地址 10.10.14.113 的服务器。如果 SSH 服务器正在侦听默认端口,它将要求我们提供 的 username 密码。通过身份验证后,用户将有权访问目标服务器的终端。

我们可以使用 SSH 使用基于 SSH 协议的 SCP(安全复制协议)传输文件。语法示例如下: scp mark@10.10.14.113:/home/mark/archive.tar.gz ~ 。此命令会将位于该 /home/mark 目录中的远程系统命名 archive.tar.gz 的文件复制到 ~ ,即当前登录用户的主目录的根目录。

另一个语法示例是 scp backup.tar.bz2 mark@10.10.14.113:/home/mark/ 。此命令会将文件 backup.tar.bz2 从本地系统复制到远程系统 /home/mark/ 上的目录。

Password Attack

许多协议要求我们进行身份验证。身份验证正在证明我们声称的身份。当我们使用 POP3 等协议时,在验证我们的身份之前,不应授予我们访问邮箱的权限。为方便起见,下面重复了协议和服务器会议室中的 POP3 示例。在此示例中,我们被标识为用户 frank,服务器对我们进行了身份验证,因为我们提供了正确的密码。换句话说,密码是身份验证的一种方式。

对密码的攻击通常由以下方式进行:

  1. 密码猜测:猜测密码需要对目标有一定的了解,例如宠物的名字和出生年份。

  2. 字典攻击:这种方法扩展了密码猜测,并尝试将所有有效单词包含在字典或单词列表中。

  3. 蛮力攻击:这种攻击是最详尽和最耗时的攻击,攻击者可以尝试所有可能的角色组合,并且增长很快(随着角色数量的指数增长)。

我们想要一种自动化的方式来尝试常用密码或单词列表中的条目;Hydra来了。Hydra 支持多种协议,包括 FTP、POP3、IMAP、SMTP、SSH 以及与 HTTP 相关的所有方法。一般的命令行语法是: hydra -l username -P wordlist.txt server service 其中我们指定以下选项:

  • -l username-l 应该在 username 之前,即目标的登录名。

  • -P wordlist.txt-P 位于 wordlist.txt 文件前面,该文件是一个文本文件,其中包含要使用提供的用户名尝试的密码列表。

  • server 是目标服务器的主机名或 IP 地址。

  • service 指示我们尝试发起字典攻击的服务。

hydra -l mark -P /usr/share/wordlists/rockyou.txt 10.10.14.113 ftpmark 用作用户名,因为它对 FTP 服务器迭代提供的密码。

hydra -l mark -P /usr/share/wordlists/rockyou.txt ftp://10.10.14.113 与前面的示例相同。 10.10.14.113 ftpftp://10.10.14.113 相同。

hydra -l frank -P /usr/share/wordlists/rockyou.txt 10.10.14.113 ssh 将用作 frank 用户名,因为它尝试使用不同的密码通过 SSH 登录。

我们可以添加一些额外的可选参数:

  • -s PORT 为相关服务指定非默认端口。

  • -V 或者 -vV ,对于冗长,使 Hydra 显示正在尝试的用户名和密码组合。这种冗长非常方便地查看进度,尤其是在我们仍然对命令行语法没有信心的情况下。

  • -t n 其中 n 是与目标的并行连接数。 -t 16 将创建 16 个用于连接到目标的线程。

  • -d ,用于调试,以获取有关正在发生的操作的更多详细信息。调试输出可以为我们省去很多挫败感;例如,如果 Hydra 尝试连接到一个关闭的端口并超时, -d 将立即显示这一点。

总结

Protocol 协议

TCP Port TCP 端口

Application(s) 应用

Data Security 数据安全

FTP

21

File Transfer 文件传输

Cleartext 明文

FTPS

990

File Transfer 文件传输

Encrypted 加密

HTTP

80

Worldwide Web 万维网

Cleartext 明文

HTTPS

443

Worldwide Web 万维网

Encrypted 加密

IMAP

143

Email (MDA) 电子邮件 (MDA)

Cleartext 明文

IMAPS

993

Email (MDA) 电子邮件 (MDA)

Encrypted 加密

POP3

110

Email (MDA) 电子邮件 (MDA)

Cleartext 明文

POP3S

995

Email (MDA) 电子邮件 (MDA)

Encrypted 加密

SFTP

22

File Transfer 文件传输

Encrypted 加密

SSH

22

Remote Access and File Transfer
远程访问和文件传输

Encrypted 加密

SMTP

25

Email (MTA) 电子邮件 (MTA)

Cleartext 明文

SMTPS

465

Email (MTA) 电子邮件 (MTA)

Encrypted 加密

Telnet Telnet的

23

Remote Access 远程访问

Cleartext 明文