NMAP6-网络探索和安全审计秘籍-三-

68 阅读39分钟

NMAP6 网络探索和安全审计秘籍(三)

原文:annas-archive.org/md5/0DC464DD8E91DC475CC40B74E4774B2B

译者:飞龙

协议:CC BY-NC-SA 4.0

第五章:审计数据库

注意

本章向您展示了如何执行在许多情况下可能是非法、不道德、违反服务条款或不明智的一些操作。这里提供这些信息是为了让您了解如何保护自己免受威胁,并使自己的系统更加安全。在遵循这些说明之前,请确保您站在法律和道德的一边...运用您的力量为善!

在本章中,我们将涵盖:

  • 列出 MySQL 数据库

  • 列出 MySQL 用户

  • 列出 MySQL 变量

  • 在 MySQL 服务器中查找空密码的 root 帐户

  • 暴力破解 MySQL 密码

  • 检测 MySQL 服务器中的不安全配置

  • 暴力破解 Oracle 密码

  • 暴力破解 Oracle SID 名称

  • 检索 MS SQL 服务器信息

  • 暴力破解 MS SQL 密码

  • 转储 MS SQL 服务器的密码哈希

  • 在 MS SQL 服务器上通过命令行运行命令

  • 在 MS SQL 服务器上查找具有空密码的 sysadmin 帐户

  • 列出 MongoDB 数据库

  • 检索 MongoDB 服务器信息

  • 列出 CouchDB 数据库

  • 检索 CouchDB 数据库统计信息

介绍

Web 应用程序必须存储不同类型的信息。根据情况,可能需要存储数百万条记录,并且这就是数据库的用武之地。数据库服务器至关重要,因为它们提供了一种方便的管理信息的方式,并且几乎可以为任何语言和数据库类型提供编程 API。

Nmap NSE 已经为许多数据库服务器添加了支持。系统管理员会发现,借助 Nmap,我们可以自动化处理与一堆数据库服务器打交道时的几项任务,例如运行查询以通知我们有关状态。另一方面,谨慎地保护数据库服务器必须小心进行,并且与保护 Web 服务器一样重要。Nmap 还通过支持自动化操作(例如检查空的 root 密码和不安全配置)来帮助我们。

本章涵盖了最常见的关系数据库(如 MySQL、MS SQL 和 Oracle)和nosql数据库(如 CouchDB 和 MongoDB)的不同 NSE 脚本。我们首先介绍了一些简单的任务,如检索状态信息和列出数据库、表和实例。我们还涵盖了暴力破解密码审核,因为在渗透测试评估期间,在数据库中找到弱密码或在某些情况下根本没有密码是常见的。在本章中,我还谈到了一个我最喜欢的 NSE 脚本,该脚本是使用 CIS MySQL 安全基准的部分编写的,用于审计不安全配置。在本章之后,我希望您能学会如何使用这些强大的 NSE 脚本来实施不同的安全和完整性检查,以保护您的基础设施。

列出 MySQL 数据库

MySQL 服务器可能包含多个数据库。作为具有合法访问权限的系统管理员或刚刚攻破服务器的渗透测试人员,我们可以使用 Nmap 列出可用的数据库。

此配方教您如何使用 Nmap NSE 列出 MySQL 服务器中的数据库。

如何做...

打开终端并输入以下命令:

$ nmap -p3306 --script mysql-databases --script-args mysqluser=<user>,mysqlpass=<password> <target>

数据库应该在脚本结果下列出。

3306/tcp open  mysql
| mysql-databases: 
|   information_schema
|   temp
|   websec
|   ids
|_  crm

工作原理...

使用参数-p3306 --script mysql-databases --script-args mysqluser=<user>,mysqlpass=<password>告诉 Nmap 尝试使用给定的凭据(--script-args mysqluser=<user>,mysqlpass=<password>)连接到 MySQL 服务器,并尝试列出服务器中所有可用的数据库。

脚本mysql-databases由 Patrik Karlsson 编写,以帮助 Nmap 用户枚举 MySQL 安装中的数据库。

还有更多...

如果找到空的 root 帐户,可以使用以下命令尝试枚举数据库:

# nmap -p3306 --script mysql-empty-password,mysql-databases <target> 

如果服务运行在 3306 以外的端口上,我们可以使用 Nmap 的服务检测(-sV),或使用参数-p手动设置端口。

# nmap -sV --script mysql-databases <target>$ nmap -p1111 –script mysql-databases <target>

另请参阅

  • 列出 MySQL 用户配方

  • 列出 MySQL 变量食谱

  • 在 MySQL 服务器中查找空密码的 root 账户食谱

  • 暴力破解 MySQL 密码食谱

  • 检测 MySQL 服务器中的不安全配置食谱

列出 MySQL 用户

MySQL 服务器支持对数据库的细粒度访问,这意味着单个安装中可能有多个用户。

此食谱展示了如何使用 Nmap 枚举 MySQL 服务器中的用户。

如何操作...

打开终端并输入以下命令:

$ nmap -p3306 --script mysql-users --script-args mysqluser=<user>,mysqlpass=<pass> <target>

用户名列表将包括在mysql-users部分中:

3306/tcp open  mysql
| mysql-users: 
|   root
|   crm
|   web
|_  admin 

工作原理...

参数-p3306 --script mysql-users --script-args mysqluser=<user>,mysqlpass=<pass>使 Nmap 在发现运行在 3306 端口上的 MySQL 服务器时启动脚本mysql-users

脚本mysql-users由 Patrik Karlsson 提交,它使用给定的认证凭据在 MySQL 服务器中枚举用户名。如果没有使用脚本参数mysqlusermysqlpass设置认证凭据,它将尝试使用mysql-brutemysql-empty-password的结果。

还有更多...

要枚举具有空密码的 root 账户的 MySQL 安装中的数据库和用户,请使用以下命令:

$ nmap -sV --script mysql-empty-password,mysql-databases,mysql-users <target>

如果 MySQL 服务器运行在 3306 端口之外,您可以使用 Nmap 的服务扫描,或者使用参数-p手动设置端口。

$ nmap -p3333 --script mysql-users <target>$ nmap -sV --script mysql-users <target>

另请参阅

  • 列出 MySQL 数据库食谱

  • 列出 MySQL 变量食谱

  • 在 MySQL 服务器中查找空密码的 root 账户食谱

  • 暴力破解 MySQL 密码食谱

  • 检测 MySQL 服务器中的不安全配置食谱

列出 MySQL 变量

MySQL 服务器有几个环境变量,系统管理员和 Web 开发人员以不同的方式使用。

此食谱向您展示了如何使用 Nmap 列出 MySQL 服务器中的环境变量。

如何操作...

打开终端并输入以下 Nmap 命令:

$ nmap -p3306 --script mysql-variables --script-args mysqluser=<root>,mysqlpass=<pass> <target>

MySQL 变量将在mysql-variables下列出:

3306/tcp open  mysql
| mysql-variables: 
|   auto_increment_increment: 1
|   auto_increment_offset: 1
|   automatic_sp_privileges: ON
|   back_log: 50
|   basedir: /usr/
|   binlog_cache_size: 32768
|   bulk_insert_buffer_size: 8388608
|   character_set_client: latin1
|   character_set_connection: latin1
|   character_set_database: latin1
|   .
|   .
|   .
|   version_comment: (Debian)
|   version_compile_machine: powerpc
|   version_compile_os: debian-linux-gnu
|_  wait_timeout: 28800

工作原理...

我们使用参数-p3306 --script mysql-variables --script-args mysqluser=<root>,mysqlpass=<pass>使 Nmap 在发现运行在 3306 端口上的 MySQL 服务器时启动脚本mysql-variables

脚本mysql-variables由 Patrik Karlsson 提交,它使用脚本参数mysqlusermysqlpass作为对 MySQL 服务器的认证凭据,尝试枚举系统变量。

还有更多...

如果 MySQL 服务器运行在 3306 端口之外,我们可以使用 Nmap 的服务检测或手动使用-p参数设置端口。

$ nmap -sV --script mysql-variables <target>$ nmap -p5555 --script mysql-variables <target>

要从具有空 root 密码的 MySQL 服务器中检索数据库、用户名和变量,请使用以下命令:

$ nmap -sV --script mysql-variables,mysql-empty-password,mysql-databases,mysql-users <target>

另请参阅

  • 列出 MySQL 数据库食谱

  • 列出 MySQL 用户食谱

  • 在 MySQL 服务器中查找空密码的 root 账户食谱

  • 暴力破解 MySQL 密码食谱

  • 检测 MySQL 服务器中的不安全配置食谱

在 MySQL 服务器中查找空密码的 root 账户

新系统管理员经常犯将 MySQL 服务器的 root 账户留空密码的错误。这是一个明显的安全漏洞,可能会被攻击者利用。渗透测试人员和系统管理员需要在坏人之前检测到这些易受攻击的安装。

此食谱将向您展示如何使用 Nmap 检查 MySQL 服务器上的空 root 密码。

如何操作...

打开终端并输入以下命令:

$ nmap -p3306 --script mysql-empty-password <target>

如果账户rootanonymous的密码为空,将在脚本结果中显示:

Nmap scan report for 127.0.0.1
Host is up (0.11s latency). 
3306/tcp open  mysql
| mysql-empty-password: 
|_  root account has empty password

工作原理...

参数-p3306 --script mysql-empty-password使 Nmap 在发现运行在 3306 端口上的 MySQL 服务器时启动 NSE 脚本mysql-empty-password

此脚本由 Patrik Karlsson 提交,它连接到 MySQL 服务器并尝试使用空密码的账户rootanonymous

还有更多...

要尝试自定义的用户名列表,您需要修改位于脚本目录中的 NSE 脚本mysql-empty-password.nse。在文件中找到以下行:

local users = {"", "root"}

并用您自己的用户名列表替换它,就像这样:

local users = {"plesk", "root","cpanel","test","db"}

只需保存并按照先前显示的方式运行它:

$ nmap -sV --script mysql-empty-password <target>
$ nmap -p3306 --script mysql-empty-password <target>

另请参阅

  • 列出 MySQL 数据库配方

  • 列出 MySQL 用户配方

  • 列出 MySQL 变量配方

  • 强制破解 MySQL 密码配方

  • 检测 MySQL 服务器中的不安全配置配方

强制破解 MySQL 密码

Web 服务器有时会返回数据库连接错误,这些错误会显示 Web 应用程序使用的 MySQL 用户名。渗透测试人员可以使用这些信息来执行暴力破解密码审计。

这个配方描述了如何使用 Nmap 对 MySQL 服务器进行字典攻击。

如何做...

要使用 Nmap 对 MySQL 服务器进行暴力破解密码审计,请使用以下命令:

$ nmap -p3306 --script mysql-brute <target>

如果找到有效的凭证,它们将包含在mysql-brute输出部分中:

3306/tcp open  mysql
| mysql-brute: 
|   root:<empty> => Valid credentials
|_  test:test => Valid credentials

它是如何工作的...

脚本mysql-brute是由 Patrik Karlsson 编写的,当审计 MySQL 服务器时非常有帮助。它执行字典攻击以找到有效的凭证。成功率显然取决于运行脚本时使用的字典文件。

还有更多...

您的 MySQL 服务器可能在非标准端口上运行。您可以通过指定-p参数手动设置端口,或者使用 Nmap 的服务检测:

$ nmap -sV --script mysql-brute <target>$ nmap -p1234 --script mysql-brute <target>

脚本mysql-brute依赖于 NSE 库unpwdbbrute。这些库有几个脚本参数,可以用来调整您的暴力破解密码审计。

  • 要使用不同的用户名和密码列表,请分别设置参数userdbpassdb
$ nmap -p3306 --script mysql-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>

  • 要在找到一个有效帐户后退出,请使用参数brute.firstOnly
$ nmap -p3306 --script mysql-brute --script-args brute.firstOnly <target>

  • 要设置不同的超时限制,请使用参数unpwd.timelimit。要无限期运行它,请将其设置为0
$ nmap -p3306 --script mysql-brute --script-args unpwdb.timelimit=0 <target>$ nmap -p3306 --script mysql-brute --script-args unpwdb.timelimit=60m <target>

Brute 模式

brute库支持不同的模式,可以改变攻击中使用的用户名/密码组合。可用的模式有:

  • user:对于userdb中列出的每个用户,将尝试passdb中的每个密码
$ nmap --script mysql-brute --script-args brute.mode=user <target>

  • pass:对于passdb中列出的每个密码,将尝试userdb中的每个用户
$ nmap --script mysql-brute --script-args brute.mode=pass <target>

  • creds:这需要额外的参数brute.credfile
$ nmap --script mysql-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>

另请参阅

  • 列出 MySQL 数据库配方

  • 列出 MySQL 用户配方

  • 列出 MySQL 变量配方

  • 在 MySQL 服务器中查找空密码的 root 帐户配方

  • 检测 MySQL 服务器中的不安全配置配方

检测 MySQL 服务器中的不安全配置

数据库中的不安全配置可能会被攻击者滥用。互联网安全中心CIS)发布了 MySQL 的安全基准,Nmap 可以使用这个基准来审计 MySQL 服务器的安全配置。

这个配方展示了如何使用 Nmap 检测 MySQL 服务器中的不安全配置。

如何做...

要检测 MySQL 服务器中的不安全配置,请输入以下命令:

$ nmap -p3306 --script mysql-audit --script-args 'mysql-audit.username="<username>",mysql-audit.password="<password>",mysql-audit.filename=/usr/local/share/nmap/nselib/data/mysql-cis.audit' <target>

每个控件都将被审查,并且结果中将包括PASSFAILREVIEW的图例:

PORT     STATE SERVICE 
3306/tcp open  mysql 
| mysql-audit: 
|   CIS MySQL Benchmarks v1.0.2 
|       3.1: Skip symbolic links => PASS 
|       3.2: Logs not on system partition => PASS 
|       3.2: Logs not on database partition => PASS 
|       4.1: Supported version of MySQL => REVIEW 
|         Version: 5.1.41-3ubuntu12.10 
|       4.4: Remove test database => PASS 
|       4.5: Change admin account name => FAIL 
|       4.7: Verify Secure Password Hashes => PASS 
|       4.9: Wildcards in user hostname => PASS 
|       4.10: No blank passwords => PASS 
|       4.11: Anonymous account => PASS 
|       5.1: Access to mysql database => REVIEW 
|         Verify the following users that have access to the MySQL database 
|           user              host 
|           root              localhost 
|           root              builder64 
|           root              127.0.0.1 
|           debian-sys-maint  localhost 
|       5.2: Do not grant FILE privileges to non Admin users => PASS 
|       5.3: Do not grant PROCESS privileges to non Admin users => PASS 
|       5.4: Do not grant SUPER privileges to non Admin users => PASS 
|       5.5: Do not grant SHUTDOWN privileges to non Admin users => PASS 
|       5.6: Do not grant CREATE USER privileges to non Admin users => PASS 
|       5.7: Do not grant RELOAD privileges to non Admin users => PASS 
|       5.8: Do not grant GRANT privileges to non Admin users => PASS 
|       6.2: Disable Load data local => FAIL 
|       6.3: Disable old password hashing => PASS 
|       6.4: Safe show database => FAIL 
|       6.5: Secure auth => FAIL 
|       6.6: Grant tables => FAIL 
|       6.7: Skip merge => FAIL 
|       6.8: Skip networking => FAIL 
|       6.9: Safe user create => FAIL 
|       6.10: Skip symbolic links => FAIL 
| 
|_      The audit was performed using the db-account: root 

