本章向您展示了如何做一些在许多情况下可能是非法的、不道德的、违反服务条款的或不是好主意的事情。这里提供的信息可用于保护您免受威胁,并使您自己的系统更安全。在遵循这些说明之前,请确保您站在法律和道德的正确一边。。。善用你的力量!
在本章中,我们将介绍:
- 地理定位 IP 地址
- 从 WHOIS 记录中获取信息
- 检查主机是否存在已知的恶意活动
- 收集有效的电子邮件帐户
- 发现指向同一 IP 地址的主机名
- 强制 DNS 记录
- 对主机的操作系统进行指纹识别
- 发现 UDP 服务
- 列出远程主机支持的协议
- 通过使用 TCP ACK 扫描发现有状态防火墙
- 将服务与已知的安全漏洞进行匹配
- 欺骗端口扫描的源 IP
渗透测试期间最重要的过程是信息收集阶段。在这个过程中,我们调查我们的目标,目的是了解它的一切。我们发现的信息在渗透测试的进一步阶段可能是非常宝贵的。在这个过程中,我们收集了诸如用户名、可能的密码、其他主机和服务,甚至版本横幅等信息,以及许多其他有趣的数据。
有几种工具可以帮助我们使用许多不同的来源检索有关目标的信息。我们的成功来自使用所有可用资源。敢于忽略或忽略其中任何一个,你可能会错过一条信息,而这正是你需要完全损害目标的一条信息。
Nmap 以其信息收集功能(如操作系统指纹、端口枚举和服务发现)而闻名,但得益于 Nmap 脚本引擎,现在可以执行多个新的信息收集任务,如地理定位 IP、检查主机是否正在进行恶意活动、强制 DNS 记录、,以及使用谷歌收集有效的电子邮件帐户等。
在本章中,我将介绍 Nmap 选项和 NSE 脚本的组合,以查询 WHOIS 服务器,发现 UDP 服务,并根据公共安全漏洞匹配服务。
在许多情况下,识别 IP 地址的位置有助于系统管理员,例如在其论坛中跟踪攻击源、网络连接或无害海报时。
Gorjan Petrovski 提交了三个 Nmap NSE 脚本,帮助我们定位远程 IP 地址:ip-geolocation-maxmind
、ip-geolocation-ipinfodb
和ip-geolocation-geobytes
。
本食谱将向您展示如何设置和使用 Nmap NSE 中包含的地理位置脚本。
脚本ip-geolocation-maxmind
需要一个外部数据库。从下载 Maxmind 的城市数据库 http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz 并将其解压缩到您的本地 Nmap 数据文件夹($NMAP_DATA/nselib/data/
。
ip 地理定位 ipinfodb需要 API 密钥,需要在注册 http://ipinfodb.com/register.php 去拿。与 Geobytes 不同,此服务不会施加查询限制,因此我强烈建议您获取自己的 API 密钥以启用此脚本。
打开终端并输入以下命令:
$nmap --script ip-geolocation-* <target>
您应该看到以下输出:
PORT STATE SERVICE
22/tcp closed ssh
80/tcp open http
113/tcp closed ident
Host script results:
| ip-geolocation-geoplugin:
| 50.116.1.121 (0xdeadbeefcafe.com)
| coordinates (lat,lon): 39.489898681641,-74.47730255127
|_ state: New Jersey, United States
Nmap done: 1 IP address (1 host up) scanned in 8.71 seconds
参数--script ip-geolocation-*
告诉 Nmap 启动名称开头带有模式ip-geolocation-
的所有脚本。在撰写本文时,有三种地理定位脚本可用:ip-geolocation-geoplugin
、ip-geolocation-maxmind
和ip-geolocation-ipinfodb
。有时服务提供商不会返回特定 IP 地址的任何信息,因此建议您尝试并比较所有 IP 地址的结果。这些脚本返回的信息包括纬度和经度坐标、国家、州和城市(如果可用)。
请记住,ip-geolocation-geoplugin
脚本通过查询免费公共服务来工作。在使用此脚本之前,请考虑您需要做的查询量,因为许多公共服务对所允许的查询施加限制。
一个常见的误解是 IP 到地理定位服务提供了计算机或设备的 100%位置。定位精度在很大程度上取决于数据库,每个服务提供商可能使用了不同的数据收集方法。在解释这些 NSE 脚本的结果时请记住这一点。
如果您知道一个更好的 IP 地址提供商,请毫不犹豫地向nmap-dev
提交您自己的地理位置脚本。不要忘记记录脚本是否需要外部 API 或数据库。如果您没有为 Nmap 开发的经验,您可以将您的想法添加到位于的 NSE 脚本愿望列表中 https://secwiki.org/w/Nmap/Script_Ideas.
- 从 WHOIS 获取信息记录配方
- 检查主机是否存在已知的恶意活动配方
- 强制 DNS 记录配方
- 收集有效电子邮件账户配方
- 发现指向同一 IP 地址的主机名配方
- 匹配已知安全漏洞的服务配方
- 欺骗端口扫描配方的源 IP
- 第 8 章中使用 Zenmap配方生成网络拓扑图生成扫描报告
WHOIS记录通常包含注册人姓名和联系方式等重要数据。系统管理员多年来一直在使用 WHOIS,尽管有许多工具可用于查询此协议,但 Nmap 证明了它的价值,因为它能够处理 IP 范围和主机名列表。
此配方将向您展示如何使用 Nmap 检索 IP 地址或域名的 WHOIS 记录。
打开终端并输入以下命令:
$nmap --script whois <target>
输出将类似于以下内容:
$nmap --script whois scanme.nmap.org
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.10s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
80/tcp open http
646/tcp filtered ldp
9929/tcp open nping-echo
Host script results:
| whois: Record found at whois.arin.net
| netrange: 74.207.224.0 - 74.207.255.255
| netname: LINODE-US
| orgname: Linode
| orgid: LINOD
| country: US stateprov: NJ
|
| orgtechname: Linode Network Operations
|_orgtechemail: [email protected]
参数--script whois
告诉 Nmap 查询区域互联网注册中心 WHOIS 数据库,以获取给定目标的记录。此脚本使用 IANA 的分配数据选择 RIR,并在本地缓存结果。或者,您可以覆盖此行为,并选择要在参数whodb
中使用的服务提供商的顺序:
$nmap --script whois --script-args whois.whodb=arin+ripe+afrinic <target>
此脚本将按顺序查询 WHOIS 提供者列表,直到找到该记录或该记录的引用。若要忽略转诊记录,请使用值nofollow
*``` $nmap --script whois --script-args whois.whodb=nofollow
## 还有更多。。。
要在不启动端口扫描(`-sn`的情况下查询主机名列表(`-iL <input file>`)的 WHOIS 记录,请输入以下 Nmap 命令:
$ nmap -sn --script whois -v -iL hosts.txt
输出将类似于以下内容:
NSE: Loaded 1 scripts for scanning. NSE: Script Pre-scanning. Initiating Ping Scan at 14:20 Scanning 3 hosts [4 ports/host] Completed Ping Scan at 14:20, 0.16s elapsed (3 total hosts) Initiating Parallel DNS resolution of 3 hosts. at 14:20 Completed Parallel DNS resolution of 3 hosts. at 14:20, 0.20s elapsed NSE: Script scanning 2 hosts. Initiating NSE at 14:20 Completed NSE at 14:20, 1.13s elapsed Nmap scan report for scanme.nmap.org (74.207.244.221) Host is up (0.10s latency).
Host script results: | whois: Record found at whois.arin.net | netrange: 74.207.224.0 - 74.207.255.255 | netname: LINODE-US | orgname: Linode | orgid: LINOD | country: US stateprov: NJ | | orgtechname: Linode Network Operations |_orgtechemail: [email protected]
Nmap scan report for insecure.org (74.207.254.18) Host is up (0.099s latency). rDNS record for 74.207.254.18: web.insecure.org
Host script results: |_whois: See the result for 74.207.244.221.
NSE: Script scanning 74.207.254.18. Initiating NSE at 14:20 Completed NSE at 14:20, 0.00s elapsed Nmap scan report for nmap.org (74.207.254.18) Host is up (0.10s latency). rDNS record for 74.207.254.18: web.insecure.org
Host script results: |_whois: See the result for 74.207.244.221.
NSE: Script Post-scanning. Read data files from: /usr/local/bin/../share/nmap Nmap done: 3 IP addresses (3 hosts up) scanned in 1.96 seconds Raw packets sent: 12 (456B) | Rcvd: 3 (84B)
### 禁用缓存及其影响
有时,缓存的响应将优先于查询 WHOIS 服务,这可能会阻止 IP 地址分配的发现。要禁用缓存,可以将脚本参数`whodb`设置为`nocache`:
$ nmap -sn --script whois --script-args whois.whodb=nocache scanme.nmap.org
正如每一个免费服务,我们需要考虑的查询量,我们需要做,以避免达到每日限额,并得到禁止。
## 另见
* *地理定位 IP 地址*配方
* *检查主机是否存在已知的恶意活动*配方
* *强制 DNS 记录*配方
* *收集有效电子邮件账户*配方
* 主机操作系统的*指纹*配方
* *匹配已知安全漏洞的服务*配方
* *欺骗端口扫描*配方的源 IP
* [第 8 章](08.html "Chapter 8. Generating Scan Reports")中*使用 Zenmap*配方生成网络拓扑图*生成扫描报告*
# 检查主机是否存在已知的恶意活动
托管用户的系统管理员常常难以监控其服务器以防止恶意软件的传播。Nmap 允许我们通过**谷歌安全浏览**API 的帮助,系统地检查主机是否传播恶意软件或被用于网络钓鱼攻击。
该方法向系统管理员展示了如何检查主机是否被谷歌的安全浏览服务标记为用于网络钓鱼攻击或分发恶意软件。
## 准备好了吗
脚本`http-google-malware`依赖于谷歌的安全浏览服务,需要注册才能获得 API 密钥。在[注册 http://code.google.com/apis/safebrowsing/key_signup.html](http://code.google.com/apis/safebrowsing/key_signup.html) 。
## 怎么做。。。
打开您喜爱的终端并键入:
$nmap -p80 --script http-google-malware --script-args http-google-malware.api=
该脚本将返回一条消息,指示谷歌的安全浏览是否知道该服务器在分发恶意软件或用于网络钓鱼攻击。
Nmap scan report for mertsssooopa.in (203.170.193.102) Host is up (0.60s latency). PORT STATE SERVICE 80/tcp open http |_http-google-malware: Host is known for distributing malware.
## 它是如何工作的。。。
脚本`http-google-malware`查询谷歌安全浏览服务,以确定主机是否被怀疑是恶意的。Mozilla Firefox 和 Google Chrome 等网络浏览器使用该服务来保护其用户,并且列表更新非常频繁。
输出结果如下:
NSE: Loaded 1 scripts for scanning. NSE: Script Pre-scanning. Initiating Ping Scan at 12:28 Scanning scanme.nmap.org (74.207.244.221) [4 ports] Completed Ping Scan at 12:28, 0.21s elapsed (1 total hosts) Initiating Parallel DNS resolution of 1 host. at 12:28 Completed Parallel DNS resolution of 1 host. at 12:28, 0.19s elapsed Initiating SYN Stealth Scan at 12:28 Scanning scanme.nmap.org (74.207.244.221) [1 port] Discovered open port 80/tcp on 74.207.244.221 Completed SYN Stealth Scan at 12:29, 0.26s elapsed (1 total ports) NSE: Script scanning 74.207.244.221. Initiating NSE at 12:29 Completed NSE at 12:29, 0.77s elapsed Nmap scan report for scanme.nmap.org (74.207.244.221) Host is up (0.15s latency). PORT STATE SERVICE 80/tcp open http |_http-google-malware: Host is safe to browse.
## 还有更多。。。
如果不希望每次启动此脚本时都使用`http-google-malware.api`参数,可以编辑`http-google-malware.nse`文件并将 API 密钥硬编码到脚本中。查找以下部分并将您的密钥存储在变量`APIKEY`中:
---######################### --ENTER YOUR API KEY HERE # ---######################### local APIKEY = "" ---#########################
有关完整的文件,请访问[http://nmap.org/nsedoc/scripts/http-google-malware.html](http://nmap.org/nsedoc/scripts/ http-google-malware.html) 。
## 另见
* *地理定位 IP 地址*配方
* *从 WHOIS 获取信息记录*配方
* *发现指向同一 IP 地址的主机名*配方
* *匹配已知安全漏洞的服务*配方
* *欺骗端口扫描*配方的源 IP
* *强制 DNS 记录*配方
* *发现 UDP 服务*配方
* [第 8 章](08.html "Chapter 8. Generating Scan Reports")中*使用 Zenmap*配方生成网络拓扑图*生成扫描报告*
# 正在收集有效的电子邮件帐户
有效的电子邮件帐户对于渗透测试人员来说非常方便,因为它们可以用于利用钓鱼攻击中的信任关系、邮件服务器的暴力密码审计,以及许多 IT 系统中的用户名。
此配方说明了如何使用 Nmap 获取有效的公共电子邮件帐户列表。
## 准备好了吗
脚本`http-google-email`未包含在 Nmap 的官方存储库中。所以你需要从[下载 http://seclists.org/nmap-dev/2011/q3/att-401/http-google-email.nse](http://seclists.org/nmap-dev/2011/q3/att-401/ http-google-email.nse ) 并将其复制到本地脚本目录。复制`http-google-email.nse`后,应使用以下内容更新脚本数据库:
#nmap --script-updatedb
## 怎么做。。。
打开您喜爱的终端并键入:
$nmap -p80 --script http-google-email,http-email-harvest
您应该会看到类似于以下输出的内容:
Nmap scan report for insecure.org (74.207.254.18) Host is up (0.099s latency). rDNS record for 74.207.254.18: web.insecure.org PORT STATE SERVICE 80/tcp open http | http-google-email: |[email protected] | http-email-harvest: | Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=insecure.org | [email protected] | [email protected] | [email protected] | [email protected] | [email protected] | [email protected] | [email protected]
## 它是如何工作的。。。
Nmap 脚本引擎允许渗透测试人员通过两种方式收集电子邮件:
* Shinook 的`http-google-email`脚本使用 Google Web 和 Google Groups 搜索来查找属于给定域的公共电子邮件帐户。
* Pattrik Karlsson 的`http-email-harvest`对给定的 web 服务器进行爬虫,并提取找到的所有电子邮件地址。
参数`-p80 --script http-google-email,http-email-harvest`将端口扫描限制为端口 80,并启动前面提到的脚本,以尝试收集尽可能多的有效电子邮件帐户。
## 还有更多。。。
脚本`http-email-harvest`依赖于`httpspider`库,该库高度可定制。例如,要允许爬行器抓取其他页面,请使用参数`httpspider.maxpagecount`:
$nmap -p80 --script http-email-harvest --script-args httpspider.maxpagecount=50
要从与根文件夹不同的页面开始爬网,请使用参数`httpspider.url`:
$nmap -p80 --script http-email-harvest --script-args httpspider.url=/welcome.php
该图书馆的官方文件可在[找到 http://nmap.org/nsedoc/lib/httpspider.html#script-args](http://nmap.org/nsedoc/lib/httpspider.html#script-args)。
对于`http-google-email`、有几个值得了解的论点:
* 您可以使用脚本参数`domain`*指定要查找的域名。*
```
$ nmap -p80 --script http-google-email --script-args domain=insecure.org scanme.nmap.org
```
* 通过使用脚本参数`pages`增加页面结果的数量,您可能会得到额外的结果:
```
# nmap -p80 --script http-google-email --script-args pages=10 scanme.nmap.org
```
### NSE 脚本参数
标志`--script-args`用于设置 NSE 脚本的参数。例如,如果要设置 HTTP 库参数`useragent`,请使用以下命令:
nmap -sV --script http-title --script-args http.useragent="Mozilla 999"
在设置 NSE 脚本的参数时,也可以使用别名。使用:
$nmap -p80 --script http-trace --script-args path
而不是:
$nmap -p80 --script http-trace --script-args http-trace.path
### HTTP 用户代理
有一些包过滤产品可以阻止使用 Nmap 的默认 HTTP 用户代理发出的请求。您可以通过设置参数`http.useragent`来设置不同的 HTTP UserAgent:
$nmap -p80 --script http-email-harvest --script-args http.useragent="Mozilla 42"
## 另见
* [第 2 章](02.html "Chapter 2. Network Exploration")*网络探索*中的*用额外随机数据*秘方隐藏我们的流量
* *地理定位 IP 地址*配方
* *从 WHOIS 获取信息记录*配方
* 主机操作系统的*指纹*配方
* *发现指向同一 IP 地址的主机名*配方
* *检查主机是否存在已知的恶意活动*配方
* *强制 DNS 记录*配方
# 发现指向同一 IP 地址的主机名
Web 服务器根据 HTTP 请求中使用的主机名返回不同的内容。通过发现新主机名,渗透测试人员可以访问使用服务器 IP 无法访问的新目标 web 应用程序。
此配方显示如何枚举指向同一 IP 的所有主机名,以便发现新目标。
## 准备好了吗
脚本`hostmap`依赖外部服务,官方版本仅支持 BFK 的 DNS 记录器。根据我的经验,这项服务对流行的服务器非常有效,但对其他服务器却没有这么多。出于这个原因,我创建了自己的`hostmap.nse`版本,添加了一个新的服务提供商:[ip2hosts.com。](http://ip2hosts.com.)该服务使用 Bing 的搜索 API,并经常返回 BFK 记录中没有的其他记录。
通过 Bing 支持下载`hostmap.nse`[https://secwiki.org/w/Nmap/External_Script_Library](https://secwiki.org/w/Nmap/External_Script_Library) 。
将脚本复制到本地脚本目录后,通过运行以下命令更新脚本数据库:
#nmap --script-updatedb
## 怎么做。。。
打开终端并输入以下命令:
$nmap -p80 --script hostmap nmap.org
输出将类似于以下内容:
$nmap -p80 --script hostmap nmap.org Nmap scan report for nmap.org (74.207.254.18) Host is up (0.11s latency). rDNS record for 74.207.254.18: web.insecure.org PORT STATE SERVICE 80/tcp open http
Host script results: | hostmap: | sectools.org | nmap.org | insecure.org | seclists.org |_secwiki.org
## 它是如何工作的。。。
参数`--script hostmap -p80`告诉 Nmap 启动 HTTP 脚本 hostmap,并将端口扫描限制为端口 80 以加速此任务。
此版本的`hostmap.nse`查询两个不同的 web 服务:BFK 的 DNS 记录器和[ip2hosts.com](http://ip2hosts.com)。BFK 的 DNS Logger 是一个从公共 DNS 数据收集信息的免费服务,[ip2hosts.com](http://ip2hosts.com)是我自己维护的基于 Bing 搜索 API 的 web 服务。它基本上启动了 Bing 搜索,使用关键词“ip:<目标 ip>”提取已知主机名列表。
这两项服务都是免费的,滥用它们很可能会让你被禁止使用这项服务。
## 还有更多。。。
您可以通过设置参数`hostmap.provider`来指定服务提供商:
$nmap -p80 --script hostmap --script-args hostmap.provider=BING $nmap -p80 --script hostmap --script-args hostmap.provider=BFK $nmap -p80 --script hostmap --script-args hostmap.provider=ALL
要为每个扫描的 IP 保存主机名列表,请使用参数`hostmap.prefix`。设置此参数将在您的工作目录中创建一个文件名为`<prefix><target>`的文件:
$nmap -p80 --script hostmap --script-args hostmap.prefix=HOSTSFILE
## 另见
* [第二章](02.html "Chapter 2. Network Exploration")*网络探索*中*用广播脚本*配方收集网络信息
* *地理定位 IP 地址*配方
* *从 WHOIS 获取信息记录*配方
* *收集有效电子邮件账户*配方
* *检查主机是否存在已知的恶意活动*配方
* 远程主机配方支持的*列表协议*
* *强制 DNS 记录*配方
# 强制 DNS 记录
DNS 记录保存了数量惊人的主机信息。通过暴力强迫他们,我们可以发现更多的目标。此外,DNS 条目通常会泄露信息,例如“邮件”表示我们显然在处理邮件服务器,或 Cloudflare 的默认 DNS 条目“direct”,大多数情况下,该条目将指向他们试图保护的 IP。
此配方显示了如何使用 Nmap 强制 DNS 记录。
## 怎么做。。。
打开终端并键入:
#nmap --script dns-brute
如果成功,结果应包括找到的 DNS 记录列表:
Nmap scan report for host.com (XXX.XXX.XXX.XXX) Host is up (0.092s latency). Other addresses for host.com (not scanned): YYY.YY.YYY.YY ZZ.ZZZ.ZZZ.ZZ Not shown: 998 filtered ports PORT STATE SERVICE 80/tcp open http 443/tcp open https
Host script results: | dns-brute: | DNS Brute-force hostnames | www.host.com – AAA.AA.AAA.AAA | www.host.com – BB.BBB.BBB.BBB | www.host.com – CCC.CCC.CCC.CC | www.host.com – DDD.DDD.DDD.D | mail.host.com – EEE.AA.EEE.AA | ns1.host.com – AAA.EEE.AAA.EEE | ns1.host.com – ZZZ.III.ZZZ.III | ns2.host.com – ZZZ.III.XXX.XX | direct.host.com – YYY.YY.YYY.YY |_ ftp.host.com – ZZZ.ZZZ.ZZZ.ZZ
## 它是如何工作的。。。
参数`--script dns-brute`启动 NSE 脚本`dns-brute`。
`dns-brute`是由 Cirrus 开发的,它试图通过强制目标的 DNS 记录来发现新的主机名。脚本基本上遍历主机名列表,检查 DNS 条目是否存在以查找有效记录。
这种暴力攻击很容易通过安全机制监控域响应来检测。
## 还有更多。。。
`dns-brute`使用的默认字典在本地脚本文件夹`/scripts/dns-brute.nse`中的 NSE 文件中硬编码。要使用自己的字典文件,请使用参数`dns-brute.hostlist`:
$nmap --script dns-brute --script-args dns-brute.hostlist=words.txt
要设置线程数,请使用参数`dns-brute.threads`:
$nmap --script dns-brute --script-args dns-brute.threads=8
您可以使用`--dns-servers <serv1[,serv2],...>`设置不同的 DNS 服务器:
$ nmap --dns-servers 8.8.8.8,8.8.4.4 scanme.nmap.org
### 目标库
参数`--script-args=newtargets`强制 Nmap 使用找到的新主机作为目标:
#nmap --script dns-brute --script-args newtargets
输出将类似于以下内容:
$nmap -sP --script dns-brute --script-args newtargets host.com
Nmap scan report for host.com () Host is up (0.089s latency). Other addresses for host.com (not scanned): rDNS record for : .cloudflare.com
Host script results: | dns-brute: | DNS Brute-force hostnames | www.host.com - | www.host.com - | www.host.com - | www.host.com - | mail.host.com - | ns1.host.com - | ns1.host.com - | ns2.host.com - | ftp.host.com - |_ direct.host.com -
Nmap scan report for mail.host.com () Host is up (0.17s latency).
Nmap scan report for ns1.host.com () Host is up (0.17s latency). Other addresses for ns1.host.com (not scanned):
Nmap scan report for ns2.host.com () Host is up (0.17s latency).
Nmap scan report for direct.host.com () Host is up (0.17s latency).
Nmap done: 7 IP addresses (6 hosts up) scanned in 21.85 seconds
请注意,我们在启动扫描时仅指定了一个目标,但`newtargets`*参数向扫描队列添加了新的 IP。*
*参数`max-newtargets`设置允许添加到扫描队列的最大主机数:
#nmap --script dns-brute --script-args max-newtargets=3
## 另见
* [第一章](01.html "Chapter 1. Nmap Fundamentals")*Nmap 基础*中远程主机配方的*指纹服务*
* *地理定位 IP 地址*配方
* *收集有效电子邮件地址*配方
* *从 WHOIS 获取信息记录*配方
* *发现指向同一 IP 地址的主机名*配方
* *欺骗端口扫描*配方的源 IP
* *发现 UDP 服务*配方
# 对主机操作系统进行指纹识别
确定主机的操作系统对于每个渗透测试人员来说都是至关重要的,原因有很多,包括列出可能的安全漏洞、确定可用的系统调用以设置特定的利用漏洞有效负载,以及许多其他依赖于操作系统的任务。Nmap 以拥有最全面的操作系统指纹数据库和功能而闻名。
此配方显示了如何使用 Nmap 对远程主机的操作系统进行指纹识别。
## 怎么做。。。
打开终端并输入以下内容:
#nmap -O
输出将类似于以下内容:
Nmap scan report for scanme.nmap.org (74.207.244.221) Host is up (0.12s latency). Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp filtered smtp 80/tcp open http 646/tcp filtered ldp 9929/tcp open nping-echo Device type: general purpose Running (JUST GUESSING): Linux 2.6.X (87%) OS CPE: cpe:/o:linux:kernel:2.6.38 Aggressive OS guesses: Linux 2.6.38 (87%), Linux 2.6.34 (87%), Linux 2.6.39 (85%) No exact OS matches for host (test conditions non-ideal). Network Distance: 8 hops
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 17.69 seconds
## 它是如何工作的。。。
选项`-O`告知 Nmap 启用操作系统检测。Nmap 的操作系统检测功能非常强大,因为它的用户社区不断提供指纹,用于识别各种系统,包括住宅路由器、IP 网络摄像头、操作系统和许多其他硬件设备。
Nmap 进行了多项测试,试图确定目标的操作系统。完整的文件可在[中找到 http://nmap.org/book/osdetect-methods.html](http://nmap.org/book/osdetect-methods.html) 。
操作系统检测需要原始数据包,而 Nmap 需要足够的权限来创建这些数据包。
## 还有更多。。。
Nmap 使用**CPE**(**公共平台枚举**作为服务和操作系统检测的命名方案。此约定在信息安全行业中用于标识软件包、平台和系统。
如果操作系统检测失败,您可以使用参数`--osscan-guess`尝试猜测操作系统:
#nmap -O -p- --osscan-guess
要仅在扫描条件理想时启动操作系统检测,请使用参数`--osscan-limit`:
#nmap -O --osscan-limit
### 详细模式下的操作系统检测
在详细模式下尝试操作系统检测以查看其他主机信息,例如用于空闲扫描的 IP ID 序列号:
#nmap -O -v
### 提交新的操作系统指纹
Nmap 将让您知道何时可以通过提交未经识别的操作系统或设备来为项目做出贡献。
我鼓励您对此项目做出贡献,因为 Nmap 的检测功能直接来自其数据库。请访问[http://insecure.org/cgi-bin/submit.cgi?new-os](http://insecure.org/cgi-bin/submit.cgi?new-os)提交新指纹。
## 另见
* *在[第 1 章](01.html "Chapter 1. Nmap Fundamentals")*Nmap 基础*中列出了远程主机上打开的端口*配方
* 远程主机的*指纹服务*配方[第一章](01.html "Chapter 1. Nmap Fundamentals")*Nmap 基础*
* *扫描 IPv6 地址*配方[第二章](02.html "Chapter 2. Network Exploration")*网络探索*
* 远程主机配方支持的*列表协议*
* *匹配已知安全漏洞的服务*配方
* *欺骗端口扫描*配方的源 IP
* *强制 DNS 记录*配方
* *使用 TCP ACK 扫描*方法发现有状态防火墙
* *发现 UDP 服务*配方
# 发现 UDP 服务
UDP 服务通常在渗透测试期间被忽略,但优秀的渗透测试人员知道,它们经常泄露重要的主机信息,甚至可能容易受到攻击并被用来危害主机。
此配方显示如何使用 Nmap 列出主机上所有打开的 UDP 端口。
## 怎么做。。。
打开终端并键入:
#nmap -sU -p-
输出遵循 Nmap 的标准格式:
Nmap scan report for scanme.nmap.org (74.207.244.221) Host is up (0.100s latency). Not shown: 98 closed ports PORT STATE SERVICE 68/udp open|filtered dhcpc 123/udp open ntp
## 它是如何工作的。。。
参数`-sU`告诉 Nmap 对目标主机启动*UDP 扫描*。Nmap 将 UDP 探测发送到所选端口,并分析响应以确定端口的状态。Nmap 的*UDP 扫描技术*的工作方式如下:
1. 除非在文件`nmap-payloads`中指定了 UDP 数据包,否则 UDP 数据包将以空 UDP 有效负载发送到目标。
2. 如果端口关闭,则从目标接收到 ICMP 端口不可访问消息。
3. 如果端口打开,将接收 UDP 数据。
4. 如果端口根本没有响应,我们假设端口状态为`filtered|open`。
## 还有更多。。。
由于操作系统限制每秒响应的数量,因此 UDP 扫描速度较慢。此外,阻止 ICMP 的防火墙主机将丢弃端口无法访问的消息。这使得 Nmap 很难区分封闭端口和过滤端口,并导致重新传输,使这种扫描技术更加缓慢。重要的是,如果你需要对 UDP 服务进行清查并处于严格的时间表,你必须事先考虑这一点。
### 端口选择
由于 UDP 扫描可能非常慢,建议您使用标志`-p`进行端口选择:
#nmap -p1-500 -sU
别名`-F`也可用于快速端口扫描:
#nmap -F -sU
## 另见
* [第一章](01.html "Chapter 1. Nmap Fundamentals")*Nmap 基础*中远程主机配方的*指纹服务*
* *从 WHOIS 获取信息记录*配方
* 主机操作系统的*指纹*配方
* *发现指向同一 IP 地址的主机名*配方
* 远程主机配方支持的*列表协议*
* *匹配已知安全漏洞的服务*配方
* *欺骗端口扫描*配方的源 IP
* *强制 DNS 记录*配方
# 列出远程主机支持的协议
**IP 协议扫描**有助于确定主机正在使用哪些通信协议。这些信息有不同的用途,包括包过滤测试和远程操作系统指纹识别。
此配方显示如何使用 Nmap 枚举主机支持的所有 IP 协议。
## 怎么做。。。
打开终端并键入以下命令:
$nmap -sO
结果将显示支持哪些协议及其状态。
Nmap scan report for 192.168.1.254 Host is up (0.0021s latency). Not shown: 253 open|filtered protocols PROTOCOL STATE SERVICE 1 open icmp 6 open tcp 132 closed sctp MAC Address: 5C:4C:A9:F2:DC:7C (Huawei Device Co.)
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
## 它是如何工作的。。。
标记`-sO`告知 Nmap 执行 IP 协议扫描。这种类型的扫描会迭代文件`nmap-protocols`中的协议,并为每个条目创建 IP 数据包。对于 IP 协议 TCP、ICMP、UDP、IGMP 和 SCTP,Nmap 将设置有效的报头值,但对于其余协议,将使用空 IP 数据包。
为了确定协议状态,Nmap 对接收到的不同响应进行分类,如下所示:
* 如果接收到 ICMP 协议不可访问错误类型 3 代码 2,则该协议标记为关闭
* ICMP 不可访问错误类型 3 代码 1、3、9、10 或 13 表示已筛选协议
* 如果未收到响应,则协议标记为`filtered|open`
* 任何其他响应将导致协议标记为已打开
## 还有更多。。。
要指定应该扫描哪些协议,我们可以设置参数`-p`:
$nmap -p1,3,5 -sO $nmap -p1-10 -sO
### 定制 IP 协议扫描
包含 IP 协议列表的文件名为`nmap-protocols`,位于 Nmap 安装的根文件夹中。要添加新的 IP 协议,只需将其条目添加到此文件:
#echo "hip 139 #Host Identity Protocol" >> /usr/local/share/nmap/nmap-protocols
## 另见
* 主机操作系统的*指纹*配方
* *发现指向同一 IP 地址的主机名*配方
* *匹配已知安全漏洞的服务*配方
* *欺骗端口扫描*配方的源 IP
* *强制 DNS 记录*配方
* *使用 TCP ACK**扫描*配方发现有状态防火墙
* *发现 UDP 服务*配方
# 使用 TCP ACK 扫描发现有状态防火墙
**TCP ACK 扫描技术**使用标记为 ACK on 的数据包来尝试确定端口是否被过滤。当检查保护主机的防火墙是有状态的还是无状态的时,这种技术非常方便。
此配方显示如何使用 Nmap 执行 TCP ACK 端口扫描。
## 怎么做。。。
打开终端并键入以下命令:
#nmap -sA
输出遵循标准端口格式:
Nmap scan report for 192.168.1.254 Host is up (0.024s latency). All 1000 scanned ports on 192.168.1.254 are unfiltered MAC Address: 5C:4C:A9:F2:DC:7C (Huawei Device Co.)
## 它是如何工作的。。。
参数`-sA`告诉 Nmap 对目标主机启动*TCP ACK 端口扫描*。TCP ACK 端口扫描技术的工作方式如下:
1. 带有 ACK 标志的数据包被发送到每个选定端口。
2. 如果端口打开或关闭,目标机器将发送 RST 数据包。此响应还表示目标主机不在有状态防火墙后面。
3. 如果主机未返回响应或返回 ICMP 错误消息,则可以确定主机已防火墙。
## 还有更多。。。
请务必记住,此技术不会区分开放端口和闭合端口。它主要用于识别保护主机的包过滤系统。
此扫描技术可与 Nmap 选项`--badsum`相结合,以提高检测防火墙或 IP 的概率。未正确计算校验和的数据包过滤系统将返回 ICMP 目的地不可访问错误,从而泄露它们的存在。
对于所有可能的 TCP 端口,可以使用标志`-p`、`-p[1-65535]`或`-p-`设置端口范围:
$nmap -sA -p80 $nmap -sA -p1-100 $nmap -sA -p-
### 港口国
Nmap 使用以下状态对端口进行分类:
* `Open`:表示应用程序正在侦听此端口上的连接。
* `Closed`:表示已接收探头,但此端口上没有应用程序监听。
* `Filtered`:表示未收到探头,无法建立状态。这也表明探针被某种过滤掉了。
* `Unfiltered`:表示已接收探头,但无法建立状态。
* `Open/Filtered`:表示 Nmap 无法确定端口是否已过滤或打开。
* `Closed/Filtered`:表示 Nmap 无法确定端口是否已过滤或关闭。
## 另见
* 宿主配方操作系统的*指纹图谱*
* *发现指向同一 IP 地址的主机名*配方
* *检查主机是否存在已知的恶意活动*配方
* 远程主机配方支持的*列表协议*
* *匹配已知安全漏洞的服务*配方
* *欺骗端口扫描*配方的源 IP
* *强制 DNS 记录*配方
* *发现 UDP 服务*配方
# 将服务与已知安全漏洞进行匹配
版本发现对于 pen 测试人员至关重要,因为他们可以使用此信息查找影响扫描服务的公共安全漏洞。Nmap 脚本引擎允许我们将流行的 OSVDB 漏洞数据库与扫描中发现的服务进行匹配。
此方法显示如何列出`osvdb`数据库中可能影响使用 Nmap 发现的服务的已知安全漏洞。
## 准备好了吗
为了完成这项任务,我们使用 Marc Ruef 开发的 NSE 脚本`vulscan`。此脚本未包含在官方 Nmap 存储库中,因此您需要在继续之前单独安装它。
要安装,请从[下载`vulscan`的最新版本 http://www.computec.ch/mruef/?s=software &l=e](http://www.computec.ch/mruef/?s=software&l=e)。
解压缩文件后,将脚本`vulscan.nse`复制到本地脚本文件夹`($NMAP_INSTALLATION/scripts/`中。然后在同一目录中创建一个名为`vulscan`的文件夹,并将`osvdb`数据库文件`object_products.txt`、`object_correlations.txt`、`object_links.txt`和`vulnerabilities.txt`放入其中。
要更新脚本数据库,请运行以下命令:
#nmap --script-updatedb
## 怎么做。。。
打开终端并输入以下命令:
#nmap -sV --script vulscan
脚本`vulscan`将在发现每个服务后包含匹配记录:
Nmap scan report for meil.0xdeadbeefcafe.com (106.187.35.219) Host is up (0.20s latency). Not shown: 995 filtered ports PORT STATE SERVICE VERSION 22/tcp closed ssh 80/tcp closed http 113/tcp closed ident 465/tcp open ssl/smtp Postfix smtpd | vulscan: [1991] Postfix SMTP Log DoS | [6551] Postfix Bounce Scan / Packet Amplification DDoS | [10544] Postfix Malformed Envelope Address nqmgr DoS | [10545] Postfix Multiple Mail Header SMTP listener DoS | [13470] Postfix IPv6 Patch if_inet6 Failure Arbitrary Mail Relay | [47658] Postfix Hardlink to Symlink Mailspool Arbitrary Content Append | [47659] Postfix Cross-user Filename Local Mail Interception | [48108] Postfix epoll File Descriptor Leak Local DoS | [74515] Dovecot script-login chroot Configuration Setting Traversal Arbitrary File Access
## 它是如何工作的。。。
在前面的命令中,标志`-sV`启用服务检测,参数`--script vulscan`启动 NSE 脚本`vulscan`。
网站[osvdb.org](http://osvdb.org)是由 HD Moore 和 Forrest Rae 创建的开源漏洞数据库。脚本`vulscan`解析每个服务名称和版本,并将其与[osvdb.org](http://osvdb.org)上的`vulnerability`数据库的本地副本进行比较。
这种方法还远远不够完善,因为`vulscan`的名称匹配仍然存在一些缺陷,而且我们还依赖于 Nmap 的版本检测。但是,定位可能影响扫描服务的公共漏洞仍然非常有用。
## 还有更多。。。
要更新`osvdb`数据库的本地副本,请访问[osvdb.org](http://osvdb.org),获取最新的 CSV 导出并替换`/scripts/vulscan/`中的文件。
## 另见
* 主机操作系统的*指纹*配方
* *收集有效电子邮件账户*配方
* *发现指向同一 IP 地址的主机名*配方
* *列出了远程主机*配方支持的协议
* *欺骗端口扫描*配方的源 IP
* *强制 DNS 记录*配方
* *发现 UDP 服务*配方
# 欺骗端口扫描的源 IP
*空闲扫描*是一项非常强大的技术,Nmap 利用具有可预测 IP ID 序列号的空闲主机欺骗端口扫描的原始 IP。
此配方说明了如何查找僵尸主机,并在使用 Nmap 扫描远程主机时使用它们欺骗您的 IP 地址。
## 准备好了吗
要启动空闲扫描,我们需要一个*僵尸主机*。僵尸主机是具有可预测的 IP ID 序列号的机器,该序列号将用作伪造的 IP 地址。好的候选者不得与其他主机通信,以保持正确的 IP ID 序列号并避免误报。
要查找具有增量 IP ID 序列的主机,可以使用脚本`ipidseq`,如下所示:
#nmap -p80 --script ipidseq /24 #nmap -p80 --script ipidseq -iR 1000
可能的候选者将在脚本的输出部分返回文本`Incremental`:
Host is up (0.28s latency). PORT STATE SERVICE 80/tcp open http
Host script results: |_ipidseq: Incremental!
## 怎么做。。。
要启动空闲扫描,请打开终端并键入以下命令:
#nmap -Pn -sI
输出将类似于以下内容:
Idle scan using zombie 93.88.107.55 (93.88.107.55:80); Class: Incremental Nmap scan report for meil.0xdeadbeefcafe.com (106.187.35.219) Host is up (0.67s latency). Not shown: 98 closed|filtered ports PORT STATE SERVICE 465/tcp open smtps 993/tcp open imaps
如果僵尸主机满足前面讨论的要求,空闲扫描应该可以工作。如果某项操作未按预期工作,则返回的错误消息应能让您了解出了什么问题:
Idle scan zombie XXX.XXX.XX.XX (XXX.XXX.XX.XX) port 80 cannot be used because it has not returned any of our probes -- perhaps it is down or firewalled. QUITTING! Idle scan zombie 0xdeadbeefcafe.com (50.116.1.121) port 80 cannot be used because IP ID sequencability class is: All zeros. Try another proxy. QUITTING!
## 它是如何工作的。。。
闲置扫描最初是由 Salvatore Sanfilipo(《T0》)的作者于 1998 年发现的。这是一种聪明且非常隐蔽的扫描技术,通过伪造数据包和分析空闲主机(通常称为僵尸主机)的 IP ID 序列号来欺骗源 IP。
标记`-sI <zombie>`用于通知 Nmap 使用`<zombie>`作为源 IP 启动空闲端口扫描。空闲扫描的工作方式如下:
1. Nmap 确定僵尸主机的 IP ID 序列。
2. Nmap 向目标发送伪造的 SYN 数据包,就像它是由僵尸主机发送的一样。
3. 如果端口打开,目标向僵尸主机发送 SYN/ACK 数据包并增加其 IP ID 序列号。
4. Nmap 分析僵尸 IP ID 序列号的增量,以了解是否从目标接收到 SYN/ACK 数据包,并确定端口状态。
## 还有更多。。。
与僵尸机器通信的其他主机会增加其 IP ID 序列号,从而导致扫描中出现误报。因此,此技术仅在僵尸主机空闲时有效。因此,做出正确的选择至关重要。
同样重要的是,您要了解您的 ISP 是否没有主动过滤伪造的数据包。如今,许多 ISP 阻止甚至修改伪造的数据包,用真实的 IP 地址替换伪造的地址,这使得这种技术毫无用处,因为目标将接收到真实的 IP 地址。不幸的是,Nmap 无法检测到这种情况,这可能会导致您认为您正在扫描一台主机,而实际上您的所有数据包都在发送您的真实 IP 地址。
### IP ID 序列号
IP 报头中的 ID 字段主要用于跟踪用于重新组装的数据包,但由于许多系统以不同的方式实现此数字,因此安全爱好者使用它来对这些系统进行指纹识别、分析和收集信息。
家庭路由器、打印机、IP 网络摄像头和原语通常使用递增的 IP ID 序列号,它们非常适合用作僵尸主机。它们也往往在大多数时间处于空闲状态,这是空闲扫描的一个重要要求。要了解主机是否具有增量 IP ID 序列,有两个选项:
* 在操作系统检测中使用详细模式。
```
#nmap -sV -v -O <target>
```
* 使用克里斯·卡特乔恩的`ipidseq`NSE 脚本。
```
$nmap -p80 --script ipidseq <target>
```
## 另见
* 主机操作系统的*指纹*配方
* *发现指向同一 IP 地址的主机名*配方
* *检查主机是否存在已知的恶意活动*配方
* 远程主机配方支持的*列表协议*
* *匹配已知安全漏洞的服务*配方
* *强制 DNS 记录*配方
* *通过 TCP ACK 扫描发现有状态防火墙*配方**