Skip to content

Latest commit

 

History

History
1286 lines (845 loc) · 42.4 KB

File metadata and controls

1286 lines (845 loc) · 42.4 KB

五、审计数据库

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

在本章中,我们将介绍:

  • 列出 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 数据库

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 用户

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的结果。

还有更多。。。

要使用空密码的根帐户枚举 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 变量

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>

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

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

另见

  • 列出 MySQL 数据库配方
  • 列出 MySQL 用户配方
  • 在 MySQL 服务器中查找密码为空的根帐户的方法
  • 暴力强制 MySQL 密码配方
  • 检测 MySQL 服务器中的不安全配置配方

在 MySQL 服务器中查找密码为空的根帐户

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

此配方将向您展示如何使用 Nmap 检查 MySQL 服务器上的空根密码。

怎么做。。。

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

$ 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库支持改变攻击中使用的用户名/密码组合的不同模式。可用的模式有:

  • 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 服务器中的不安全配置配方

检测 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 

它是如何工作的。。。

如果发现 MySQL 服务器在端口 3306 上运行,脚本参数-p3306 --script mysql-audit告诉 Nmap 启动 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>
    
    

暴力模式

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 名称

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 server 信息

系统管理员和渗透测试人员通常需要收集尽可能多的主机信息。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-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 server配方的密码散列
  • 通过 MS SQL Server上的命令 shell 运行命令
  • 在 MS SQL Server上查找密码为空的系统管理员帐户的方法

强制使用 MS SQL 密码

作为组织安全策略的一部分,系统管理员和渗透测试人员通常需要检查弱密码。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-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>
    
    

暴力模式

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 的访问权限后,我们可以转储 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-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 server 信息配方
  • 暴力强制 MS SQL 密码配方
  • 通过 MS SQL Server上的命令 shell 运行命令
  • 在 MS SQL Server 上查找密码为空的系统管理员帐户配方

通过 MS SQL Server 上的命令 shell 运行命令

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上查找密码为空的系统管理员帐户的方法

在 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-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 server 信息配方
  • 暴力强制 MS SQL 密码配方
  • 正在转储 MS SQL server配方的密码散列
  • 通过 MS SQL Server上的命令 shell 运行命令

列出 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 

它是如何工作的。。。

如果发现 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 服务器信息

在 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 数据库

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:

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`

您可以在[了解有关 CouchDB HTTP 服务器运行时统计信息的更多信息 http://wiki.apache.org/couchdb/Runtime_Statistics](http://wiki.apache.org/couchdb/Runtime_Statistics) 。

## 另见

*   *列出 CouchDB 数据库*配方*