它是如何工作的...

脚本参数-p3306 --script mysql-audit告诉 Nmap 如果发现运行在 3306 端口上的 MySQL 服务器,则启动 NSE 脚本mysql-audit

脚本mysql-audit是由 Patrik Karlsson 开发的,它使用基准 CIS MySQL 的部分检查不安全的配置。它也非常灵活,允许通过指定替代规则进行自定义检查。

还有更多...

如果您的 MySQL 服务器除了rootdebian-sys-maint之外还有管理帐户,您应该在$ nmap_path/nselib/data/mysql-cis.audit中找到以下行,并将其添加到脚本中:

local ADMIN_ACCOUNTS={"root", "debian-sys-maint". "web"} 

请记住,您可以在单独的文件中编写自己的规则,并使用脚本参数mysql-audit.fingerprintfile来引用它。审计规则看起来像下面这样:

test { id="3.1", desc="Skip symbolic links", sql="SHOW variables WHERE Variable_name = 'log_error' AND Value IS NOT NULL", check=function(rowstab) 
        return { status = not(isEmpty(rowstab[1])) } 
end 
} 

MySQL 服务器可能在非标准端口上运行。使用 Nmap 的服务检测(-sV)或通过指定端口参数(-p)手动设置端口:

$ nmap -sV --script mysql-brute <target>$ nmap -p1234 --script mysql-brute <target>

另请参阅

  • 列出 MySQL 数据库食谱

  • 列出 MySQL 用户食谱

  • 列出 MySQL 变量食谱

  • 在 MySQL 服务器中查找空密码的根帐户食谱

  • 暴力破解 MySQL 密码食谱

暴力破解 Oracle 密码

管理多个数据库的系统管理员通常需要根据组织的政策检查弱密码。渗透测试人员也利用弱密码获取未经授权的访问权限。方便的是,Nmap NSE 提供了一种执行远程暴力破解密码审计的方法,用于 Oracle 数据库服务器。

该食谱显示了如何使用 Nmap 对 Oracle 进行暴力破解密码审计。

如何做...

打开终端并使用以下参数运行 Nmap:

$ nmap -sV --script oracle-brute --script-args oracle-brute.sid=TEST <target>

在脚本输出部分将包括找到的任何有效凭据:

PORT     STATE  SERVICE REASON
1521/tcp open  oracle  syn-ack
| oracle-brute: 
|   Accounts
|     system:system => Valid credentials
|   Statistics
|_    Perfomed 103 guesses in 6 seconds, average tps: 17

它是如何工作的...

参数-sV --script oracle-brute --script-args oracle-brute.sid=TEST使 Nmap 在检测到 Oracle 服务器时针对实例TEST启动脚本oracle-brute

脚本oracle-brute由 Patrik Karlsson 提交,它帮助渗透测试人员和系统管理员对 Oracle 服务器发起字典攻击,以尝试获取有效凭据。

还有更多...

更新文件nselib/data/oracle-default-accounts.lst以添加任何默认帐户。

脚本oracle-brute依赖于 NSE 库unpwdbbrute。这些库有几个脚本参数,可用于调整您的暴力破解密码审计。

  • 要使用不同的用户名和密码列表,请分别设置参数userdbpassdb
$ nmap -sV --script oracle-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>

  • 要在找到一个有效帐户后退出,请使用参数brute.firstOnly
$ nmap -sV --script oracle-brute --script-args brute.firstOnly <target>

  • 要设置不同的超时限制,请使用参数unpwd.timelimit。要无限期运行,请将其设置为0
$ nmap -sV --script oracle-brute --script-args unpwdb.timelimit=0 <target>$ nmap -sV --script oracle-brute --script-args unpwdb.timelimit=60m <target>

暴力模式

暴力库支持不同的模式,这些模式改变了攻击中使用的用户名/密码组合。可用的模式有:

  • 用户:对于userdb中列出的每个用户,将尝试passdb中的每个密码
$ nmap --script oracle-brute --script-args brute.mode=user <target>

  • 密码:对于passdb中列出的每个密码,将尝试userdb中的每个用户
$ nmap --script oracle-brute --script-args brute.mode=pass <target>

  • 凭据:这需要额外的参数brute.credfile
$ nmap --script oracle-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>

另请参阅

  • 暴力破解 Oracle SID 名称食谱

暴力破解 Oracle SID 名称

Oracle 服务器具有 SID 名称,渗透测试人员需要找到它们。多亏了 Nmap,我们可以尝试通过对 TNS 监听器进行字典攻击来列出它们。

该食谱显示了如何使用 Nmap 对 Oracle SID 名称进行暴力破解。

如何做...

要暴力破解 Oracle SID 名称,请使用以下 Nmap 命令:

$ nmap -sV --script oracle-sid-brute <target>

找到的所有 SID 将包括在oracle-sid-brute的 NSE 脚本输出部分中:

PORT     STATE SERVICE REASON
1521/tcp open  oracle  syn-ack
| oracle-sid-brute: 
|   orcl
|   prod
|_  devel

它是如何工作的...

参数-sV --script oracle-sid-brute告诉 Nmap 启动服务检测(-sV)并使用 NSE 脚本oracle-sid-brute

NSE 脚本oracle-sid-brute由 Patrik Karlsson 提交,以帮助渗透测试人员通过对 Oracle 的 TNS 进行字典攻击来枚举 Oracle SID。如果主机运行服务oracle-tns或端口 1521 打开,则将执行此脚本。

还有更多...

默认情况下,该脚本使用位于nselib/data/oracle-sids的字典,但您可以通过设置脚本参数oraclesids来指定不同的文件:

$ nmap -sV --script oracle-sid-brute --script-args oraclesids=/home/pentest/sids.txt <target>

另请参阅

  • 暴力破解 Oracle 密码食谱

检索 MS SQL 服务器信息

系统管理员和渗透测试人员通常需要收集尽可能多的主机信息。基于 Microsoft 技术的基础设施中常见 MS SQL 数据库,Nmap 可以帮助我们从中收集信息。

该食谱显示了如何从 MS SQL 服务器检索信息。

如何做...

要通过使用 Nmap 从 MS SQL 服务器检索信息,请运行以下命令:

$ nmap -p1433 --script ms-sql-info <target>

MS SQL 服务器信息,如实例名称、版本号和端口,将包含在脚本输出中:

PORT     STATE SERVICE 
1433/tcp open  ms-sql-s 

Host script results: 
| ms-sql-info: 
|   Windows server name: CLDRN-PC 
|   [192.168.1.102\MSSQLSERVER] 
|     Instance name: MSSQLSERVER 
|     Version: Microsoft SQL Server 2011 
|       Version number: 11.00.1750.00 
|       Product: Microsoft SQL Server 2011 
|     TCP port: 1433 
|_    Clustered: No 

工作原理...

MS SQL 服务器通常在端口 1433 上运行。如果 MS SQL 服务器在该端口上运行,我们使用参数-p1433 --script ms-sql-info来启动 NSE 脚本ms-sql-info

脚本ms-sql-info由 Chris Woodbury 和 Thomas Buchanan 提交。它连接到 MS SQL 服务器并检索实例名称、版本名称、版本号、产品名称、服务包级别、补丁列表、TCP/UDP 端口以及是否集群。如果可用,它会从 SQL Server Browser 服务(UDP 端口 1434)或从服务的探测中收集此信息。

还有更多...

如果端口 445 打开,您可以使用它通过管道检索信息。需要设置参数mssql.instance-namemssql.instance-all

$ nmap -sV --script-args mssql.instance-name=MSSQLSERVER --script ms-sql-info -p445 -v <target>
$ nmap -sV --script-args mssql.instance-all --script ms-sql-info -p445 -v <target>

输出如下:

PORT    STATE SERVICE     VERSION 
445/tcp open  netbios-ssn 

Host script results: 
| ms-sql-info: 
|   Windows server name: CLDRN-PC 
|   [192.168.1.102\MSSQLSERVER] 
|     Instance name: MSSQLSERVER 
|     Version: Microsoft SQL Server 2011 
|       Version number: 11.00.1750.00 
|       Product: Microsoft SQL Server 2011 
|     TCP port: 1433 
|_    Clustered: No 

仅在 MS SQL 的 NSE 脚本中强制扫描端口

NSE 脚本ms-sql-brutems-sql-config.nsems-sql-empty-passwordms-sql-hasdbaccess.nse,ms-sql-info.nsems-sql-query.nsems-sql-tables.nsems-sql-xp-cmdshell.nse可能尝试连接到未包括在您的扫描中的端口。要限制 NSE 仅使用扫描的端口,请使用参数mssql.scanned-ports-only

$ nmap -p1433 --script-args mssql.scanned-ports-only --script ms-sql-* -v <target>

另请参阅

  • 暴力破解 MS SQL 密码食谱

  • 转储 MS SQL 服务器的密码哈希食谱

  • 通过 MS SQL 服务器的命令 shell 运行命令食谱

  • 在 MS SQL 服务器上查找空密码的 sysadmin 帐户食谱

暴力破解 MS SQL 密码

系统管理员和渗透测试人员通常需要检查弱密码,作为组织安全政策的一部分。Nmap 可以帮助我们对 MS SQL 服务器执行字典攻击。

本食谱介绍了如何使用 Nmap 对 MS SQL 服务器执行暴力破解密码审计。

操作步骤...

对 MS SQL 服务器执行暴力破解密码审计,运行以下 Nmap 命令:

$ nmap -p1433 --script ms-sql-brute <target>

如果找到任何有效帐户,它们将包含在脚本输出部分中:

PORT     STATE SERVICE 
1433/tcp open  ms-sql-s 
| ms-sql-brute: 
|   [192.168.1.102:1433] 
|     Credentials found: 
|_      sa:<empty>

工作原理...

MS SQL 服务器通常在 TCP 端口 1433 上运行。如果在端口 1433 上发现运行中的 MS SQL 服务器,参数-p1433 --script ms-sql-brute将启动 NSE 脚本ms-sql-brute

脚本ms-sql-brute由 Patrik Karlsson 编写。它对 MS SQL 数据库执行暴力破解密码审计。此脚本依赖于库mssql。您可以在http://nmap.org/nsedoc/lib/mssql.html了解更多信息。

还有更多...

数据库服务器可能在非标准端口上运行。您可以通过指定-p参数手动设置端口,也可以使用 Nmap 的服务检测:

$ nmap -sV --script ms-sql-brute <target>$ nmap -p1234 --script ms-sql-brute <target>

请记住,如果 SMB 端口打开,我们可以使用管道来通过设置参数mssql.instance-allmssql.instance-name来运行此脚本:

$ nmap -p445 --script ms-sql-brute --script-args mssql.instance-all <target>

输出如下:

PORT    STATE SERVICE 
445/tcp open  microsoft-ds 

Host script results: 
| ms-sql-brute: 
|   [192.168.1.102\MSSQLSERVER] 
|     Credentials found: 
|_      sa:<empty> => Login Success 

脚本ms-sql-brute依赖于 NSE 库unpwdbbrute。这些库有几个脚本参数,可用于调整暴力破解密码审计。

  • 要使用不同的用户名和密码列表,设置参数userdbpassdb
$ nmap -p1433 --script ms-sql-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>

  • 要在找到一个有效帐户后退出,请使用参数brute.firstOnly
$ nmap -p1433 --script ms-sql-brute --script-args brute.firstOnly <target>

  • 要设置不同的超时限制,请使用参数unpwd.timelimit。要无限期运行,请将其设置为0
$ nmap -p1433 --script ms-sql-brute --script-args unpwdb.timelimit=0 <target>$ nmap -p1433 --script ms-sql-brute --script-args unpwdb.timelimit=60m <target>

暴力模式

暴力库支持不同的模式,可改变攻击中使用的用户名/密码组合。可用的模式有:

  • user:对于userdb中列出的每个用户,将尝试passdb中的每个密码
$ nmap --script ms-sql-brute --script-args brute.mode=user <target>

  • pass:对于passdb中列出的每个密码,将尝试userdb中的每个用户
$ nmap --script ms-sql-brute --script-args brute.mode=pass <target>

  • creds:这需要额外的参数brute.credfile
$ nmap --script ms-sql-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>

另请参阅

  • 检索 MS SQL 服务器信息食谱

  • 转储 MS SQL 服务器的密码哈希食谱

  • 通过 MS SQL 服务器的命令 shell 运行命令食谱

  • 在 MS SQL 服务器上查找空密码的 sysadmin 帐户食谱

转储 MS SQL 服务器的密码哈希

获得对 MS SQL 服务器的访问权限后,我们可以转储 MS SQL 服务器的所有密码哈希以破坏其他帐户。Nmap 可以帮助我们以可供John the Ripper破解工具使用的格式检索这些哈希。

此教程显示了如何使用 Nmap 转储 MS SQL 服务器的可破解密码哈希。

如何做...

要转储具有空 sysadmin 密码的 MS SQL 服务器的所有密码哈希,请运行以下 Nmap 命令:

$ nmap -p1433 --script ms-sql-empty-password,ms-sql-dump-hashes <target>

密码哈希将包含在ms-sql-dump-hashes脚本输出部分中:

PORT     STATE SERVICE  VERSION 
1433/tcp open  ms-sql-s Microsoft SQL Server 2011 
Service Info: CPE: cpe:/o:microsoft:windows 

Host script results: 
| ms-sql-empty-password: 
|   [192.168.1.102\MSSQLSERVER] 
|_    sa:<empty> => Login Success 
| ms-sql-dump-hashes: 
| [192.168.1.102\MSSQLSERVER] 
|     sa:0x020039AE3752898DF2D260F2D4DC7F09AB9E47BAB2EA3E1A472F49520C26E206D0613E34E92BF929F53C463C5B7DED53738A7FC0790DD68CF1565469207A50F98998C7E5C610 
|     ##MS_PolicyEventProcessingLogin##:0x0200BB8897EC23F14FC9FB8BFB0A96B2F541ED81F1103FD0FECB94D269BE15889377B69AEE4916307F3701C4A61F0DFD9946209258A4519FE16D9204580068D2011F8FBA7AD4 
|_    ##MS_PolicyTsqlExecutionLogin##:0x0200FEAF95E21A02AE55D76F68067DB02DB59AE84FAD97EBA7461CB103361598D3683688F83019E931442EC3FB6342050EFE6ACE4E9568F69D4FD4557C2C443243E240E66E10 

它是如何工作的...

MS SQL 服务器通常在 TCP 端口 1433 上运行。参数-p1433 --script ms-sql-empty-password,ms-sql-dump-hashes启动脚本ms-sql-empty-password,该脚本找到一个空的 root sysadmin 帐户,然后在端口 1433 上运行脚本ms-sql-dump-hashes

ms-sql-dump-hashes脚本由 Patrik Karlsson 编写,其功能是检索 MS SQL 服务器的密码哈希,以便像 John the Ripper 这样的破解工具使用。此脚本依赖于mssql库。您可以在http://nmap.org/nsedoc/lib/mssql.html了解更多信息。

还有更多...

如果 SMB 端口打开,您可以使用它通过设置参数mssql.instance-allmssql.instance-name来运行此脚本:

PORT    STATE SERVICE 
445/tcp open  microsoft-ds 

Host script results: 
| ms-sql-empty-password: 
|   [192.168.1.102\MSSQLSERVER] 
|_    sa:<empty> => Login Success 
| ms-sql-dump-hashes: 
| [192.168.1.102\MSSQLSERVER] 
|
  sa:0x020039AE3752898DF2D260F2D4DC7F09AB9E47BAB2EA3E1A472F49520C26E206D0613E34E92BF929F53C463C5B7DED53738A7FC0790DD68CF1565469207A50F98998C7E5C610 
|     ##MS_PolicyEventProcessingLogin##:0x0200BB8897EC23F14FC9FB8BFB0A96B2F541ED81F1103FD0FECB94D269BE15889377B69AEE4916307F3701C4A61F0DFD9946209258A4519FE16D9204580068D2011F8FBA7AD4 
|_    ##MS_PolicyTsqlExecutionLogin##:0x0200FEAF95E21A02AE55D76F68067DB02DB59AE84FAD97EBA7461CB103361598D3683688F83019E931442EC3FB6342050EFE6ACE4E9568F69D4FD4557C2C443243E240E66E10 

另请参阅

  • 检索 MS SQL 服务器信息教程

  • 暴力破解 MS SQL 密码教程

  • 在 MS SQL 服务器上通过命令 shell 运行命令教程

  • 在 MS SQL 服务器上查找具有空密码的 sysadmin 帐户教程

在 MS SQL 服务器上通过命令 shell 运行命令

MS SQL 服务器有一个名为xp_cmdshell的存储过程。此功能允许程序员通过 MS SQL 服务器执行命令。当启用此选项时,Nmap 可以帮助我们执行自定义 shell 命令。

此教程显示了如何通过 Nmap 在 MS SQL 服务器上运行 Windows 命令。

如何做...

打开您的终端并输入以下 Nmap 命令:

$ nmap --script-args 'mssql.username="<user>",mssql.password=""' --script ms-sql-xp-cmdshell -p1433 <target>

结果将包含在脚本输出部分中:

PORT     STATE SERVICE  VERSION 
1433/tcp open  ms-sql-s Microsoft SQL Server 2011 11.00.1750.00 
| ms-sql-xp-cmdshell: 
|   [192.168.1.102:1433] 
|     Command: net user 
|       output 
|       ====== 
| 
|       User accounts for \\ 
| 
|       ------------------------------------------------------------------------------- 
|       Administrator          cldrn             Guest 
|       postgres 
|       The command completed with one or more errors. 
| 
|_ 

它是如何工作的...

MS SQL 服务器通常在 TCP 端口 1433 上运行。参数--script-args 'mssql.username="<user>",mssql.password=""' --script ms-sql-xp-cmdshell -p1433使 Nmap 启动脚本ms-sql-xp-cmdshell,然后设置要在端口 1433 上运行的 MS SQL 服务器使用的身份验证凭据。

ms-sql-xp-cmdshell脚本由 Patrik Karlsson 编写。它尝试通过在 MS SQL 服务器上找到的存储过程xp_cmdshell运行 OS 命令。此脚本依赖于mssql库。其文档可以在nmap.org/nsedoc/lib/mssql.html找到。

还有更多...

默认情况下,ms-sql-xp-cmdshell将尝试运行命令ipconfig /all,但您可以使用脚本参数ms-sql-xp-cmdshell.cmd指定不同的命令:

$ nmap --script-args 'ms-sql-xp-cmdshell.cmd="<command>",mssql.username="<user>",mssql.password=""' --script ms-sql-xp-cmdshell -p1433 <target>

如果服务器没有启用xp_cmdshell过程,则应该看到以下消息:

| ms-sql-xp-cmdshell: 
|   (Use --script-args=ms-sql-xp-cmdshell.cmd='<CMD>' to change command.) 
|   [192.168.1.102\MSSQLSERVER] 
|_    Procedure xp_cmdshell disabled. For more information see "Surface Area Configuration" in Books Online. 

如果您没有提供任何有效的身份验证凭据,将显示以下消息:

| ms-sql-xp-cmdshell: 
|   [192.168.1.102:1433] 
|_    ERROR: No login credentials. 

请记住,您可以将此脚本与ms-sql-empty-password结合使用,以自动检索具有空密码的 sysadmin 帐户的 MS SQL 服务器的网络配置:

$ nmap --script ms-sql-xp-cmdshell,ms-sql-empty-password -p1433 <target>

另请参阅

  • 检索 MS SQL 服务器信息教程

  • 暴力破解 MS SQL 密码教程

  • 转储 MS SQL 服务器的密码哈希教程

  • 在 MS SQL 服务器上通过命令 shell 运行命令教程

在 MS SQL 服务器上查找具有空密码的 sysadmin 帐户

渗透测试人员经常需要检查是否有管理帐户具有弱密码。借助 Nmap NSE 的一些帮助,我们可以轻松地检查是否有主机(或主机)具有具有空密码的 sysadmin 帐户。

这个教程教会我们如何使用 Nmap 查找具有空 sysadmin 密码的 MS SQL 服务器。

如何做...

要查找具有空sa帐户的 MS SQL 服务器,请打开终端并输入以下 Nmap 命令:

$ nmap -p1433 --script ms-sql-empty-password -v <target>

如果找到具有空密码的帐户,它将包含在脚本输出部分中:

PORT     STATE SERVICE 
1433/tcp open  ms-sql-s 
| ms-sql-empty-password: 
|   [192.168.1.102:1433] 
|_    sa:<empty> => Login Success 

它是如何工作的...

参数-p1433 --script ms-sql-empty-password使 Nmap 在发现端口 1433 上运行的 MS SQL 服务器时启动 NSE 脚本ms-sql-empty-password

脚本ms-sql-empty-password由 Patrik Karlsson 提交,并由 Chris Woodbury 改进。它尝试使用用户名sa(系统管理员帐户)和空密码连接到 MS SQL 服务器。

还有更多...

如果端口 445 打开,您可以使用它通过管道检索信息。需要设置参数mssql.instance-namemssql.instance-all

$ nmap -sV --script-args mssql.instance-name=MSSQLSERVER --script ms-sql-empty-password -p445 -v <target>
$ nmap -sV --script-args mssql.instance-all --script ms-sql-empty-password -p445 -v <target>

输出将如下所示:

PORT    STATE SERVICE     VERSION 
445/tcp open  netbios-ssn 

Host script results: 
| ms-sql-empty-password: 
|   [192.168.1.102\MSSQLSERVER] 
|_    sa:<empty> => Login Success 

仅在 MS SQL 的 NSE 脚本中强制扫描端口

NSE 脚本ms-sql-brutems-sql-config.nsems-sql-empty-passwordms-sql-hasdbaccess.nse,ms-sql-info.nsems-sql-query.nsems-sql-tables.nsems-sql-xp-cmdshell.nse可能尝试连接到未包含在您的扫描中的端口。要限制 NSE 仅使用扫描的端口,请使用参数mssql.scanned-ports-only

$ nmap -p1433 --script-args mssql.scanned-ports-only --script ms-sql-* -v <target>

另请参阅

  • 检索 MS SQL 服务器信息的方法

  • 暴力破解 MS SQL 密码的方法

  • 转储 MS SQL 服务器的密码哈希的方法

  • 在 MS SQL 服务器上通过命令行运行命令的方法

列出 MongoDB 数据库

MongoDB 可能在单个安装中包含多个数据库。列出数据库对系统管理员和渗透测试人员都很有用,而且有一个 NSE 脚本可以让他们轻松地甚至自动地执行此操作。

此方法描述了如何使用 Nmap 列出 MongoDB 中的数据库。

如何做到这一点...

通过使用 Nmap 列出 MongoDB 数据库,输入以下命令:

$ nmap -p 27017 --script mongodb-databases <target>

数据库将显示在脚本输出部分中:

PORT      STATE SERVICE 
27017/tcp open  mongodb 
| mongodb-databases: 
|   ok = 1 
|   databases 
|     1 
|       empty = true 
|       sizeOnDisk = 1 
|       name = local 
|     0 
|       empty = true 
|       sizeOnDisk = 1 
|       name = admin 
|     3 
|       empty = true 
|       sizeOnDisk = 1 
|       name = test 
|     2 
|       empty = true 
|       sizeOnDisk = 1 
|       name = nice%20ports%2C 
|_  totalSize = 0 

它是如何工作的...

如果在端口 27017 上发现运行中的 MongoDB 服务器,则启动 NSE 脚本mongodb-databases-p 27017 --script mongodb-databases)。

脚本mongodb-databases由 Martin Holst Swende 提交,它尝试列出 MongoDB 安装中的所有数据库。

还有更多...

MongoDB 文档位于www.mongodb.org/display/DOCS/Home

此脚本依赖于库mongodb,其文档可以在nmap.org/nsedoc/lib/mongodb.html找到。

另请参阅

  • 检索 MongoDB 服务器信息的方法

检索 MongoDB 服务器信息

在对 MongoDB 安装进行安全评估时,可以提取构建信息,如系统详细信息和服务器状态,包括可用连接数,正常运行时间和内存使用情况。

此方法描述了如何使用 Nmap 从 MongoDB 安装中检索服务器信息。

如何做到这一点...

打开你的终端并输入以下 Nmap 命令:

# nmap -p 27017 --script mongodb-info <target>

MongoDB 服务器信息将包含在脚本输出部分中:

PORT      STATE SERVICE 
27017/tcp open  mongodb 
| mongodb-info: 
|   MongoDB Build info 
|     ok = 1 
|     bits = 64 
|     version = 1.2.2 
|     gitVersion = nogitversion 
|     sysInfo = Linux crested 2.6.24-27-server #1 SMP Fri Mar 12 01:23:09 UTC 2010 x86_64 BOOST_LIB_VERSION=1_40 
|   Server status 
|     mem 
|       resident = 4 
|       virtual = 171 
|       supported = true 
|       mapped = 0 
|     ok = 1 
|     globalLock 
|       ratio = 3.3333098126169e-05 
|       lockTime = 28046 
|       totalTime = 841385937 
|_    uptime = 842 

它是如何工作的...

参数-p 27017 --script mongodb-info使 Nmap 在发现端口 27017 上运行的服务时启动 NSE 脚本mongodb-info

脚本mongodb-info由 Martin Holst Swende 编写。它返回服务器信息,包括 MongoDB 数据库的状态和构建详细信息。

还有更多...

MongoDB 文档位于www.mongodb.org/display/DOCS/Home

此脚本依赖于库mongodb,其文档可以在nmap.org/nsedoc/lib/mongodb.html找到。

另请参阅

  • 列出 MongoDB 数据库的方法

列出 CouchDB 数据库

CouchDB 安装可能包含许多数据库。 Nmap 为渗透测试人员或系统管理员提供了一种轻松列出可用数据库的方法,他们可能需要监视恶意数据库。

这个食谱将向您展示如何使用 Nmap 列出 CouchDB 服务器中的数据库。

如何做...

要使用 Nmap 列出 CouchDB 安装中的所有数据库,请输入以下命令:

# nmap -p5984 --script couchdb-databases <target>

结果将包括 CouchDB 在couchdb-databases输出部分返回的所有数据库:

PORT     STATE SERVICE VERSION 
5984/tcp open  httpd   Apache CouchDB 0.10.0 (Erlang OTP/R13B) 
| couchdb-databases: 
|   1 = nmap 
|_  2 = packtpub 

它是如何工作的...

参数-p5984 --script couchdb-databases告诉 Nmap 如果在端口 5984 上发现正在运行的 CouchDB HTTP 服务,则启动 NSE 脚本couchdb-databases

脚本couchdb-databases由 Martin Holst Swende 编写,它列出了 CouchDB 服务中所有可用的数据库。它查询 URI/_all_dbs,并从返回的数据中提取信息:

["nmap","packtpub"]

还有更多...

您可以通过访问wiki.apache.org/couchdb/HTTP_database_API了解有关 CouchDB HTTP 使用的 API 的更多信息。

另请参阅

  • 检索 CouchDB 数据库统计信息食谱

检索 CouchDB 数据库统计信息

CouchDB HTTP 服务器可以返回对系统管理员非常有价值的统计信息。这些信息包括每秒请求次数、大小和其他有用的统计信息。幸运的是,Nmap 提供了一种简单的方法来检索这些信息。

这个食谱描述了如何使用 Nmap 检索 CouchDB HTTP 服务的数据库统计信息。

如何做...

打开您的终端并使用以下参数运行 Nmap:

# nmap -p5984 --script couchdb-stats 127.0.0.1 

结果将包括在脚本输出部分中:

PORT     STATE SERVICE 
5984/tcp open  httpd 
| couchdb-stats: 
|   httpd_request_methods 
|     PUT (number of HTTP PUT requests) 
|       current = 2 
|       count = 970 
|     GET (number of HTTP GET requests) 
|       current = 52 
|       count = 1208 
|   couchdb 
|     request_time (length of a request inside CouchDB without MochiWeb) 
|       current = 1 
|       count = 54 
|     open_databases (number of open databases) 
|       current = 2 
|       count = 970 
|     open_os_files (number of file descriptors CouchDB has open) 
|       current = 2 
|       count = 970 
|   httpd_status_codes 
|     200 (number of HTTP 200 OK responses) 
|       current = 27 
|       count = 1208 
|     201 (number of HTTP 201 Created responses) 
|       current = 2 
|       count = 970 
|     301 (number of HTTP 301 Moved Permanently responses) 
|       current = 1 
| count = 269 
|     500 (number of HTTP 500 Internal Server Error responses) 
|       current = 1 
|       count = 274 
|   httpd 
|     requests (number of HTTP requests) 
|       current = 54 
|       count = 1208 
|_  Authentication : NOT enabled ('admin party') 

它是如何工作的...

参数-p5984 --script couchdb-stats告诉 Nmap 如果 CouchDB HTTP 服务器正在运行,则启动 NSE 脚本couchdb-stats

脚本couchdb_stats由 Martin Holst Swende 提交,它只执行一个任务:检索 CouchDB HTTP 服务的运行时统计信息。它通过请求 URI/_stats/并解析服务器返回的序列化数据来实现这一点:

{"current":1,"count":50,"mean":14.28,"min":0,"max":114,"stddev":30.40068420282675,"description":"length of a request inside CouchDB without MochiWeb"}

还有更多...

如果您发现一个没有受到身份验证保护的安装,您还应该检查以下 URI:

  • /_utils/

  • /_utils/status.html

  • /_utils/config.html

您可以通过访问wiki.apache.org/couchdb/Runtime_Statistics了解有关 CouchDB HTTP 服务器的运行时统计信息。

另请参阅

  • 列出 CouchDB 数据库食谱

第六章:审计邮件服务器

注意

本章向您展示了如何执行在许多情况下可能是非法、不道德、违反服务条款或只是不明智的一些操作。这里提供这些信息是为了让您了解如何保护自己免受威胁,并使自己的系统更加安全。在遵循这些说明之前,请确保您站在法律和道德的一边...运用您的力量为善!

在本章中,我们将涵盖:

  • 使用 Google 搜索发现有效的电子邮件帐户

  • 检测开放中继

  • 暴力破解 SMTP 密码

  • 在 SMTP 服务器中枚举用户

  • 检测后门 SMTP 服务器

  • 暴力破解 IMAP 密码

  • 检索 IMAP 邮件服务器的功能

  • 暴力破解 POP3 密码

  • 检索 POP3 邮件服务器的功能

  • 检测易受攻击的 Exim SMTP 服务器版本 4.70 至 4.75

