资讯详情

资讯详情

Netexec 使用详解:从安装到内网安全审计实战

先说一个我最近的经历。团队在帮一家中大型企业做内部安全基线检查需要在十几个网段、上千台主机上核实弱口令、共享资源暴露和本地管理员复用情况。之前一直用的 CrackMapExec 已经停更很久部分模块在域控版本较新的环境里直接失效后来换成了社区维护的 Netexec实测下来确实顺手很多安装依赖少、协议覆盖更全、模块体系清晰单条命令就能完成跨网段批量扫描和结果落盘。这篇 Netexec 使用教程我不会讲太多虚的直接从安装开始把命令骨架、几个高频实战场景、模块使用逻辑和我踩过的坑全部拆开讲。适合做授权红队评估、内网安全自查、企业安全基线巡检的人参考也适合从 CrackMapExec 迁移过来的同学快速上手。所有命令都建议先在隔离实验环境里验证一遍再在真实目标上执行。1. 为什么我从CrackMapExec切到了Netexec1.1 老CME停更后的社区分支选型CrackMapExec 在 2021 年后基本进入了低维护状态很多朋友还留在老版本上但实际测试中会遇到两个问题一是新版 Windows 10/11 和 Windows Server 2022 的部分认证流程变化导致原有的哈希传递、会话枚举逻辑不再稳定二是原项目的更新节奏跟不上漏洞利用和安全研究社区的需求新模块沉淀速度明显变慢。Netexec 起初是 CME 的社区分支后来逐渐发展成独立维护的安全评估工具人们通常叫它nxc。它保留了 CME 的命令风格和核心设计思想同时重构了协议层和模块注册机制整体代码更清爽。如果你之前熟练使用 CME迁移到 Netexec 的学习成本其实很低大部分命令习惯可以直接平移。1.2 Netexec的核心优势从我实际项目的体感来说Netexec 最突出的几个点协议覆盖更完整。除了 SMB、LDAP、WinRM、SSH、MSSQL还支持了更多远程服务协议日常做 Windows 和 Linux 混合内网巡检基本不需要额外起其他工具。执行命令的稳定性更好。SMB 和 WinRM 下的命令执行模块重构过遇到目标机器有杀软或执行策略限制时可以显式切换执行方式不用反复手工调整。模块生态更规范。每个模块都有明确的参数选项用--options就能查看不需要翻源码去猜关键字。日志和输出格式适合自动化。支持 JSON 输出结果统一写入~/.nxc/logs目录对接脚本做后续处理非常方便。1.3 兼容性与迁移成本Netexec 沿用 CME 的参数设计思路比如-u指定用户、-p指定密码、-H指定哈希、-M指定模块这些在 CME 里怎么用在 Netexec 里基本还是那个用法。比较大的差异是安装方式升级了推荐用pipx而不是直接pip install这样环境隔离更干净。另外部分 CME 老模块在 Netexec 里需要新的事件绑定方式如果你只使用官方内置模块完全感觉不到这个差异。2. 安装部署与第一条命令验证2.1 用pipx隔离安装NetexecNetexec 依赖不少底层库直接往系统 Python 环境里装很容易把其他工具的环境搞乱。我用的是pipx方案强依赖隔离在独立虚拟环境里入口命令暴露到 PATH后续升级也不影响其他工具。安装流程如下适合 Debian/Ubuntu 系的 Linux 发行版# 安装 pipx sudo apt update sudo apt install pipx -y pipx ensurepath # 安装 netexec pipx install netexec # 验证入口命令 nxc --help如果是 macOS 环境也可以用 Homebrew 装 Python3 和 pipx再走同样的pipx install netexec流程。Windows 上跑 WSL 是最省心的方式不建议直接在 Windows 的 Python 环境里硬装后面会遇到大量 dll 依赖问题。2.2 常见依赖报错与处理我在两台新机器上安装时都碰到过编译报错主要集中在pylibldap和cryptography这两个依赖上。如果你遇到类似报错先补系统依赖再重装sudo apt install -y libssl-dev libldap2-dev libsasl2-dev python3-dev build-essential pipx reinstall netexec另外提醒一句如果你的系统 Python 版本低于 3.10Netexec 部分新特性可能跑不起来。安装完成后用python3 --version检查一下版本太老建议先升级系统 Python。2.3 快速验证跑一个SMB存活扫描安装完成后的第一件事我用一个简单的 SMB 扫描做验证。nxc smb 192.168.80.0/24这个命令会扫描该网段所有开放 445 端口的主机并尝试获取系统版本、主机名和当前登录用户等信息。如果能看到类似[]或[][SMB]开头的结果说明基础功能正常。这个扫描不依赖任何认证凭据能快速判断目标网段的 SMB 服务暴露面。3. 命令骨架拆解协议、目标和认证参数3.1 协议子命令与目标表达式Netexec 的第一个核心概念是协议子命令。你想对哪种协议做批量操作就用对应的子命令子命令默认端口主要用途smb445Windows 主机信息枚举、共享审计、口令验证、命令执行ldap389/636域环境信息收集、域用户属性查询winrm5985/5986Windows 远程管理、命令执行ssh22Linux/网络设备认证与命令执行mssql1433数据库口令验证、SQL 查询ftp21FTP 服务匿名与口令验证目标表达式可以使用单个 IP、CIDR、主机名也可以写成文件每行一个目标方便批量管理nxc smb 192.168.80.10 nxc smb 192.168.80.0/24 nxc smb hosts.txt我习惯用文件方式维护目标列表特别是在跨部门项目里哪些网段已经授权、哪些不能碰必须提前在目标文件里划清边界避免误扫。3.2 认证凭据的三种传递方式Netexec 的认证参数很直观平时最常用的三种明文密码-u admin -p Pssw0rd哈希传递-H NThash或--hashes LMHash:NThashKerberos 票据-K配合环境中导出的 ccache 文件有几个容易踩的细节。第一密码包含特殊字符时一定要用单引号包住避免被 shell 解释第二哈希传递时如果只给 NT 哈希直接写在-H后面即可如果给完整 LM:NT 格式用--hashes更稳妥第三在内网测试 Windows 主机时如果目的是验证本地管理员密码复用必须加--local-auth否则默认会按域账号去认证结果会出现大量假阴性。3.3 输出格式与日志落盘Netexec 默认的输出是表格形式信息密度高但有时候行宽溢出在自动化脚本里不好解析。建议在需要对接后续处理时加上--json参数nxc smb 192.168.80.0/24 -u admin -p Pssw0rd --jsonJSON 输出会保留主机地址、协议、认证成功状态、模块返回数据等结构化字段我可以直接用jq过滤比如只提取认证成功的 IPnxc smb 192.168.80.0/24 -u admin -p Pssw0rd --json | jq -r .[] | select(.success true) | .host所有扫描记录和攻击记录默认落在~/.nxc/logs目录。后面对比前后两次扫描结果时直接查这个目录里的历史记录即可。4. 场景一内网资产盘点与共享目录审计4.1 批量识别主机系统与开放端口在做内网安全自查时我经常先跑一轮无凭据的 SMB 扫描快速摸清哪些主机开放了 SMB、系统版本是什么。这个动作很轻量不会对目标产生明显流量特征适合项目初期的资产摸底。nxc smb targets.txt从输出里能直接看到主机名、系统版本、是否支持 SMBv1、当前 SMB 会话数等信息。系统版本字段对后续漏洞判定特别有用比如发现 Windows Server 2003 这类老系统就需要在报告里单独标记提醒对方尽快隔离或升级。4.2 共享枚举与匿名访问验证拿到一组有效凭据后我习惯先做共享枚举。SMB 服务通常会暴露出不少共享目录包括普通用户的个人目录甚至是错误配置的管理共享。有凭据的情况下共享枚举命令nxc smb targets.txt -u guest -p --shares这个命令会尝试使用guest空密码连接所有目标列出可访问的共享名、类型和访问权限。实际测试中经常能遇到共享目录对所有用户开放或只凭 guest 就能写入的情况这类问题在中大企业里并不少见。对于没有凭据的场景也可以先试空会话枚举命令同样nxc smb targets.txt -u -p --shares如果目标允许空会话访问输出的共享列表里会明确标出可读可写权限。这里要提醒一下空会话在现代 Windows 上默认关闭但部分硬编码共享还是会暴露值得顺手验证。4.3 spider_plus模块自动抓取敏感文件共享枚举只是第一步真正麻烦的是共享目录里存了什么敏感文件。默认的--shares只告诉你共享的存在和权限但没法自动去翻文件。Netexec 内置的spider_plus模块能解决这个问题它会遍历指定共享目录根据关键字匹配文件名和文件内容把结果落成 JSON 文件。一个我在项目中经常用的示例nxc smb targets.txt -u admin -p Pssw0rd -M spider_plus --options DIRADMIN$DIRADMIN$指定遍历 C 盘管理共享模块会在授权范围内搜索文件名或内容包含密码、凭据、密钥等关键字的文件输出结果保存在当前目录的spider_plus目录下。处理共享目录多的目标时可以适当加大线程数但要注意网络带宽和目标的 IO 负载别把共享存储扫挂了。5. 场景二口令安全测试和哈希传递验证5.1 密码喷洒的正确姿势口令安全测试里最容易犯错的就是方式太粗暴。当你手头有一份用户名字典对着一个目标反复测试大量密码很容易触发账户锁定策略造成业务账号被锁死。正确做法是使用密码喷洒思路拿少量固定密码对所有用户名统一测试一次再切换下一个密码。Netexec 支持这种场景核心参数是--continue-on-success意思是即使某个用户名尝试成功也继续用相同密码对其他用户名测试不会中途终止整轮喷洒。一个典型的密码喷洒命令nxc smb 192.168.80.0/24 -u users.txt -p Spring2024! --continue-on-success -t 1这里我把线程数降到 1目的就是控制喷涂速度尽量降低账户锁定风险。如果你面对的目标网段机器很多可以适当提高到 10但一定要跟客户确认锁定策略再动手。5.2 哈希传递Pass-the-Hash复现哈希传递是内网横向移动常用的技术。通常的思路是拿到一台主机的本地管理员权限后从内存或系统里提取出密码哈希再用这个哈希去尝试访问其他同密码的主机。Netexec 原生支持哈希传递不需要额外工具。流程上分两步。第一步在已取得权限的主机上用--sam参数抓取本地账户哈希nxc smb 192.168.80.10 -u admin -p Pssw0rd --sam输出里会出现本地用户对应的 NT 哈希。第二步用提取出的哈希在其他主机上验证nxc smb 192.168.80.0/24 -u administrator -H aad3b435b51404eeaad3b435b51404ee:xxxxxx --local-auth这里再强调一下--local-auth的作用。不加这个参数Netexec 默认会把administrator当作域账号去认证对工作组机器和本地管理员账号基本都会失败。在横向移动测试里本地管理员密码复用是非常常见的问题用哈希传递能快速定位哪些主机存在同密码风险。5.3 如何判定本地管理员复用问题判定本地管理员复用不需要手动逐台登录直接跑一条命令就能把结果汇总nxc smb 192.168.80.0/24 -u administrator -H NT哈希 --local-auth --json执行完成后凡是输出中标注认证成功的主机都说明存在同一组管理员凭据或密码哈希复用。这个结果可以直接导出到报告里作为整改项。如果你发现同一网段里能通过同一条哈希登录三分之一以上的机器那基本可以断定该企业域内主机存在泛化的本地管理员密码统一部署问题。6. 场景三远程命令执行与执行方式选择6.1 在SMB上执行命令的常用写法SMB 协议本身不直接提供远程命令执行能力Netexec 是借助 Windows 的服务管理等远程机制实现的。日常用法很简单nxc smb targets.txt -u admin -p Pssw0rd -x whoami-x参数用于执行单条命令默认通过 cmd 执行。如果你想执行 PowerShell 命令可以换成大写-X例如nxc smb targets.txt -u admin -p Pssw0rd -X Get-Process需要注意命令执行的结果能否拿到取决于目标的远程管理端口和权限配置。域环境里本地管理员权限通常够用但遇到 UAC 远程限制或安全策略加固过的主机即使账户是管理员也可能返回拒绝访问。6.2 WinRM和SSH协议的执行差异如果你的目标是启用了 WinRM 服务的主机用 WinRM 子命令执行命令会更稳。WinRM 执行方式不依赖管理员共享比如 C$权限只要账号在远程管理用户组里就行所以在一些禁止 admin 共享的环境中很实用nxc winrm 192.168.80.10 -u admin -p Pssw0rd -x whoamiSSH 子命令则可以审计 Linux 主机尤其是混合内网里存在大量 Linux 服务器时nxc ssh 192.168.80.11 -u root -p Pssw0rd -x id hostnameSMB 命令执行失败时我通常会切换到 WinRM 再试一次。Windows 上的执行环境不同同一组凭据可能就在 WinRM 上成功执行。对 Linux 目标做批量巡检时SSH 子命令的速度和兼容性都比自己写脚本要省事得多。6.3 exec-method切换与失败排查Netexec 在 SMB 执行命令时内部支持多种执行方法常见的有atexec、smbexec、wmiexec等。默认情况下工具会自动选择但自动选择不总是最优如果你发现执行命令超时或返回空可以手动指定nxc smb 192.168.80.10 -u admin -p Pssw0rd -x whoami --exec-method atexec选执行方法的核心逻辑是atexec依赖目标的任务计划程序服务适合绕过部分杀软执行链smbexec和wmiexec走不同的 Windows 管理接口有些安全策略会拦截其中一个但放行另一个。现场排查时把三种方法各跑一遍基本能定位是权限问题还是策略拦截问题。7. 模块系统内置模块、参数与扩展思路7.1 常用内置模块清单与适用场景Netexec 的模块系统是它最值钱的部分。你可以在任意协议子命令下使用-M指定模块nxc smb targets.txt -u admin -p Pssw0rd -M enum_av这个模块会远程枚举目标主机上运行的安全软件进程帮我快速判断哪些终端有防护、哪些完全裸奔。类似的高频模块还有spider_plus共享目录内容巡视和关键字过滤适合找敏感文件。enum_loggedon_users枚举远程主机上当前登录的用户适合判断账号使用情况。enum_av识别终端安全软件进程辅助评估防护覆盖。ldap-domain-trust在 LDAP 协议下检查域信任关系。每个模块能做什么在输出帮助信息里都有明确说明。第一次用某个模块之前务必先看一遍模块输出格式。7.2 模块选项的传递方式模块不是一个个黑盒它们大多支持自定义参数。查看方式很简单nxc smb targets.txt -u admin -p Pssw0rd -M spider_plus --options执行后能看到模块支持的参数列表和默认值。传参的语法是-M 模块名 --options KEY1VAL1 KEY2VAL2多个键值对之间用空格分隔。例如让spider_plus只巡特定目录并过滤特定后缀nxc smb targets.txt -u admin -p Pssw0rd -M spider_plus --options SHAREC$ MAX_FILE_SIZE200000 IGNORE_DIRNONE这种参数化设计让一个模块可以应对不同场景不用频繁改代码。7.3 自写模块的基本结构如果你有特殊需求比如定期抓取某类配置文件内容并统计可以考虑写一个简单模块。Netexec 的模块本质上是 Python 类需要实现两个关键方法一个是定义模块参数另一个是登录成功后的动作。基本骨架类似这样from netexec.modules.base import BaseModule class MyModule(BaseModule): name my_module description 示例模块 options { KEYWORD: password } def on_login(self, context, connection): target connection.host context.log.info(fTarget: {target})在on_login里connection对象提供了当前协议的连接句柄可以继续调用 SMB、LDAP 接口完成自定义操作。当然线上环境写模块时要注意异常捕获避免一台主机报错就中断整个批量任务。8. 我实际踩过的坑和使用建议8.1 网络因素导致的假阴性Netexec 的扫描结果依赖目标端口可达性和认证协议握手。如果目标主机的防火墙只允许指定来源 IP 访问 445或者中间网络设备对高频访问做了限流就会大量出现超时和认证失败。处理办法有两个一是扫描前先确认目标网段的 445 端口连通性可以用nmap -p445做一轮预热二是执行 Netexec 时增加超时时间减少误报。nxc smb ... --timeout 10这种方式在跨网段测试时非常管用能让延迟较高的主机正常返回结果。8.2 凭据格式和认证失败的常见原因凭据格式一直是新手容易卡住的地方。密码带空格、带特殊符号时如果不加引号会被 shell 拆成多个参数。哈希传递时如果你只给 NT 哈希要确保哈希长度是 32 位否则会识别失败。认证失败的另一个高频原因是混淆了域账号和本地账号。域内主机的本地管理员密码测试记得加--local-auth用域账号批量验证时最好用-d指定域名避免 Netexec 自动把用户名里带不带域名的情况搞混。8.3 自动化脚本中的稳定输出技巧我后期跑大规模巡检时基本不用屏幕上的彩色表格而是把所有结果统一用--json输出再写入临时文件后面用 Python 或jq统一处理。一个建议的命令组合nxc smb targets.txt -u admin -p Pssw0rd --shares --json smb_result.json然后通过jq提取access True的共享路径自动生成整改工单。这样做的优势是结果可回溯后期复盘时不用重新扫描。8.4 关于授权和合规的底线建议写到这里必须强调一句Netexec 这类工具的功能决定了它只能用在有明确授权的环境中。我每次执行命令前都会先确认目标网段是否通过了客户书面的授权审批并且在命令里严格限定目标范围避免扫到不该扫的主机。对于企业安全团队来说建议先把目标范围写成文件用nxc smb authorized_targets.txt的方式加载而不是手工输入一长串网段。这样既方便留痕也能最大程度防止误操作。安全测试的价值是发现并修复问题而不是制造问题边界感永远要在工具能力之前。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →