本章向您展示了如何做一些在许多情况下可能是非法的、不道德的、违反服务条款的或不是好主意的事情。这里提供的信息可用于保护您免受威胁,并使您自己的系统更安全。在遵循这些说明之前,请确保您站在法律和道德的正确一边。。。善用你的力量!
在本章中,我们将介绍:
- 列出 MySQL 数据库
- 列出 MySQL 用户
- 列出 MySQL 变量
- 在 MySQL 服务器中查找密码为空的根帐户
- 强制使用 MySQL 密码
- 检测 MySQL 服务器中的不安全配置
- 强制使用 Oracle 密码
- 强制使用 Oracle SID 名称
- 检索 MS SQL server 信息
- 强制使用 MS SQL 密码
- 正在转储 MS SQL server 的密码哈希
- 在 MS SQL Server 上通过命令 shell 运行命令
- 在 MS SQL Server 上查找密码为空的系统管理员帐户
- 列出 MongoDB 数据库
- 检索 MongoDB 服务器信息
- 列出 CouchDB 数据库
- 检索 CouchDB 数据库统计信息
Web 应用程序必须存储不同类型的信息。根据具体情况,可能有数百万条记录需要存储在某个地方,而这正是数据库的作用所在。数据库服务器至关重要,因为它们提供了一种方便的信息管理方式,编程 API 几乎可用于任何语言和数据库类型。
Nmap NSE 增加了对许多数据库服务器的支持。系统管理员会发现,在 Nmap 的帮助下,我们可以在处理大量数据库服务器时自动执行多个任务,例如运行查询来通知我们状态。另一方面,确保数据库服务器的安全必须小心,并且与确保 web 服务器的安全一样重要。Nmap 还通过支持自动操作(如检查空的根密码和不安全的配置)来帮助我们做到这一点。
本章介绍了最常见的关系数据库(如 MySQL、MS SQL 和 Oracle)和nosql
数据库(如 CouchDB 和 MongoDB)的不同 NSE 脚本。我们首先介绍一些简单的任务,例如检索状态信息和列出数据库、表和实例。我们还介绍了暴力密码审计,因为在渗透测试评估期间,在数据库中查找弱密码或在某些情况下根本没有密码是常见的情况。在本章中,我还将介绍我最喜欢的 NSE 脚本之一,该脚本是为使用 CIS MySQL 安全基准的一部分来审计不安全的配置而编写的。在本章之后,我希望您将学习如何在这些功能强大的 NSE 脚本的帮助下对您的基础设施实施不同的安全性和完整性检查。
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 安装中的数据库。
若要在发现空根帐户时尝试枚举数据库,可以使用以下命令:
# 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 服务器中查找密码为空的根帐户的方法
- 暴力强制 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 服务器中的用户名。如果没有使用脚本参数mysqluser
和mysqlpass
设置身份验证凭据,它将尝试使用mysql-brute
和mysql-empty-password
的结果。
要使用空密码的根帐户枚举 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 服务器中查找密码为空的根帐户的方法
- 暴力强制 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 提交,它使用脚本参数mysqluser
和mysqlpass
作为针对 MySQL 服务器的身份验证凭据,尝试枚举系统变量。
如果 MySQL 服务器在 3306 以外的其他端口上运行,我们可以使用 Nmap 的服务检测或使用-p
参数手动设置端口。
$ nmap -sV --script mysql-variables <target>$ nmap -p5555 --script mysql-variables <target>
要使用空根密码从 MySQL 服务器检索数据库、用户名和变量,请使用以下命令:
$ nmap -sV --script mysql-variables,mysql-empty-password,mysql-databases,mysql-users <target>
- 列出 MySQL 数据库配方
- 列出 MySQL 用户配方
- 在 MySQL 服务器中查找密码为空的根帐户的方法
- 暴力强制 MySQL 密码配方
- 检测 MySQL 服务器中的不安全配置配方
新的系统管理员经常犯错误,将 MySQL 服务器的根帐户保留为没有密码。这是一个明显的安全漏洞,可被攻击者利用。渗透测试人员和系统管理员需要在坏人之前检测这些易受攻击的安装。
此配方将向您展示如何使用 Nmap 检查 MySQL 服务器上的空根密码。
打开终端并输入以下命令:
$ nmap -p3306 --script mysql-empty-password <target>
如果账户root
或anonymous
密码为空,则会在脚本结果中显示:
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 服务器,并使用空密码尝试帐户root
和anonymous
。
要尝试自定义用户名列表,您需要修改脚本目录中的 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 服务器中的不安全配置配方
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 库unpwdb
和brute
。这些库有几个脚本参数,可用于优化蛮力密码审计。
-
要使用不同的用户名和密码列表,请分别设置参数
userdb
和passdb
:$ 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
库支持改变攻击中使用的用户名/密码组合的不同模式。可用的模式有:
-
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 服务器中查找密码为空的根帐户的方法
- 检测 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>
将审查每个对照,并在结果中包括一个图例PASS
、FAIL
或REVIEW
:
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
如果发现 MySQL 服务器在端口 3306 上运行,脚本参数-p3306 --script mysql-audit
告诉 Nmap 启动 NSE 脚本mysql-audit
。
脚本mysql-audit
由 Patrik Karlsson 开发,它使用部分基准 CIS MySQL 检查不安全的配置。它也非常灵活,允许通过指定备用规则进行自定义检查。
如果您的 MySQL 服务器有除root
和debian-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 密码配方
作为组织策略的一部分,管理多个数据库的系统管理员通常需要检查弱密码。渗透测试人员还利用弱密码获得未经授权的访问。为了方便起见,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 库unpwdb
和brute
。这些库有几个脚本参数,可用于优化蛮力密码审计。
-
要使用不同的用户名和密码列表,请分别设置参数
userdb
和passdb
:$ 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>
brute 库支持改变攻击中使用的用户名/密码组合的不同模式。可用的模式有:
-
user
:对于userdb
中列出的每个用户,passdb
中的每个密码都将在$ nmap --script oracle-brute --script-args brute.mode=user <target>
中进行尝试
-
pass
:对于passdb
中列出的每个密码,userdb
中的每个用户都将进行$ nmap --script oracle-brute --script-args brute.mode=pass <target>
的试用
-
creds
:这需要额外的参数brute.credfile
$ nmap --script oracle-brute --script-args brute.mode=creds,brute.credfile=./creds.txt <target>
- 暴力强制 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 技术的基础架构中很常见,Nmap 可以帮助我们从中收集信息。
此配方显示如何从 MS SQL server 检索信息。
要使用 Nmap 从 MS SQL server 检索信息,请运行以下命令:
$ nmap -p1433 --script ms-sql-info <target>
MS SQL server 信息(例如实例名称、版本号和端口)将包含在脚本输出中:
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 Server 通常在端口 1433 上运行。如果 MS SQL server 正在该端口上运行,我们使用参数-p1433 --script ms-sql-info
来启动 NSE 脚本ms-sql-info
。
剧本ms-sql-info
由克里斯·伍德伯里和托马斯·布坎南提交。它连接到 MS SQL server 并检索实例名称、版本名称、版本号、产品名称、service pack 级别、修补程序列表、TCP/UDP 端口,以及它是否群集。它从 SQL Server Browser 服务(如果可用)(UDP 端口 1434)或从服务的探测器收集此信息。
如果端口 445 打开,您可以使用它通过管道检索信息。您需要设置参数mssql.instance-name
或mssql.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
NSE 脚本ms-sql-brute
、ms-sql-config.nse
、ms-sql-empty-password
、ms-sql-hasdbaccess.nse,ms-sql-info.nse
、ms-sql-query.nse
、ms-sql-tables.nse
和ms-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 server配方的密码散列
- 通过 MS SQL Server上的命令 shell 运行命令
- 在 MS SQL Server上查找密码为空的系统管理员帐户的方法
作为组织安全策略的一部分,系统管理员和渗透测试人员通常需要检查弱密码。Nmap 可以帮助我们对 MS SQL Server 执行字典攻击。
此配方显示了如何使用 Nmap 对 MS SQL Server 执行暴力密码审计。
要对 MS SQL server 执行暴力密码审计,请运行以下 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 Server 通常在 TCP 端口 1433 上运行。如果发现 MS SQL server 在端口 1433 上运行,参数-p1433 --script ms-sql-brute
将启动 NSE 脚本ms-sql-brute
。
剧本ms-sql-brute
是帕特里克·卡尔森写的。它对 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-all
或mssql.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 库unpwdb
和brute
。这些库有几个脚本参数,可用于优化蛮力密码审计。
-
要使用不同的用户名和密码列表,请设置参数
userdb
和passdb
:$ 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>
brute 库支持改变攻击中使用的用户名/密码组合的不同模式。可用的模式有:
-
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 server 信息配方
- 正在转储 MS SQL server配方的密码散列
- 通过 MS SQL Server上的命令 shell 运行命令
- 在 MS SQL Server 上查找密码为空的系统管理员帐户配方
在获得对 MS SQL server 的访问权限后,我们可以转储 MS SQL server 的所有密码哈希,以危害其他帐户。Nmap 可以帮助我们以破解工具John the Ripper可用的格式检索这些散列。
此配方显示了如何使用 Nmap 转储 MS SQL 服务器的可破解密码哈希。
要使用空的系统管理员密码转储 MS SQL server 的所有密码哈希,请运行以下 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 Server 通常在 TCP 端口 1433 上运行。参数-p1433 --script ms-sql-empty-password,ms-sql-dump-hashes
启动脚本ms-sql-empty-password
,该脚本找到一个空的根 sysadmin 帐户,然后如果发现 MS SQL server 在端口 1433 上运行,则运行脚本ms-sql-dump-hashes
。
脚本ms-sql-dump-hashes
由 Patrik Karlsson 编写,其功能是检索 MS SQL Server 的密码散列,其格式可供破解工具(如 John The Ripper)使用。此脚本依赖于mssql
库。您可以在http://nmap.org/nsedoc/lib/mssql.html
了解更多信息。
如果 SMB 端口已打开,您可以通过设置参数mssql.instance-all
或mssql.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 server 信息配方
- 暴力强制 MS SQL 密码配方
- 通过 MS SQL Server上的命令 shell 运行命令
- 在 MS SQL Server 上查找密码为空的系统管理员帐户配方
MS SQL Server 有一个名为xp_cmdshell
的存储过程。此功能允许程序员通过 MS SQL server 执行命令。启用此选项时,Nmap 帮助我们执行自定义 shell 命令。
此配方显示了如何使用 Nmap 通过 MS SQL Server 运行 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 Server 通常在 TCP 端口 1433 上运行。参数--script-args 'mssql.username="<user>",mssql.password=""' --script ms-sql-xp-cmdshell -p1433
使 Nmap 启动脚本ms-sql-xp-cmdshell
,然后设置在端口 1433 上运行 MS SQL server 时要使用的身份验证凭据。
剧本ms-sql-xp-cmdshell
是帕特里克·卡尔森写的。它试图通过 MS SQL Server 上的存储过程xp_cmdshell
运行 OS 命令。此脚本依赖于mssql
库。其文件可在上找到 http://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 server 的网络配置:
$ nmap --script ms-sql-xp-cmdshell,ms-sql-empty-password -p1433 <target>
- 检索 MS SQL server 信息配方
- 暴力强制 MS SQL 密码配方
- 正在转储 MS SQL server配方的密码散列
- 在 MS SQL Server上查找密码为空的系统管理员帐户的方法
渗透测试人员通常需要检查管理帐户是否有弱密码。在 Nmap NSE 的帮助下,我们可以轻松地检查没有主机(或多个主机)具有密码为空的 sysadmin 帐户。
这个方法教我们如何使用 Nmap 查找系统管理员密码为空的 MS SQL Server。
要查找具有空sa
帐户的 MS SQL Server,请打开终端并输入以下 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
如果发现 MS SQL server 在端口 1433 上运行,参数-p1433 --script ms-sql-empty-password
使 Nmap 启动 NSE 脚本ms-sql-empty-password
。
剧本ms-sql-empty-password
由帕特里克·卡尔松提交,克里斯·伍德伯里改进。它尝试使用用户名sa
(系统管理员帐户)和空密码连接到 MS SQL server。
如果端口 445 打开,您可以使用它通过管道检索信息。您需要设置参数mssql.instance-name
或mssql.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
NSE 脚本ms-sql-brute
、ms-sql-config.nse
、ms-sql-empty-password
、ms-sql-hasdbaccess.nse,ms-sql-info.nse
、ms-sql-query.nse
、ms-sql-tables.nse
和ms-sql-xp-cmdshell.nse
可能会尝试连接到扫描中未包含的端口。要限制 NSE 仅使用扫描端口,请使用参数mssql.scanned-ports-only
:
$ nmap -p1433 --script-args mssql.scanned-ports-only --script ms-sql-* -v <target>
- 检索 MS SQL server 信息配方
- 暴力强制 MS SQL 密码配方
- 正在转储 MS SQL server配方的密码散列
- 通过 MS SQL Server上的命令 shell 运行命令
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
如果发现 MongoDB 服务器在端口 27017(-p 27017 --script mongodb-databases
上运行,我们将启动 NSE 脚本mongodb-databases
。
脚本mongodb-databases
由 Martin Holst Swende 提交,它试图列出 MongoDB 安装中的所有数据库。
MongoDB 文档位于http://www.mongodb.org/display/DOCS/Home 。
此脚本依赖于库mongodb
,其文档可在中找到 http://nmap.org/nsedoc/lib/mongodb.html 。
- 检索 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
如果发现服务在端口 27017 上运行,参数-p 27017 --script mongodb-info
使 Nmap 启动 NSE 脚本mongodb-info
。
剧本mongodb-info
是由马丁·霍尔斯特·斯温德写的。它返回服务器信息,包括 MongoDB 数据库的状态和构建详细信息。
MongoDB 文档位于http://www.mongodb.org/display/DOCS/Home 。
此脚本依赖于库mongodb
,其文档可在中找到 http://nmap.org/nsedoc/lib/mongodb.html 。
- 列出 MongoDB 数据库配方
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,如果发现 CouchDB HTTP 服务在端口 5984 上运行,则启动 NSE 脚本couchdb-databases
。
脚本couchdb-databases
由 Martin Holst Swende 编写,它列出了 CouchDB 服务中所有可用的数据库。查询 URI/_all_dbs
,从返回的数据中提取信息:
*``` ["nmap","packtpub"]
## 还有更多。。。
您可以通过访问[找到 CouchDB HTTP 使用的 API 的更多信息 http://wiki.apache.org/couchdb/HTTP_database_API](http://wiki.apache.org/couchdb/HTTP_database_API) 。
## 另见
* *检索 CouchDB 数据库统计*配方
# 检索 CouchDB 数据库统计信息
CouchDB HTTP 服务器可以返回对系统管理员非常宝贵的统计信息。此信息包括每秒请求数、大小和其他有用的统计信息。幸运的是,Nmap 提供了一种检索此信息的简单方法。
此配方描述了如何使用 Nmap 检索 CouchDB HTTP 服务的数据库统计信息。
## 怎么做。。。
打开终端并使用以下参数运行 Nmap:
结果将包含在脚本输出部分:
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`
您可以在[了解有关 CouchDB HTTP 服务器运行时统计信息的更多信息 http://wiki.apache.org/couchdb/Runtime_Statistics](http://wiki.apache.org/couchdb/Runtime_Statistics) 。
## 另见
* *列出 CouchDB 数据库*配方*