介绍

邮件服务器几乎在任何组织中都可以使用,因为电子邮件已经成为首选的通信渠道,原因显而易见。邮件服务器的重要性取决于其中存储的信息。攻击者经常会入侵电子邮件帐户,并继续接管几乎每个网络应用程序中都有的“忘记密码”功能找到的所有其他帐户。有时,被入侵的帐户会在数月内被窃听,而没有人注意到,甚至可能被垃圾邮件发送者滥用。因此,任何优秀的系统管理员都知道拥有安全的邮件服务器是至关重要的。

在本章中,我将介绍不同的 NSE 任务,用于管理和监控邮件服务器。我还将展示渗透测试人员可用的攻击性方法。我们将涵盖最流行的邮件协议,如 SMTP、POP3 和 IMAP。

我们将回顾任务,如检索功能、枚举用户、暴力破解密码,甚至利用易受攻击的 Exim 服务器。最后,您还将学习如何使用 Nmap 自动抓取搜索引擎(如 Google Web 和 Google Groups)的电子邮件帐户,以收集我们可以在暴力破解攻击中使用的有效电子邮件帐户。

使用 Google 搜索发现有效的电子邮件帐户

查找有效的电子邮件帐户是渗透测试中的重要任务。电子邮件帐户经常用作某些系统和网络应用程序中的用户名。攻击者经常针对其中存储的高度敏感信息。

本教程向您展示了如何使用 Nmap 发现有效的电子邮件帐户,这些帐户可以用作某些网络应用程序中的用户名,也可以用于暴力破解密码审核,以查找弱凭据。

准备工作

对于此任务,我们需要一个 Nmap 官方未分发的 NSE 脚本。从seclists.org/nmap-dev/2011/q3/att-401/http-google-email.nse下载 NSE 脚本http-google-search.nse

通过执行以下命令更新您的 NSE 脚本数据库:

# nmap --script-updatedb

将显示以下消息:

NSE: Updating rule database. 
NSE: Script Database updated successfully. 

如何做...

要使用 Nmap 通过 Google 搜索和 Google Groups 查找有效的电子邮件帐户,请输入以下命令:

$ nmap -p80 --script http-google-email <target>

找到的所有电子邮件帐户都将包含在脚本输出部分:

$ nmap -p80 --script http-google-email insecure.org
PORT   STATE SERVICE 
80/tcp open  http 
| http-google-email: 
| fyodor@insecure.org 
|_nmap-hackers@insecure.org 

它是如何工作的...

NSE 脚本http-google-email由 Shinook 编写。它使用搜索引擎 Google Web 和 Google Groups 来查找这些服务缓存的公共电子邮件帐户。

该脚本查询以下 URI 以获取结果:

参数-p80 --script http-google-email告诉 Nmap 在端口 80 上发现 Web 服务器时启动 NSE 脚本http-google-email

还有更多...

要仅显示属于某个主机名的结果,请使用脚本参数http-google-email.domain

$ nmap -p80 --script http-google-email --script-args http-google-email.domain=<hostname> <target>

要增加要爬行的页面数量,请使用脚本参数http-google-email.pages。默认情况下,此脚本仅请求五个页面:

$ nmap -p80 --script http-google-email --script-args http-google-email.pages=10 <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。Nmap 使用标志-d进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 暴力破解 SMTP 密码食谱

  • 枚举 SMTP 服务器中的用户食谱

  • 暴力破解 IMAP 密码食谱

  • 暴力破解 POP3 密码食谱

检测开放继电

开放继电器是不安全的邮件服务器,允许第三方域在未经授权的情况下使用它们。它们被垃圾邮件发送者和网络钓鱼者滥用,并对组织造成严重风险,因为公共垃圾邮件黑名单可能会将它们添加并影响整个组织,该组织依赖于电子邮件到达目的地。

该食谱展示了如何使用 Nmap 检测开放继电器。

如何做...

打开终端,输入以下命令:

$ nmap -sV --script smtp-open-relay -v <target>

输出返回通过的测试数量和使用的命令组合:

Host script results:
| smtp-open-relay: Server is an open relay (1/16 tests)
|_MAIL FROM:<antispam@insecure.org> -> RCPT TO:<relaytest@insecure.org>

它是如何工作的...

脚本smtp-open-relay由 Arturo 'Buanzo' Busleiman 提交,它尝试 16 种不同的测试来确定 SMTP 服务器是否允许开放继电。如果打开了详细模式,它还会返回成功中继电子邮件的命令。

命令组合在脚本中是硬编码的,测试包括目标和源地址的不同字符串格式:

MAIL FROM:<user@domain.com>
250 Address Ok. 
RCPT TO:<user@adomain.com>
250 user@adomain.com OK 

如果收到 503 响应,脚本将退出,因为这意味着此服务器受到身份验证保护,不是开放继电。

如果端口 25、465 和 587 处于打开状态,或者在目标主机中找到服务smtpsmtpssubmission,则脚本smtp-open-relay将执行(-sV --script smtp-open-relay)。

还有更多...

您可以通过指定脚本参数smtp-open-relay.ipsmtp-open-relay.domain来指定替代 IP 地址或域名:

$ nmap -sV --script smtp-open-relay -v --script-args smtp-open-relay.ip=<ip> <target>
$ nmap -sV --script smtp-open-relay -v --script-args smtp-open-relay.domain=<domain> <target>

通过指定脚本参数smtp-open-relay.tosmtp-open-relay.from来指定测试中使用的源和目标电子邮件地址:

$ nmap -sV --script smtp-open-relay -v --script-args smtp-open-relay.to=<Destination email address>,smtp-open-relay.from=<Source email address> <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。Nmap 使用标志-d进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 使用 Google 搜索发现有效的电子邮件帐户食谱

  • 枚举 SMTP 服务器中的用户食谱

  • 检测后门 SMTP 服务器食谱

  • 检索 IMAP 邮件服务器的功能食谱

  • 检索 POP3 邮件服务器的功能食谱

  • 检测易受攻击的 Exim SMTP 服务器版本 4.70 至 4.75食谱

暴力破解 SMTP 密码

邮件服务器通常存储非常敏感的信息,渗透测试人员需要对其执行暴力破解密码审核,以检查是否存在弱密码。

此食谱将向您展示如何使用 Nmap 对 SMTP 服务器进行字典攻击。

如何做...

要通过 Nmap 对 SMTP 服务器进行字典攻击,输入以下命令:

$ nmap -p25 --script smtp-brute <target>

如果找到任何有效凭据,它们将包含在脚本输出部分中:

PORT    STATE SERVICE REASON
25/tcp  open  stmp    syn-ack
| smtp-brute: 
|   Accounts
|     acc0:test - Valid credentials
|     acc1:test - Valid credentials
|     acc3:password - Valid credentials
|     acc4:12345 - Valid credentials
|   Statistics
|_    Performed 3190 guesses in 81 seconds, average tps: 39

它是如何工作的...

NSE 脚本smtp-brute由 Patrik Karlsson 提交。它对 SMTP 服务器执行暴力破解密码审核。它支持以下身份验证方法:LOGINPLAINCRAM-MD5DIGEST-MD5NTLM

默认情况下,脚本使用单词列表/nselib/data/usernames.lst/nselib/data/passwords.lst,但可以轻松更改为使用替代单词列表。

参数-p25 --script smtp-brute使 Nmap 在端口 25 上发现 SMTP 服务器时启动 NSE 脚本smtp-brute

还有更多...

脚本smtp-brute依赖于 NSE 库unpwdbbrute。这些库有几个脚本参数,可用于调整您的暴力破解密码审计。

  • 使用不同的用户名和密码列表,设置参数userdbpassdb
$ nmap -p25 --script smtp-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>

  • 在找到一个有效帐户后退出,请使用参数brute.firstOnly
$ nmap -p25 --script smtp-brute --script-args brute.firstOnly <target>

  • 要设置不同的超时限制,请使用参数unpwd.timelimit。要无限期运行,请将其设置为0
$ nmap -p25 --script smtp-brute --script-args unpwdb.timelimit=0 <target>
$ nmap -p25 --script smtp-brute --script-args unpwdb.timelimit=60m <target>

暴力模式

brute 库支持不同的模式,可改变攻击中使用的用户名/密码组合。可用的模式有:

  • user:对于userdb中列出的每个用户,将尝试passdb中的每个密码
$ nmap --script smtp-brute --script-args brute.mode=user <target>

  • pass:对于passdb中列出的每个密码,将尝试userdb中的每个用户
$ nmap --script smtp-brute --script-args brute.mode=pass <target>

  • creds:这需要额外的参数brute.credfile
$ nmap --script smtp-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。 Nmap 使用-d标志进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 使用 Google 搜索发现有效的电子邮件帐户配方

  • 在 SMTP 服务器中枚举用户配方

  • 暴力破解 IMAP 密码配方

  • 检索 IMAP 邮件服务器的功能配方

  • 暴力破解 POP3 密码配方

  • 检索 POP3 邮件服务器的功能配方

在 SMTP 服务器中枚举用户

在 Web 应用程序中,使用电子邮件帐户作为用户名非常常见,当审计邮件服务器时,找到它们是必要的任务。通过 SMTP 命令枚举用户可以获得出色的结果,多亏了 Nmap 脚本引擎,我们可以自动化这项任务。

此配方显示如何使用 Nmap 列举 SMTP 服务器上的用户。

如何做...

通过使用 Nmap 在 SMTP 服务器上枚举用户,输入以下命令:

$ nmap -p25 –script smtp-enum-users <target>

找到的任何用户名都将包含在脚本输出部分中:

Host script results:
| smtp-enum-users:
|_  RCPT, webmaster

工作原理...

脚本smtp-enum-users由 Duarte Silva 编写,它尝试使用 SMTP 命令RCPTVRFYEXPN在 SMTP 服务器中枚举用户。

SMTP 命令RCPTVRFYEXPN可用于确定邮件服务器上帐户是否存在。让我们只看一下VRFY命令,因为它们都以类似的方式工作:

VRFY root
250 root@domain.com
VRFY eaeaea
550 eaeaea... User unknown

请注意,此脚本仅适用于不需要身份验证的 SMTP 服务器。如果是这种情况,您将看到以下消息:

| smtp-enum-users: 
|_  Couldn't perform user enumeration, authentication needed

还有更多...

您可以使用脚本参数smtp-enum-users.methods选择要尝试的方法(RCPTVRFYEXPN)以及尝试它们的顺序:

$ nmap -p25 –script smtp-enum-users --script-args smtp-enum-users.methods={VRFY,EXPN,RCPT} <target>
$ nmap -p25 –script smtp-enum-users --script-args smtp-enum-users.methods={RCPT, VRFY} <target>

要在 SMTP 命令中设置不同的域,请使用脚本参数smtp-enum-users.domain

$ nmap -p25 –script smtp-enum-users --script-args smtp-enum-users.domain=<domain> <target>

脚本smtp-enum-users依赖于 NSE 库unpwdbbrute。这些库有几个脚本参数,可用于调整您的暴力破解密码审计。

  • 要使用不同的用户名列表,请设置参数userdb
$ nmap -p25 --script smtp-enum-users --script-args userdb=/var/usernames.txt <target>

  • 在找到一个有效帐户后退出,请使用参数brute.firstOnly
$ nmap -p25 --script smtp-enum-users --script-args brute.firstOnly <target>

  • 要设置不同的超时限制,请使用参数unpwd.timelimit。要无限期运行,请将其设置为0
$ nmap -p25 --script smtp-enum-users --script-args unpwdb.timelimit=0 <target>
$ nmap -p25 --script smtp-enum-users --script-args unpwdb.timelimit=60m <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。 Nmap 使用-d标志进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 使用 Google 搜索发现有效的电子邮件帐户配方

  • 暴力破解 SMTP 密码配方

  • 在 SMTP 服务器中枚举用户配方

  • 检测后门 SMTP 服务器配方

  • 暴力破解 IMAP 密码配方

  • 检索 IMAP 邮件服务器的功能配方

  • 暴力破解 POP3 密码配方

  • 检索 POP3 邮件服务器的功能配方

检测后门 SMTP 服务器

受损的服务器可能安装了流氓 SMTP 服务器,并被垃圾邮件发送者滥用。系统管理员可以使用 Nmap 来帮助他们监视网络中的邮件服务器。

这个配方展示了如何使用 Nmap 检测流氓 SMTP 服务器。

如何做...

打开您的终端并输入以下 Nmap 命令:

$ nmap -sV --script smtp-strangeport <target>

如果在非标准端口上发现邮件服务器,它将在脚本输出部分中报告:

PORT    STATE SERVICE  VERSION 
9999/tcp open  ssl/smtp Postfix smtpd 
|_smtp-strangeport: Mail server on unusual port: possible malware

它是如何工作的...

脚本smtp-strangeport由 Diman Todorov 提交。它检测在非标准端口上运行的 SMTP 服务器,这是流氓邮件服务器的指标。如果发现 SMTP 服务器在 25、465 和 587 端口之外的端口上运行,此脚本将通知您。

参数-sV --script smtp-strangeport使 Nmap 开始服务检测并启动 NSE 脚本smtp-strangeport,它将比较发现 SMTP 服务器的端口号与已知端口号 25、465 和 587。

还有更多...

我们可以使用这个脚本为您的邮件服务器设置一个监控系统,如果发现了一个流氓 SMTP 服务器,它会通知您。首先,创建文件夹/usr/local/share/nmap-mailmon/

扫描您的主机并将结果保存在我们刚刚创建的mailmon目录中:

#nmap -oX /usr/local/share/nmap-mailmon/base.xml -sV -p- -Pn -T4 <target>

生成的文件将用于比较结果,并且它应该反映您已知的服务列表。现在,创建文件nmap-mailmon.sh

#!/bin/bash 
#Bash script to email admin when changes are detected in a network using Nmap and Ndiff. 
# 
#Don't forget to adjust the CONFIGURATION variables. 
#Paulino Calderon <calderon@websec.mx> 

# 
#CONFIGURATION 
# 
NETWORK="YOURDOMAIN.COM" 
ADMIN=YOUR@EMAIL.COM 
NMAP_FLAGS="-sV -Pn -p- -T4 --script smtp-strangeport" 
BASE_PATH=/usr/local/share/nmap-mailmon/ 
BIN_PATH=/usr/local/bin/ 
BASE_FILE=base.xml 
NDIFF_FILE=ndiff.log 
NEW_RESULTS_FILE=newscanresults.xml 

BASE_RESULTS="$BASE_PATH$BASE_FILE" 
NEW_RESULTS="$BASE_PATH$NEW_RESULTS_FILE" 
NDIFF_RESULTS="$BASE_PATH$NDIFF_FILE" 

if [ -f $BASE_RESULTS ] 
then 
  echo "Checking host $NETWORK" 
  ${BIN_PATH}nmap -oX $NEW_RESULTS $NMAP_FLAGS $NETWORK 
  ${BIN_PATH}ndiff $BASE_RESULTS $NEW_RESULTS > $NDIFF_RESULTS 
  if [ $(cat $NDIFF_RESULTS | wc -l) -gt 0 ] 
  then 
    echo "Network changes detected in $NETWORK" 
    cat $NDIFF_RESULTS 
    echo "Alerting admin $ADMIN" 
    mail -s "Network changes detected in $NETWORK" $ADMIN < $NDIFF_RESULTS 
  fi 
fi 

不要忘记更新以下配置值:

NETWORK="YOURDOMAIN.COM" 
ADMIN=YOUR@EMAIL.COM 
NMAP_FLAGS="-sV -Pn -p- -T4 --script smtp-strangeport" 
BASE_PATH=/usr/local/share/nmap-mailmon/ 
BIN_PATH=/usr/local/bin/ 
BASE_FILE=base.xml 
NDIFF_FILE=ndiff.log 
NEW_RESULTS_FILE=newscanresults.xml 

使用以下命令使脚本nmap-mailmon.sh可执行:

#chmod +x /usr/local/share/nmap-mailmon/nmap-mailmon.sh

您现在可以添加以下crontab条目,以自动运行此脚本:

0 * * * * /usr/local/share/nmap-mon/nmap-mon.sh

重新启动 cron,您应该已成功安装了一个监控系统,如果发现流氓 SMTP 服务器,它将通知您。

另请参阅

  • 检测开放中继配方

  • 检测易受攻击的 Exim SMTP 服务器版本 4.70 至 4.75配方

暴力破解 IMAP 密码

电子邮件帐户存储非常敏感的信息,审计邮件服务器的渗透测试人员必须检测可能危及电子邮件帐户和通过它们访问的信息的弱密码。

在这个配方中,我们将使用 Nmap 对 IMAP 密码进行暴力破解。

如何做...

要对 IMAP 执行暴力密码审计,请使用以下命令:

$ nmap -p143 --script imap-brute <target>

在脚本输出部分下,将列出找到的所有有效帐户:

PORT    STATE SERVICE REASON
143/tcp open  imap    syn-ack
| imap-brute: 
|   Accounts
|     acc1:test - Valid credentials
|     webmaster:webmaster - Valid credentials
|   Statistics
|_    Performed 112 guesses in 112 seconds, average tps: 1

它是如何工作的...

脚本imap-brute由 Patrik Karlsson 提交,它对 IMAP 服务器执行暴力密码审计。它支持LOGINPLAINCRAM-MD5DIGEST-MD5NTLM身份验证。

默认情况下,此脚本使用单词列表/nselib/data/usernames.lst/nselib/data/passwords.lst,但您可以通过配置暴力库来更改这一点。

参数-p143 --script imap-brute告诉 Nmap 如果在 143 端口上发现 IMAP,则启动脚本imap-brute

还有更多...

脚本imap-brute依赖于 NSE 库unpwdbbrute。这些库有几个脚本参数,可用于调整您的暴力密码审计。

  • 要使用不同的用户名和密码列表,请分别设置参数userdbpassdb
$ nmap -p143 --script imap-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>

  • 要在找到一个有效帐户后退出,请使用参数brute.firstOnly
$ nmap -p143 --script imap-brute --script-args brute.firstOnly <target>

  • 要设置不同的超时限制,请使用参数unpwd.timelimit。要无限期运行它,请将其设置为 0:
$ nmap -p143 --script imap-brute --script-args unpwdb.timelimit=0 <target>
$ nmap -p143 --script imap-brute --script-args unpwdb.timelimit=60m <target>

Brute 模式

暴力库支持不同的模式,可以改变攻击中使用的用户名/密码组合。可用的模式有:

  • user:对于userdb中列出的每个用户,将尝试passdb中的每个密码
$ nmap --script imap-brute --script-args brute.mode=user <target>

  • pass:对于passdb中列出的每个密码,将尝试userdb中的每个用户
$ nmap --script imap-brute --script-args brute.mode=pass <target>

  • creds:这需要额外的参数brute.credfile
$ nmap --script imap-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。Nmap 使用标志-d进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 使用 Google 搜索发现有效的电子邮件帐户配方

  • 暴力破解 SMTP 密码的方法

  • 在 SMTP 服务器中枚举用户的方法

  • 检索 IMAP 邮件服务器的功能

  • 暴力破解 POP3 密码的方法

  • 检索 POP3 邮件服务器的功能

检索 IMAP 邮件服务器的功能

IMAP 服务器可能支持不同的功能。有一个名为CAPABILITY的命令允许客户端列出这些支持的邮件服务器功能,我们可以使用 Nmap 来自动化这个任务。

此方法向您展示了如何使用 Nmap 列出 IMAP 服务器的功能。

如何做...

打开您喜欢的终端并输入以下 Nmap 命令:

$ nmap -p143,993 --script imap-capabilities <target>

结果将包括在脚本输出部分下:

993/tcp  open     ssl/imap Dovecot imapd 
|_imap-capabilities: LOGIN-REFERRALS completed AUTH=PLAIN OK Capability UNSELECT THREAD=REFERENCES AUTH=LOGINA0001 IMAP4rev1 NAMESPACE SORT CHILDREN LITERAL+ IDLE SASL-IR MULTIAPPEND 

它是如何工作的...

脚本imap-capabilities由 Brandon Enright 提交,它尝试使用在 RFC 3501 中定义的CAPABILITY命令来列出 IMAP 服务器的支持功能。

参数-p143,993 --script imap-capabilities告诉 Nmap 在端口 143 或 993 上发现 IMAP 服务器时启动 NSE 脚本imap-capabilities

还有更多...

对于 IMAP 服务器运行在非标准端口的情况,您可以使用端口选择标志-p,或者启用 Nmap 的服务检测:

#nmap -sV --script imap-capabilities <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。Nmap 使用-d标志进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 暴力破解 SMTP 密码的方法

  • 在 SMTP 服务器中枚举用户的方法

  • 检测后门 SMTP 服务器的方法

  • 暴力破解 IMAP 密码的方法

  • 检索 IMAP 邮件服务器的功能

  • 暴力破解 POP3 密码的方法

  • 检索 POP3 邮件服务器的功能

  • 检测易受攻击的 Exim SMTP 服务器版本 4.70 至 4.75 的方法

暴力破解 POP3 密码

电子邮件帐户存储着敏感信息。审计邮件服务器的渗透测试人员必须测试弱密码,这些密码可能帮助攻击者 compromise 重要的帐户。

此方法向您展示了如何使用 Nmap 对 POP3 邮件服务器进行暴力破解密码审计。

如何做...

要通过 Nmap 对 POP3 进行字典攻击,请输入以下命令:

$ nmap -p110 --script pop3-brute <target>

任何有效的帐户都将列在脚本输出部分下:

PORT    STATE SERVICE
110/tcp open  pop3
| pop3-brute: webmaster : abc123
|_acc1 : password

它是如何工作的...

pop3-brute由 Philip Pickering 提交,它对 POP3 邮件服务器进行暴力破解密码审计。默认情况下,它使用单词列表/nselib/data/usernames.lst/nselib/data/passwords.lst作为用户名和密码组合。

还有更多...

脚本pop3-brute依赖于 NSE 库unpwdb。该库有几个脚本参数,可用于调整您的暴力破解密码审计。

  • 要使用不同的用户名和密码列表,请设置参数userdbpassdb
$ nmap -p110 --script pop3-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt <target>

  • 要设置不同的超时限制,请使用参数unpwd.timelimit。要无限期运行它,请将其设置为0
$ nmap -p110 --script pop3-brute --script-args unpwdb.timelimit=0 <target>
$ nmap -p110 --script pop3-brute --script-args unpwdb.timelimit=60m <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。Nmap 使用-d标志进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 使用 Google 搜索发现有效的电子邮件帐户的方法

  • 暴力破解 SMTP 密码的方法

  • 在 SMTP 服务器中枚举用户的方法

  • 检测后门 SMTP 服务器的方法

  • 暴力破解 IMAP 密码的方法

  • 检索 IMAP 邮件服务器的功能

  • 暴力破解 POP3 密码的方法

  • 检索 POP3 邮件服务器的功能

检索 POP3 邮件服务器的功能

POP3 邮件服务器可能支持 RFC 2449 中定义的不同功能。通过使用 POP3 命令,我们可以列出它们,并且由于 Nmap,我们可以自动化这个任务并将此服务信息包含在我们的扫描结果中。

这个配方将教你如何使用 Nmap 列出 POP3 邮件服务器的功能。

如何做...

打开您喜欢的终端并输入以下 Nmap 命令:

$ nmap -p110 --script pop3-capabilities <target>

服务器功能列表将包含在脚本输出部分:

PORT    STATE SERVICE 
110/tcp open  pop3 
|_pop3-capabilities: USER CAPA UIDL TOP OK(K) RESP-CODES PIPELINING STLS SASL(PLAIN LOGIN) 

它是如何工作...

脚本pop3-capabilities由 Philip Pickering 提交,它尝试检索 POP3 和 POP3S 服务器的功能。它使用 POP3 命令CAPA向服务器请求支持的命令列表。该脚本还尝试通过IMPLEMENTATION字符串和任何其他特定于站点的策略来检索版本字符串。

还有更多...

脚本pop3-capabilities适用于 POP3 和 POP3S。在非标准端口上运行的邮件服务器可以通过 Nmap 的服务扫描来检测:

$ nmap -sV --script pop3-capabilities <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。Nmap 使用-d标志进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 检测开放继电器配方

  • 暴力破解 SMTP 密码配方

  • 在 SMTP 服务器中枚举用户配方

  • 检测后门 SMTP 服务器配方

  • 暴力破解 IMAP 密码配方

  • 检索 IMAP 邮件服务器的功能配方

  • 暴力破解 POP3 密码配方

  • 检测易受攻击的 Exim SMTP 服务器版本 4.70 至 4.75配方

检测易受攻击的 Exim SMTP 服务器版本 4.70 至 4.75

启用 DKIM 的 Exim SMTP 服务器 4.70 至 4.75 存在格式字符串错误,允许远程攻击者执行代码。 Nmap NSE 可以帮助渗透测试人员远程检测此漏洞。

这个配方说明了利用 Nmap 的 Exim SMTP 服务器的过程。

如何做...

打开你的终端并输入以下命令:

$ nmap --script smtp-vuln-cve2011-1764 --script-args mailfrom=<Source address>,mailto=<Destination address>,domain=<domain> -p25,465,587 <target>

如果 Exim 服务器存在漏洞,脚本输出部分将包含更多信息:

PORT   STATE SERVICE
587/tcp open  submission
| smtp-vuln-cve2011-1764: 
|   VULNERABLE:
|   Exim DKIM format string
|     State: VULNERABLE
|     IDs:  CVE:CVE-2011-1764  OSVDB:72156
|     Risk factor: High  CVSSv2: 7.5 (HIGH) (AV:N/AC:L/Au:N/C:P/I:P/A:P)
|     Description:
|       Exim SMTP server (version 4.70 through 4.75) with DomainKeys Identified
|       Mail (DKIM) support is vulnerable to a format string. A remote attacker
|       who is able to send emails, can exploit this vulnerability and execute
|       arbitrary code with the privileges of the Exim daemon.
|     Disclosure date: 2011-04-29
|     References:
|       http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-1764
|       http://osvdb.org/72156
|_      http://bugs.exim.org/show_bug.cgi?id=1106

它是如何工作的...

脚本smtp-vuln-cve2011-1764由 Djalal Harouni 编写。它通过发送格式不正确的 DKIM 标头并检查连接是否关闭或返回错误来检测易受攻击的 Exim SMTP 服务器 4.70-4.75 与Domain Keys Identified MailDKIM)。

还有更多...

默认情况下,脚本smtp-vuln-cve2011-1764在初始握手中使用nmap.scanme.org作为域,但您可以通过指定脚本参数smtp-vuln-cve2011-1764.domain来更改这一点:

$ nmap --script smtp-vuln-cve2011-1764 --script-args domain=<domain> -p25,465,587 <target>

要更改与源地址和目标地址对应的默认值root@<domain>postmaster@<target>,请使用参数smtp-vuln-cve2011-1764.mailfromsmtp-vuln-cve2011-1764.mailto

$ nmap --script smtp-vuln-cve2011-1764 --script-args mailto=admin@0xdeadbeefcafe.com,mailfrom=test@0xdeadbeefcafe.com -p25,465,587 <target>

调试 NSE 脚本

如果运行任何 NSE 脚本时发生意外情况,请打开调试以获取更多信息。Nmap 使用-d标志进行调试,您可以设置 0 到 9 之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

另请参阅

  • 检测开放继电器配方

  • 暴力破解 SMTP 密码配方

  • 在 SMTP 服务器中枚举用户配方

  • 检测后门 SMTP 服务器配方

  • 暴力破解 IMAP 密码配方

  • 检索 IMAP 邮件服务器的功能配方

  • 暴力破解 POP3 密码配方

  • 检索 POP3 邮件服务器的功能配方

第七章:扫描大型网络

注意

本章向您展示了如何做一些在许多情况下可能是非法的、不道德的、违反服务条款的,或者只是不明智的事情。这里提供这些信息是为了让您了解如何保护自己免受威胁,并使自己的系统更加安全。在遵循这些说明之前,请确保您站在合法和道德的一边……善用您的力量!

在本章中,我们将涵盖:

  • 扫描 IP 地址范围

  • 从文本文件中读取目标

  • 扫描随机目标

  • 跳过测试以加快长时间扫描的速度

  • 选择正确的时间模板

  • 调整时间参数

  • 调整性能参数

  • 收集 Web 服务器的签名

  • 通过使用 Dnmap 在多个客户端之间分发扫描

介绍

我最喜欢 Nmap 的一些功能是它的稳定性以及在扫描大型网络时的可定制性。Nmap 可以在单次运行中高效地扫描数百万个 IP。我们只需要小心地理解和调整可能影响性能的变量,并在扫描目标之前真正考虑我们的目标。

本章涵盖了在扫描大型网络时需要考虑的最重要的方面。我们首先介绍了诸如读取目标列表、选择正确的时间模板、生成随机目标和跳过阶段以节省时间等基本任务。本章涵盖的高级任务包括 Nmap 中可用的时间和性能参数的概述,以及如何正确使用它们。我还将向您展示如何从互联网上收集 HTTP 标头进行分析,例如流行的服务“ShodanHQ”,但只使用 Nmap。

最后,我介绍了一个名为 Dnmap 的非官方工具,它可以帮助我们在多个客户端之间分发 Nmap 扫描,从而节省时间并利用额外的带宽和 CPU 资源。

扫描 IP 地址范围

经常,渗透测试人员和系统管理员需要扫描的不是单个机器,而是一系列主机。Nmap 支持不同格式的 IP 地址范围,我们必须知道如何处理它们是至关重要的。

本教程解释了在使用 Nmap 进行扫描时如何处理 IP 地址范围。

如何做...

打开您的终端并输入以下命令:

# nmap -A -O 192.168.1.0-255

或者您也可以使用以下任何表示法:

# nmap -A -O 192.168.1/24
# nmap -A -O 192.168.1.1 192.168.1.2 ... 192.168.1.254 192.168.1.255

它是如何工作的...

Nmap 支持多种目标格式。最常见的类型是当我们指定目标的 IP 或主机时,但它还支持从文件、范围中读取目标,甚至可以生成一个随机目标列表。

Nmap 中读取的任何无效选项都将被视为目标。这意味着我们可以告诉 Nmap 在单个命令中扫描多个范围,如下面的命令所示:

# nmap -p25,80 -O -T4 192.168.1.1/24 scanme.nmap.org/24

我们可以通过以下三种方式处理 Nmap 中的 IP 范围:

  • 多个主机规范

  • 八位地址范围

  • CIDR 表示法

要扫描 IP 地址192.168.1.1192.168.1.2192.168.1.3,可以使用以下命令:

# nmap -p25,80 -O -T4 192.168.1.1 192.168.1.2 192.168.1.3

我们还可以使用字符“-”指定八位范围。例如,要扫描主机192.168.1.1192.168.1.2192.168.1.3,我们可以使用表达式192.168.1.1-3,如下面的命令所示:

# nmap -p25,80 -O -T4 192.168.1.1-3

在指定目标时也可以使用 CIDR 表示法。CIDR 表示法由 IP 地址和后缀组成。最常用的网络后缀是/8、/16、/24 和/32。要使用 CIDR 表示法扫描192.168.1.0-255中的 256 个主机,可以使用以下命令:

# nmap -p25,80 -O -T4 192.168.1.1/24

还有更多...

此外,您可以通过指定参数--exclude来排除范围内的主机,如下所示:

$ nmap -A -O 192.168.1.1-255 --exclude 192.168.1.1
$ nmap -A -O 192.168.1.1-255 --exclude 192.168.1.1,192.168.1.2

或者您可以将排除列表写入文件,并使用--exclude-file进行读取:

$ cat dontscan.txt
192.168.1.1
192.168.1.254

$ nmap -A -O --exclude-file dontscan.txt 192.168.1.1-255

CIDR 表示法

**无类域间路由(CIDR)**表示法(发音为"cider")是一种用于指定 IP 地址及其路由后缀的紧凑方法。与类别寻址相比,此表示法因其允许可变长度的子网掩码而变得流行。

CIDR 表示法由 IP 地址和网络后缀指定。网络或 IP 后缀表示网络位数。IPv4 地址为 32 位,因此网络位数可以在 0 和 32 之间。最常见的后缀是/8、/16、/24 和/32。

为了更直观,可以查看以下 CIDR 到子网掩码转换表:

CIDR子网掩码
/8255.0.0.0
/16255.255.0.0
/24255.255.255.0
/32255.255.255.255

例如,192.168.1.0/24 表示从 192.168.1.0 到 192.168.1.255 的 256 个 IP 地址。而 50.116.1.121/8 表示 50.0-255.0-255.0-255 之间的所有 IP 地址。网络后缀/32 也是有效的,表示单个 IP。

特权与非特权

以特权用户身份运行nmap <TARGET>将启动SYN Stealth 扫描。对于无法创建原始数据包的非特权帐户,将使用TCP Connect 扫描

这两者之间的区别在于 TCP Connect 扫描使用高级系统调用connect来获取有关端口状态的信息。这意味着每个 TCP 连接都完全完成,因此速度较慢,更容易被检测并记录在系统日志中。SYN Stealth 扫描使用原始数据包发送特制的 TCP 数据包来检测更可靠的端口状态。

端口状态

Nmap 使用以下状态对端口进行分类:

  • Open:此状态表示应用程序正在此端口上监听连接。

  • Closed:此状态表示已收到探测包,但在此端口上没有应用程序在监听。

  • Filtered:此状态表示未收到探测包,无法建立状态。还表示探测包被某种过滤器丢弃。

  • Unfiltered:此状态表示已收到探测包,但无法建立状态。

  • Open/Filtered:此状态表示 Nmap 无法确定端口是被过滤还是开放的状态。

  • Closed/Filtered:此状态表示 Nmap 无法确定端口是被过滤还是关闭的状态。

端口扫描技术

Nmap 支持大量的端口扫描技术。使用nmap -h获取完整列表。

另请参阅

  • 从文本文件中读取目标配方

  • 扫描随机目标配方

  • 跳过测试以加快长时间扫描配方

  • 选择正确的时间模板配方

  • 在《第一章》Nmap 基础知识中的列出远程主机的开放端口配方

  • 在《第一章》Nmap 基础知识中的使用特定端口范围进行扫描配方

  • 使用 Dnmap 在多个客户端之间分发扫描配方

从文本文件中读取目标

有时我们需要处理多个主机并执行多个扫描,但是在命令行中输入每个扫描的目标列表并不是很实用。幸运的是,Nmap 支持从外部文件加载目标。

此配方展示了如何使用 Nmap 扫描从外部文件加载的目标。

如何做...

将目标列表输入到文本文件中,每个目标之间用新行、制表符或空格分隔:

$cat targets.txt
192.168.1.23
192.168.1.12

要从文件targets.txt加载目标,可以使用以下命令:

$ nmap -iL targets.txt

此功能可以与任何扫描选项或方法结合使用,但不能与--exclude--exclude-file设置的排除规则结合使用。当使用-iL时,选项标志--exclude--exclude-file将被忽略。

工作原理...

参数-iL <filename>告诉 Nmap 从文件filename加载目标。

Nmap 支持输入文件中的几种格式。输入文件中包含的目标列表可以用空格、制表符或换行符分隔。任何排除都应在输入目标文件中反映出来。

还有更多...

您还可以在同一个文件中使用不同的目标格式。在以下文件中,我们指定了一个 IP 地址和一个 IP 范围:

$ cat targets.txt
192.168.1.1
192.168.1.20-30

目标文件可以使用"#"字符包含注释:

$ cat targets.txt

# FTP servers
192.168.10.3
192.168.10.7
192.168.10.11

CIDR 表示法

无类别域间路由 (CIDR) 表示法(发音为"cider")是一种用于指定 IP 地址及其路由后缀的紧凑方法。与有类别地址相比,这种表示法因其允许可变长度的子网掩码而变得流行。

CIDR 表示法由 IP 地址和网络后缀指定。网络或 IP 后缀表示网络位数。IPv4 地址为 32 位,因此网络可以在 0 和 32 之间。最常见的后缀是/8、/16、/24 和/32。

要可视化它,请查看以下 CIDR 到网络掩码转换表:

CIDR网络掩码
/8255.0.0.0
/16255.255.0.0
/24255.255.255.0
/32255.255.255.255

例如,192.168.1.0/24 表示从 192.168.1.0 到 192.168.1.255 的 256 个 IP 地址。而 50.116.1.121/8 表示 50.0-255.0-255.0-255 之间的所有 IP 地址。网络后缀/32 也是有效的,表示单个 IP。

从扫描中排除主机列表

Nmap 还支持参数--exclude-file <filename>,以排除<filename>中列出的目标:

# nmap -sV -O --exclude-file dontscan.txt 192.168.1.1/24

另请参阅

  • 扫描随机目标配方

  • 第二章中的排除扫描中的主机配方,网络探索

  • 第一章中的运行 NSE 脚本配方,Nmap 基础

  • 第三章中的发现指向相同 IP 地址的主机名配方,收集额外主机信息

  • 第二章中的扫描 IPv6 地址配方,网络探索

  • 收集 Web 服务器签名配方

  • 使用 Dnmap 将扫描分布在多个客户端之间配方

扫描随机目标

Nmap 支持一个非常有趣的功能,允许我们对互联网上的随机目标运行扫描。在进行需要随机主机样本的研究时,这非常有用。

此配方向您展示了如何生成随机主机作为 Nmap 扫描的目标。

如何做到...

要生成一个包含 100 个主机的随机目标列表,请使用以下 Nmap 命令:

$ nmap -iR 100

Nmap 将生成一个包含 100 个外部 IP 地址的列表,并使用指定的选项对它们进行扫描。让我们将此选项与 ping 扫描结合使用:

$ nmap -sP -iR 3
Nmap scan report for host86-190-227-45.wlms-broadband.com (86.190.227.45)
Host is up (0.000072s latency).
Nmap scan report for 126.182.245.207
Host is up (0.00023s latency).
Nmap scan report for 158.sub-75-225-31.myvzw.com (75.225.31.158)
Host is up (0.00017s latency).
Nmap done: 3 IP addresses (3 hosts up) scanned in 0.78 seconds

它是如何工作的...

参数-iR 100告诉 Nmap 生成 100 个外部 IP 地址,并将它们用作指定扫描中的目标。这种目标分配可以与任何组合的扫描标志一起使用。

虽然这是进行互联网研究的一个有用功能,但我建议您谨慎使用此标志。Nmap 无法控制其生成的外部 IP 地址;这意味着在生成的列表中可能包含一个被严密监视的关键机器。为了避免麻烦,请明智地使用此功能。

还有更多...

要告诉 Nmap 生成无限数量的 IP,并因此无限运行,使用以下命令将参数-iR设置为0

$ nmap -iR 0

例如,要在网上找到随机的 NFS 共享,您可以使用以下命令:

$ nmap -p2049 --open -iR 0

端口扫描的法律问题

未经许可进行端口扫描并不受欢迎,甚至在一些国家是非法的。我建议您研究一下当地的法律,了解您被允许做什么,以及在您的国家是否不赞成端口扫描。您还需要咨询您的 ISP,因为他们可能对此有自己的规定。

Nmap 的官方文档对于端口扫描涉及的法律问题有一个很棒的介绍,网址为nmap.org/book/legal-issues.html。我建议每个人都阅读一下。

目标库

参数--script-args=newtargets强制 Nmap 使用这些新发现的主机作为目标:

# nmap --script broadcast-ping --script-args newtargets
Pre-scan script results: 
| broadcast-ping: 
|   IP: 192.168.1.105  MAC: 08:00:27:16:4f:71 
|_  IP: 192.168.1.106  MAC: 40:25:c2:3f:c7:24 
Nmap scan report for 192.168.1.105 
Host is up (0.00022s latency). 
Not shown: 997 closed ports 
PORT    STATE SERVICE 
22/tcp  open  ssh 
80/tcp  open  http 
111/tcp open  rpcbind 
MAC Address: 08:00:27:16:4F:71 (Cadmus Computer Systems) 

Nmap scan report for 192.168.1.106 
Host is up (0.49s latency). 
Not shown: 999 closed ports 
PORT   STATE SERVICE 
80/tcp open  http 
MAC Address: 40:25:C2:3F:C7:24 (Intel Corporate) 

Nmap done: 2 IP addresses (2 hosts up) scanned in 7.25 seconds 

请注意,我们没有指定目标,但newtargets参数仍然将 IP192.168.1.106192.168.1.105添加到扫描队列中。

参数max-newtargets设置允许添加到扫描队列中的主机的最大数量:

# nmap --script broadcast-ping --script-args max-newtargets=3

另请参阅

  • 扫描 IP 地址范围配方

  • 第三章中的对 IP 地址进行地理定位配方,收集额外的主机信息

  • 第三章中的从 WHOIS 记录获取信息配方,收集额外的主机信息

  • 从文本文件中读取目标配方

  • 跳过测试以加快长时间扫描配方

  • 第八章中的报告漏洞检查配方,生成扫描报告

  • 收集 Web 服务器签名配方

  • 使用 Dnmap 在多个客户端之间分发扫描配方

跳过测试以加快长时间扫描

Nmap 扫描分解为不同的阶段。当我们处理大量主机列表时,通过跳过返回我们不需要的信息的测试,我们可以节省时间。通过精心选择我们的扫描标志,我们可以显著提高扫描的性能。

这个配方解释了在扫描时幕后发生的过程,以及如何跳过某些阶段以加快长时间扫描的速度。

如何做...

使用以下命令执行全端口扫描,定时模板设置为激进,并且不进行反向 DNS 解析或 ping:

# nmap -T4 -n -Pn -p- 74.207.244.221

我们刚刚使用的命令给我们以下输出:

Nmap scan report for 74.207.244.221
Host is up (0.11s latency).
Not shown: 65532 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
9929/tcp open  nping-echo

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

使用以下命令比较我们得到的运行时间与使用默认参数进行全端口扫描的运行时间:

# nmap -p- scanme.nmap.org

我们刚刚使用的命令给我们以下输出:

Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.11s latency).
Not shown: 65532 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
9929/tcp open  nping-echo

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

当你处理大量主机时,这个时间差真的会累积起来。我建议你考虑你的目标,并确定你需要的信息,以便考虑跳过一些扫描阶段的可能性。

工作原理...

Nmap 扫描分为几个阶段。其中一些需要设置一些参数才能运行,但其他阶段,比如反向 DNS 解析,默认情况下就会执行。让我们回顾一下可以跳过的阶段及其对应的 Nmap 标志:

  • 目标枚举:在这个阶段,Nmap 解析目标列表。这个阶段不能完全跳过,但你可以通过只使用 IP 地址作为目标来节省 DNS 正向查找。

  • 主机发现:这是一个阶段,Nmap 在这个阶段确定目标是否在线并在网络中。默认情况下,Nmap 对外部主机执行 ICMP 回显请求 ping,但它支持几种方法和不同的组合。要跳过主机发现阶段(不 ping),使用标志-Pn。让我们看看使用以下命令进行带有和不带有-Pn的扫描的数据包跟踪:

$ nmap -Pn -p80 -n --packet-trace scanme.nmap.org

我们刚刚使用的命令给我们以下输出:

SENT (0.0864s) TCP 106.187.53.215:62670 > 74.207.244.221:80 S ttl=46 id=4184 iplen=44  seq=3846739633 win=1024 <mss 1460>
RCVD (0.1957s) TCP 74.207.244.221:80 > 106.187.53.215:62670 SA ttl=56 id=0 iplen=44  seq=2588014713 win=14600 <mss 1460>
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.11s latency).
PORT   STATE SERVICE
80/tcp open  http

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

要进行扫描而不跳过主机发现,我们有以下命令:

$ nmap -p80 -n –packet-trace scanme.nmap.org

这个命令的输出是:

SENT (0.1099s) ICMP 106.187.53.215 > 74.207.244.221 Echo request (type=8/code=0) ttl=59 id=12270 iplen=28
SENT (0.1101s) TCP 106.187.53.215:43199 > 74.207.244.221:443 S ttl=59 id=38710 iplen=44  seq=1913383349 win=1024 <mss 1460>
SENT (0.1101s) TCP 106.187.53.215:43199 > 74.207.244.221:80 A ttl=44 id=10665 iplen=40  seq=0 win=1024
SENT (0.1102s) ICMP 106.187.53.215 > 74.207.244.221 Timestamp request (type=13/code=0) ttl=51 id=42939 iplen=40
RCVD (0.2120s) ICMP 74.207.244.221 > 106.187.53.215 Echo reply (type=0/code=0) ttl=56 id=2147 iplen=28
SENT (0.2731s) TCP 106.187.53.215:43199 > 74.207.244.221:80 S ttl=51 id=34952 iplen=44  seq=2609466214 win=1024 <mss 1460>
RCVD (0.3822s) TCP 74.207.244.221:80 > 106.187.53.215:43199 SA ttl=56 id=0 iplen=44  seq=4191686720 win=14600 <mss 1460>
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.10s latency).
PORT   STATE SERVICE
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

  • 反向 DNS 解析:Nmap 执行反向 DNS 查找,因为主机名可能会透露额外的信息,比如主机名mail.company.com。通过在扫描参数中添加参数-n可以跳过这一步。让我们看看使用以下命令进行反向 DNS 解析和不进行反向 DNS 解析时生成的流量:
$ nmap -n -Pn -p80 --packet-trace scanme.nmap.org

我们刚刚使用的命令给我们以下输出:

SENT (0.1832s) TCP 106.187.53.215:45748 > 74.207.244.221:80 S ttl=37 id=33309 iplen=44  seq=2623325197 win=1024 <mss 1460>
RCVD (0.2877s) TCP 74.207.244.221:80 > 106.187.53.215:45748 SA ttl=56 id=0 iplen=44  seq=3220507551 win=14600 <mss 1460>
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.10s latency).
PORT   STATE SERVICE
80/tcp open  http

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

要进行扫描而不跳过反向 DNS 解析,我们有以下命令:

$ nmap -Pn -p80 --packet-trace scanme.nmap.org

这个命令给我们以下输出:

NSOCK (0.0600s) UDP connection requested to 106.187.36.20:53 (IOD #1) EID 8
NSOCK (0.0600s) Read request from IOD #1 [106.187.36.20:53] (timeout: -1ms) EID                                                  18
NSOCK (0.0600s) UDP connection requested to 106.187.35.20:53 (IOD #2) EID 24
NSOCK (0.0600s) Read request from IOD #2 [106.187.35.20:53] (timeout: -1ms) EID                                                  34
NSOCK (0.0600s) UDP connection requested to 106.187.34.20:53 (IOD #3) EID 40
NSOCK (0.0600s) Read request from IOD #3 [106.187.34.20:53] (timeout: -1ms) EID                                                  50
NSOCK (0.0600s) Write request for 45 bytes to IOD #1 EID 59 [106.187.36.20:53]:                                                  =............221.244.207.74.in-addr.arpa.....
NSOCK (0.0600s) Callback: CONNECT SUCCESS for EID 8 [106.187.36.20:53]
NSOCK (0.0600s) Callback: WRITE SUCCESS for EID 59 [106.187.36.20:53]
NSOCK (0.0600s) Callback: CONNECT SUCCESS for EID 24 [106.187.35.20:53]
NSOCK (0.0600s) Callback: CONNECT SUCCESS for EID 40 [106.187.34.20:53]
NSOCK (0.0620s) Callback: READ SUCCESS for EID 18 [106.187.36.20:53] (174 bytes)
NSOCK (0.0620s) Read request from IOD #1 [106.187.36.20:53] (timeout: -1ms) EID                                                  66
NSOCK (0.0620s) nsi_delete() (IOD #1)
NSOCK (0.0620s) msevent_cancel() on event #66 (type READ)
NSOCK (0.0620s) nsi_delete() (IOD #2)
NSOCK (0.0620s) msevent_cancel() on event #34 (type READ)
NSOCK (0.0620s) nsi_delete() (IOD #3)
NSOCK (0.0620s) msevent_cancel() on event #50 (type READ)
SENT (0.0910s) TCP 106.187.53.215:46089 > 74.207.244.221:80 S ttl=42 id=23960 ip                                                 len=44  seq=1992555555 win=1024 <mss 1460>
RCVD (0.1932s) TCP 74.207.244.221:80 > 106.187.53.215:46089 SA ttl=56 id=0 iplen                                                 =44  seq=4229796359 win=14600 <mss 1460>
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.10s latency).
PORT   STATE SERVICE
80/tcp open  http

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

  • 端口扫描:在此阶段,Nmap 确定端口的状态。默认情况下使用 SYN 扫描,但支持多种端口扫描技术。可以使用参数-sn跳过此阶段:
$ nmap -sn -R --packet-trace 74.207.244.221
SENT (0.0363s) ICMP 106.187.53.215 > 74.207.244.221 Echo request (type=8/code=0) ttl=56 id=36390 iplen=28
SENT (0.0364s) TCP 106.187.53.215:53376 > 74.207.244.221:443 S ttl=39 id=22228 iplen=44  seq=155734416 win=1024 <mss 1460>
SENT (0.0365s) TCP 106.187.53.215:53376 > 74.207.244.221:80 A ttl=46 id=36835 iplen=40  seq=0 win=1024
SENT (0.0366s) ICMP 106.187.53.215 > 74.207.244.221 Timestamp request (type=13/code=0) ttl=50 id=2630 iplen=40
RCVD (0.1377s) TCP 74.207.244.221:443 > 106.187.53.215:53376 RA ttl=56 id=0 iplen=40  seq=0 win=0
NSOCK (0.1660s) UDP connection requested to 106.187.36.20:53 (IOD #1) EID 8
NSOCK (0.1660s) Read request from IOD #1 [106.187.36.20:53] (timeout: -1ms) EID 18
NSOCK (0.1660s) UDP connection requested to 106.187.35.20:53 (IOD #2) EID 24
NSOCK (0.1660s) Read request from IOD #2 [106.187.35.20:53] (timeout: -1ms) EID 34
NSOCK (0.1660s) UDP connection requested to 106.187.34.20:53 (IOD #3) EID 40
NSOCK (0.1660s) Read request from IOD #3 [106.187.34.20:53] (timeout: -1ms) EID 50
NSOCK (0.1660s) Write request for 45 bytes to IOD #1 EID 59 [106.187.36.20:53]: [............221.244.207.74.in-addr.arpa.....
NSOCK (0.1660s) Callback: CONNECT SUCCESS for EID 8 [106.187.36.20:53]
NSOCK (0.1660s) Callback: WRITE SUCCESS for EID 59 [106.187.36.20:53]
NSOCK (0.1660s) Callback: CONNECT SUCCESS for EID 24 [106.187.35.20:53]
NSOCK (0.1660s) Callback: CONNECT SUCCESS for EID 40 [106.187.34.20:53]
NSOCK (0.1660s) Callback: READ SUCCESS for EID 18 [106.187.36.20:53] (174 bytes)
NSOCK (0.1660s) Read request from IOD #1 [106.187.36.20:53] (timeout: -1ms) EID 66
NSOCK (0.1660s) nsi_delete() (IOD #1)
NSOCK (0.1660s) msevent_cancel() on event #66 (type READ)
NSOCK (0.1660s) nsi_delete() (IOD #2)
NSOCK (0.1660s) msevent_cancel() on event #34 (type READ)
NSOCK (0.1660s) nsi_delete() (IOD #3)
NSOCK (0.1660s) msevent_cancel() on event #50 (type READ)
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.10s latency).
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds

在上一个示例中,我们可以看到执行了 ICMP 回显请求和反向 DNS 查找,但没有进行端口扫描。

还有更多...

我建议您还运行几次测试扫描,以测量不同 DNS 服务器的速度,如果您计划执行反向 DNS 查找。我发现 ISP 倾向于拥有最慢的 DNS 服务器,但您可以通过指定参数--dns-servers来设置您的 DNS 服务器。要使用 Google 的 DNS 服务器,请使用参数--dns-servers 8.8.8.8,8.8.4.4

# nmap -R --dns-servers 8.8.8.8,8.8.4.4 -O scanme.nmap.org

您可以通过比较扫描时间来测试您的 DNS 服务器速度。以下命令告诉 Nmap 不要 ping 或扫描端口,只执行反向 DNS 查找:

$ nmap -R -Pn -sn 74.207.244.221
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up.
Nmap done: 1 IP address (1 host up) scanned in 1.01 seconds

Nmap 的扫描阶段

Nmap 扫描分为以下阶段:

  • 脚本预扫描:仅在使用选项-sC--script时执行此阶段,并尝试通过一组 NSE 脚本检索额外的主机信息。

  • 目标枚举:在此阶段,Nmap 解析目标并将其解析为 IP 地址。

  • 主机发现:这是 Nmap 确定目标是否在线并在网络中的阶段,通过执行指定的主机发现技术。可以使用选项-Pn跳过此阶段。

  • 反向 DNS 解析:在此阶段,Nmap 执行反向 DNS 查找以获取每个目标的主机名。参数-R可用于强制 DNS 解析,参数-n可用于跳过它。

  • 端口扫描:在此阶段,Nmap 确定端口的状态。可以使用参数-sn跳过它。

  • 版本检测:此阶段负责检测找到的开放端口的高级版本。仅当设置了参数-sV时才执行。

  • OS 检测:在此阶段,Nmap 尝试确定目标的操作系统。仅当存在选项-O时才执行。

  • Traceroute:在此阶段,Nmap 对目标执行路由跟踪。仅当设置了选项--traceroute时,此阶段才运行。

  • 脚本扫描:在此阶段,根据其执行规则运行 NSE 脚本。

  • 输出:在此阶段,Nmap 格式化所有收集到的信息,并以指定的格式返回给用户。

  • 脚本后扫描:在此阶段,评估具有后扫描执行规则的 NSE 脚本,并有机会运行。如果默认类别中没有后扫描 NSE 脚本,则将跳过此阶段,除非指定了参数--script

调试 Nmap 扫描

如果在 Nmap 扫描期间发生意外情况,请打开调试以获取更多信息。Nmap 使用标志-d进行调试级别,并且您可以设置介于09之间的任何整数:

$ nmap -p80 --script http-google-email -d4 <target>

侵略性检测

Nmap 有一个特殊的标志来激活侵略性检测-A。侵略模式启用了 OS 检测(-O)、版本检测(-sV)、脚本扫描(-sC)和路由跟踪(--traceroute)。不用说,这种模式发送了更多的探测,更容易被检测到,但提供了大量有价值的主机信息。我们可以使用以下命令之一来使用侵略模式:

# nmap -A <target>

# nmap -sC -sV -O <target>

另请参阅

  • 扫描 IP 地址范围的方法

  • 从文本文件中读取目标的方法

  • 从文本文件中读取目标的方法中排除主机列表的部分

  • 选择正确的时间模板的方法

  • 调整时间参数的方法

  • 调整性能参数的方法

  • 通过使用 Dnmap 将扫描分布到多个客户端的方法

选择正确的时间模板

Nmap 包括六个模板,设置不同的时间和性能参数,以优化您的扫描。尽管 Nmap 会自动调整其中一些值,但建议您设置正确的时间模板,以提示 Nmap 提供有关您的网络连接速度和目标响应时间的信息。

以下的配方将教你关于 Nmap 的时间模板以及如何选择正确的模板。

如何做...

打开您的终端并输入以下命令以使用“aggressive”时间模板:

# nmap -T4 -d 192.168.4.20
--------------- Timing report ---------------
 hostgroups: min 1, max 100000
 rtt-timeouts: init 500, min 100, max 1250
 max-scan-delay: TCP 10, UDP 1000, SCTP 10
 parallelism: min 0, max 0
 max-retries: 6, host-timeout: 0
 min-rate: 0, max-rate: 0
---------------------------------------------
...

您可以使用介于05之间的整数,例如-T[0-5]

它是如何工作的...

选项-T用于在 Nmap 中设置时间模板。Nmap 提供了六个时间模板,帮助用户调整一些时间和性能参数。

可用的时间模板及其初始配置值如下:

  • Paranoid (-0): 这个模板对于避开检测系统很有用,但非常慢,因为一次只扫描一个端口,探测之间的超时时间为 5 分钟。
--------------- Timing report ---------------
 hostgroups: min 1, max 100000
 rtt-timeouts: init 300000, min 100, max 300000
 max-scan-delay: TCP 1000, UDP 1000, SCTP 1000
 parallelism: min 0, max 1
 max-retries: 10, host-timeout: 0
 min-rate: 0, max-rate: 0
---------------------------------------------

  • Sneaky (-1): 这个模板对于避开检测系统很有用,但速度非常慢。
--------------- Timing report ---------------
 hostgroups: min 1, max 100000
 rtt-timeouts: init 15000, min 100, max 15000
 max-scan-delay: TCP 1000, UDP 1000, SCTP 1000
 parallelism: min 0, max 1
 max-retries: 10, host-timeout: 0
 min-rate: 0, max-rate: 0
---------------------------------------------

  • Polite (-2): 当扫描不应干扰目标系统时使用这个模板。
--------------- Timing report ---------------
 hostgroups: min 1, max 100000
 rtt-timeouts: init 1000, min 100, max 10000
 max-scan-delay: TCP 1000, UDP 1000, SCTP 1000
 parallelism: min 0, max 1
 max-retries: 10, host-timeout: 0
 min-rate: 0, max-rate: 0
---------------------------------------------

  • Normal (-3): 这是 Nmap 的默认时间模板,当参数-T未设置时使用。
--------------- Timing report ---------------
 hostgroups: min 1, max 100000
 rtt-timeouts: init 1000, min 100, max 10000
 max-scan-delay: TCP 1000, UDP 1000, SCTP 1000
 parallelism: min 0, max 0
 max-retries: 10, host-timeout: 0
 min-rate: 0, max-rate: 0
---------------------------------------------

  • Aggressive (-4): 这是宽带和以太网连接的推荐时间模板。
--------------- Timing report ---------------
 hostgroups: min 1, max 100000
 rtt-timeouts: init 500, min 100, max 1250
 max-scan-delay: TCP 10, UDP 1000, SCTP 10
 parallelism: min 0, max 0
 max-retries: 6, host-timeout: 0
 min-rate: 0, max-rate: 0
---------------------------------------------

  • Insane (-5): 这个时间模板为速度而牺牲了准确性。
--------------- Timing report ---------------
 hostgroups: min 1, max 100000
 rtt-timeouts: init 250, min 50, max 300
 max-scan-delay: TCP 5, UDP 1000, SCTP 5
 parallelism: min 0, max 0
 max-retries: 2, host-timeout: 900000
 min-rate: 0, max-rate: 0
---------------------------------------------

还有更多...

Nmap 中的交互模式允许用户按键动态更改运行时变量。尽管在开发邮件列表中已经讨论了在交互模式中包含时间和性能选项的问题几次,但在撰写本书时,还没有官方的补丁可用。但是,有一个实验性的补丁,于 2012 年 6 月提交,允许您动态更改--max-rate--min-rate的值。如果您想尝试一下,可以在seclists.org/nmap-dev/2012/q2/883找到。

另请参阅

  • 跳过测试以加快长时间扫描的配方

  • 调整时间参数的配方

  • 收集 Web 服务器签名的配方

  • 通过使用 Dnmap 在多个客户端之间分发扫描

调整时间参数

Nmap 不仅在扫描时调整自己以适应不同的网络和目标条件,而且还支持几个时间参数,可以调整以提高性能。

以下的配方描述了 Nmap 支持的时间参数。

如何做...

输入以下命令以调整相应的值:

# nmap -T4 --scan-delay 1s --initial-rtt-timeout 150ms --host-timeout 15m -d scanme.nmap.org

它是如何工作...

Nmap 支持不同的时间参数,可以调整以提高性能。重要的是要注意,设置这些值不正确很可能会损害性能,而不是改善性能。

RTT 值由 Nmap 用于知道何时放弃或重新传输探测响应。Nmap 尝试通过分析先前的响应来确定正确的值,但您可以使用参数--initial-rtt-timeout来设置初始的 RTT 超时,如下命令所示:

# nmap -A -p- --initial-rtt-timeout 150ms <target>

此外,您可以通过设置--min-rtt-timeout--max-rtt-timeout来设置最小和最大 RTT 超时值,如下命令所示:

# nmap -A -p- --min-rtt-timeout 200ms --max-rtt-timeout 600ms <target>

我们可以在 Nmap 中控制的另一个非常重要的设置是探测之间的等待时间。使用参数--scan-delay--max-scan-delay分别设置等待时间和允许在探测之间等待的最长时间,如下命令所示:

# nmap -A --max-scan-delay 10s scanme.nmap.org
# nmap -A --scan-delay 1s scanme.nmap.org

请注意,先前显示的参数在避开检测机制时非常有用。小心不要将--max-scan-delay设置得太低,因为这很可能会错过打开的端口。

还有更多...

如果您希望 Nmap 在一定时间后停止扫描,可以设置参数--host-timeout,如下面的命令所示:

# nmap -sV -A -p- --host-timeout 5m <target>

我们刚刚使用的命令给出了以下输出:

Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.00075s latency).
Skipping host scanme.nmap.org (74.207.244.221) due to host timeout
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.56 seconds

要使用 Nping 估算目标和您之间的往返时间,可以使用以下命令:

# nping -c30 <target>

这将使 Nping 发送 30 个 ICMP 回显请求数据包,并在完成后显示获得的平均、最小和最大 RTT 值。

# nping -c30 scanme.nmap.org
...
SENT (29.3569s) ICMP 50.116.1.121 > 74.207.244.221 Echo request (type=8/code=0) ttl=64 id=27550 iplen=28
RCVD (29.3576s) ICMP 74.207.244.221 > 50.116.1.121 Echo reply (type=0/code=0) ttl=63 id=7572 iplen=28

Max rtt: 10.170ms | Min rtt: 0.316ms | Avg rtt: 0.851ms
Raw packets sent: 30 (840B) | Rcvd: 30 (840B) | Lost: 0 (0.00%)
Tx time: 29.09096s | Tx bytes/s: 28.87 | Tx pkts/s: 1.03
Rx time: 30.09258s | Rx bytes/s: 27.91 | Rx pkts/s: 1.00
Nping done: 1 IP address pinged in 30.47 seconds

检查往返时间并使用最大值设置正确的--initial-rtt-timeout--max-rtt-timeout值。官方文档建议使用--initial-rtt-timeout的最大 RTT 值的两倍,并且--max-rtt-timeout的最大往返时间值的四倍。

Nmap 的扫描阶段

Nmap 扫描分为以下阶段:

  • 脚本前扫描:只有在使用选项-sC--script时才执行这个阶段,并且它尝试通过一系列 NSE 脚本检索额外的主机信息。

  • 目标枚举:在这个阶段,Nmap 解析目标并将其解析为 IP 地址。

  • 主机发现:这是 Nmap 确定目标是否在线并在网络中的阶段,通过执行指定的主机发现技术。可以使用选项-Pn跳过此阶段。

  • 反向 DNS 解析:在这个阶段,Nmap 执行反向 DNS 查找以获取每个目标的主机名。参数-R可以用于强制 DNS 解析,参数-n可以用于跳过 DNS 解析。

  • 端口扫描:在这个阶段,Nmap 确定端口的状态。可以使用参数-sn跳过它。

  • 版本检测:这个阶段负责检测找到的开放端口的高级版本。只有在设置了参数-sV时才执行。

  • 操作系统检测:在这个阶段,Nmap 尝试确定目标的操作系统。只有在存在选项-O时才执行。

  • Traceroute:在这个阶段,Nmap 对目标执行 traceroute。只有在设置了选项--traceroute时才运行这个阶段。

  • 脚本扫描:在这个阶段,根据其执行规则运行 NSE 脚本。

  • 输出:在这个阶段,Nmap 格式化所有收集到的信息,并以指定的格式返回给用户。

  • 脚本后扫描:在这个阶段,评估具有后扫描执行规则的 NSE 脚本,并有机会运行。如果默认类别中没有后扫描 NSE 脚本,则除非指定了参数--script,否则将跳过此阶段。

调试 Nmap 扫描

如果在 Nmap 扫描期间发生意外情况,请打开调试以获取额外信息。Nmap 使用标志-d进行调试级别,并且您可以设置 0 到 9 之间的任何整数,如下面的命令所示:

$ nmap -p80 --script http-enum -d4 <target>

另请参阅

  • 扫描随机目标食谱

  • 跳过测试以加快长时间扫描食谱

  • 选择正确的时间模板食谱

  • 调整性能参数食谱

  • 收集 Web 服务器签名食谱

  • 使用 Dnmap 将扫描分布在多个客户端之间食谱

调整性能参数

Nmap 不仅在扫描时调整自身以适应不同的网络和目标条件,而且还支持影响 Nmap 行为的几个参数,例如同时扫描的主机数量、重试次数和允许的探测次数。学会如何正确调整这些参数将为您节省大量的扫描时间。

以下食谱解释了可以调整以提高性能的 Nmap 参数。

如何做...

输入以下命令,根据您的需求调整值:

# nmap --min-hostgroup 100 --max-hostgroup 500 --max-retries 2 -iR 0

工作原理...

先前显示的命令告诉 Nmap 通过分组扫描和报告,不少于 100 个(--min-hostgroup 100)和不超过 500 个主机(--max-hostgroup 500)。它还告诉 Nmap 在放弃任何端口之前只重试两次(--max-retries 2)。

# nmap --min-hostgroup 100 --max-hostgroup 500 --max-retries 2 -iR 0

重要的是要注意,设置这些值不正确很可能会损害性能或准确性,而不是改善它。

由于模糊或缺乏响应,Nmap 在端口扫描阶段发送了许多探测,要么数据包丢失,要么服务被过滤,要么服务未开放。默认情况下,Nmap 根据网络条件调整重试次数,但您可以通过指定参数--max-retries手动设置这个值。通过增加重试次数,我们可以提高 Nmap 的准确性,但请记住,我们也会牺牲速度:

# nmap -p80 --max-retries 1 192.168.1.1/16

参数--min-hostgroup--max-hostgroup控制我们同时探测的主机数量。请记住,报告也是基于这个值生成的,所以根据您希望多频繁地查看扫描结果来调整它。更大的组更受欢迎并提高性能:

# nmap -A -p- --min-hostgroup 100 --max-hostgroup 500 <Range>

还有一个非常重要的参数,可以用来限制 Nmap 每秒发送的数据包数量。参数--min-rate--max-rate需要谨慎使用,以避免产生不良影响。如果没有设置这些参数,Nmap 会自动设置这些速率:

# nmap -A -p- --min-rate 50 --max-rate 100 <target>

最后,参数--min-parallelism--max-parallelism可以用来控制对主机组的探测次数。通过设置这些参数,Nmap 将不再动态调整数值:

# nmap -A --max-parallelism 1 <target>
# nmap -A --min-parallelism 10 --max-parallelism 250 <target>

还有更多...

如果您希望 Nmap 在一定时间后停止扫描,可以设置参数--host-timeout,如下面的命令所示:

# nmap -sV -A -p- --host-timeout 5m <target>
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.00075s latency).
Skipping host scanme.nmap.org (74.207.244.221) due to host timeout
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.56 seconds

Nmap 的交互模式允许用户按键动态更改运行时变量,但在撰写本书时,尚无官方补丁可用。但是,有一个实验性补丁,于 2012 年 6 月提交,允许您动态更改--max-rate--min-rate的值。您可以在seclists.org/nmap-dev/2012/q2/883找到这个补丁。

Nmap 的扫描阶段

Nmap 扫描分为以下阶段:

  • 脚本预扫描:只有在使用选项-sC--script时才执行此阶段,它试图通过一系列 NSE 脚本检索额外的主机信息。

  • 目标枚举:在这个阶段,Nmap 解析目标并将其解析为 IP 地址。

  • 主机发现:这是 Nmap 确定目标是否在线并在网络中的阶段,通过执行指定的主机发现技术。选项-Pn可以用来跳过这个阶段。

  • 反向 DNS 解析:在这个阶段,Nmap 执行反向 DNS 查找以获取每个目标的主机名。参数-R可以用来强制 DNS 解析,参数-n可以用来跳过它。

  • 端口扫描:在这个阶段,Nmap 确定端口的状态。可以通过使用参数-sn来跳过它。

  • 版本检测:这个阶段负责检测找到的开放端口的高级版本。只有在设置了参数-sV时才执行。

  • 操作系统检测:在这个阶段,Nmap 尝试确定目标的操作系统。只有在存在选项-O时才执行。

  • 跟踪路由:在这个阶段,Nmap 对目标执行跟踪路由。只有在设置了选项--traceroute时才运行此阶段。

  • 脚本扫描:在这个阶段,根据其执行规则运行 NSE 脚本。

  • 输出:在这个阶段,Nmap 格式化所有收集到的信息,并以指定的格式返回给用户。

  • 脚本后扫描:在此阶段,将评估具有后扫描执行规则的 NSE 脚本,并有机会运行。如果默认类别中没有后扫描 NSE 脚本,则将跳过此阶段,除非指定了参数--script

调试 Nmap 扫描

如果在 Nmap 扫描期间发生意外情况,请打开调试以获取额外信息。Nmap 使用-d标志进行调试级别,并且可以设置任何介于09之间的整数:

$ nmap -p80 --script http-enum -d4 <target>

另请参阅

  • 扫描随机目标食谱

  • 跳过测试以加快长时间扫描食谱

  • 选择正确的时间模板食谱

  • 调整时间参数食谱

  • 收集 Web 服务器的签名食谱

  • Dnmap 分布式扫描食谱

收集 Web 服务器的签名

Nmap 是信息收集的事实标准工具,Nmap 脚本引擎可以完成的各种任务令人称奇。流行的服务“ShodanHQ”(shodanhq.com)提供了一个 HTTP 横幅数据库,用于分析漏洞的影响。其用户可以查找在线设备的数量,按国家/地区进行识别,并通过其服务横幅进行识别。ShodanHQ 使用其自己内置的工具来收集数据,但 Nmap 也非常适合这项任务。

在以下食谱中,我们将看到如何使用 Nmap 无限扫描 Web 服务器,并通过 Nmap 收集其 HTTP 标头。

如何操作...

打开您的终端并输入以下命令:

$ nmap -p80 -Pn -n -T4 --open --script http-headers,http-title --script-args http.useragent="A friend web crawler (http://someurl.com)",http-headers.useget -oX random-webservers.xml -iR 0

此命令将启动一个 Nmap 实例,该实例将无限运行,寻找端口 80 上的 Web 服务器,然后将输出保存到output.xml。每个打开端口 80 的主机将返回类似以下内容:

Nmap scan report for XXXX
Host is up (0.23s latency).
PORT   STATE SERVICE
80/tcp open  http
|_http-title: Protected Object
| http-headers:
|   WWW-Authenticate: Basic realm="TD-8840T"
|   Content-Type: text/html
|   Transfer-Encoding: chunked
|   Server: RomPager/4.07 UPnP/1.0
|   Connection: close
|   EXT:
|
|_  (Request type: GET)

工作原理...

以下命令将告诉 Nmap 仅检查端口 80(-p80),不进行 ping(-Pn),不进行反向 DNS 解析(-n),并使用侵略性时间模板(-T4)。如果端口 80 打开,Nmap 将运行 NSE 脚本http-titlehttp-headers--script http-headers,http-title)。

nmap -p80 -Pn -n -T4 --open --script http-headers,http-title --script-args http.useragent="A friend web crawler (http://someurl.com)",http-headers.useget -oX random-webservers.xml -iR 0

传递的脚本参数用于设置请求中的 HTTP 用户代理(--script-args http.useragent="A friendly web crawler [http://someurl.com]")并使用GET请求检索 HTTP 标头(--script-args http-headers.useget)。

最后,参数-iR 0告诉 Nmap 无限生成外部 IP 地址,并将结果保存在 XML 格式的文件中(-oX random-webservers.xml)。

还有更多...

Nmap 的 HTTP 库支持缓存,但如果您计划扫描大量主机,则有一些事情需要考虑。缓存存储在一个临时文件中,每个新请求都会增加其大小。如果此文件开始变得太大,缓存查找将需要相当长的时间。

您可以通过设置库参数http-max-cache-size=0来禁用 HTTP 库的缓存系统,如以下命令所示:

$ nmap -p80 --script http-headers --script-args http-max-cache-size=0 -iR 0

HTTP 用户代理

有一些数据包过滤产品会阻止使用 Nmap 的默认 HTTP 用户代理的请求。您可以通过设置参数http.useragent来使用不同的 HTTP 用户代理:

$ nmap -p80 --script http-enum --script-args http.useragent="Mozilla 42" <target>

另请参阅

  • 扫描 IP 地址范围食谱

  • 从文本文件中读取目标食谱

  • 扫描随机目标食谱

  • 跳过测试以加快长时间扫描食谱

  • 选择正确的时间模板食谱

  • 调整时间参数食谱

  • 调整性能参数食谱

  • Dnmap 分布式扫描食谱

使用 Dnmap 在多个客户端之间分发扫描

Dnmap 是一个在不同客户端之间分发 Nmap 扫描的优秀项目。可用的额外资源,如带宽,使我们能够在安全评估期间时间有限时更快地扫描一个或多个目标。

以下食谱将向您展示如何使用 Dnmap 执行分布式端口扫描。

准备工作

从官方 SourceForge 存储库(sourceforge.net/projects/dnmap/files/)下载最新版本的 Dnmap。

Dnmap 依赖于 Python 的库“twisted”。如果您使用基于 Debian 的系统,可以使用以下命令安装它:

#apt-get install libssl-dev python-twisted

还值得一提的是,Nmap 并不是 Dnmap 中自包含的;我们必须在每个客户端上单独安装它。有关安装 Nmap 的说明,请参阅第一章中的从源代码编译 Nmap食谱,Nmap 基础

如何操作...

  1. 创建一个包含您的 Nmap 命令的文件。每个命令必须用新行分隔。
#cat cmds.txt
nmap -sU -p1-10000 -sV scanme.nmap.org
nmap -sU -p10000-20000 -sV scanme.nmap.org
nmap -sU -p20000-30000 -sV scanme.nmap.org
nmap -sU -p40000-50000 -sV scanme.nmap.org
nmap -sU -p50001-60000 -sV scanme.nmap.org

  1. 启动dnmap_server.py
#python dnmap_server.py -f cmds.txt

以下截图显示了 Dnmap 服务器:

如何操作...

Dnmap 服务器

  1. 在您的客户端上,运行以下命令:
#python dnmap_client.py -a client1 -s 192.168.1.1

以下截图显示了 Dnmap 服务器:

如何操作...

Dnmap 客户端

它是如何工作的...

Dnmap 是由 Sebastian García“el draco”从 Mateslab(mateslab.com.ar)发布的一组 Python 脚本,用于使用服务器-客户端连接模型分发 Nmap 扫描。

它是如何工作的...

来自 mateslab.com.ar 的 Dnmap 服务器-客户端模型

命令存储在一个文件中,该文件由服务器读取。脚本dnmap_server.py处理所有传入的连接并将命令分配给客户端。每个客户端一次只执行一个 Nmap 命令。

还有更多...

此外,您可以使用参数-d [1-5]在服务器上增加调试级别,如以下命令所示:

#python dnmap_server.py -f cmds.txt -d 5

服务器通过在文件末尾重新插入命令来处理断开连接。Dnmap 创建一个名为.dnmap-trace file的文件,以跟踪当前进度状态。

如果服务器本身失去连接,客户端将自动尝试无限期重新连接,直到服务器恢复在线状态。

Dnmap 统计信息

Dnmap 服务器返回以下统计信息:

  • 执行的命令数量

  • 上次在线时间

  • 正常运行时间

  • 版本

  • 每分钟命令及其平均值

  • 用户权限

  • 当前状态

另请参阅

  • 扫描 IP 地址范围食谱

  • 从文本文件中读取目标食谱

  • 扫描随机目标食谱

  • 跳过测试以加快长时间扫描食谱

  • 选择正确的时间模板食谱

  • 调整时间参数食谱

  • 调整性能参数食谱

  • 收集 Web 服务器签名食谱