Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/crypt0p3g/adnullenum
防御工具OSINT (开源情报)侦察漏洞分析信息收集网络安全渗透测试红队
GitHubcrypt0p3g/adnullenum

adnullenum

一次性的匿名 Active Directory 枚举,通过 SAMR 和 LSARPC 进行——空会话、无需凭据,并输出结构化、可复用的结果。

查看仓库
377103天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

adnullenum

一个针对匿名(null)会话的单次遍历 Active Directory 枚举器, 使用 \samr 和 \lsarpc 命名管道。无需凭据。

它做的事情经典工具都能做。它所做的就是把所有信息集中在 一次运行中收集,并清晰地呈现结果。在一次渗透中,你没有域账户就进入, 通过 DNS 找到 DC,然后想要获得全貌——账户、 每个用户的详细信息、组、策略以及 LSA/DNS 相关信息——而不必拼凑 rpcclient 会话或几个独立的脚本,然后手动解析它们的 stdout。这个工具为你完成这一遍 并写出结构化、可复用的输出:

  • 一条命令涵盖域信息、策略、RID 发现、每个用户的详细信息和 组,选择可行的方法,并在 SAMR 被锁定时优雅降级(参见 如何比较 和 当 SAMR 被锁定时)。
  • 输出为下一个工具而构建。 带时间戳的运行文件夹,包含 txt / csv / (可选)json、一个 manifest.json、可直接使用的 userlist.txt / computerlist.txt,以及一个保存的 RID 列表,你可以复用它,而不必暴力枚举 两次。
  • 标记出有趣的账户(可进行 AS-REP 烘焙、不需要密码、无约束委派等)。

请仅在你拥有或明确授权测试的系统上运行此工具。 未经许可枚举他人的目录是不对的, 而且根据你所在的地区,这可能违法。

有两个行为完全相同的版本。使用你拥有的那个库:

  • adnullenum.py — 基于 impacket 构建。

它收集什么

  • 用户、计算机和组。 机器账户(以 $ 结尾的那些)被 与真实用户分开。
  • 完整的每个用户详细信息。 描述、组成员身份、密码和登录 时间戳、账户标志以及登录限制(登录时间、允许的 工作站、过期时间)。
  • 组及其成员,解析为真实名称。
  • 域和策略信息。 域名、SID、服务器角色、实际的 用户/组/计算机数量,以及密码和锁定策略。
  • LSA / DNS 详细信息。 DNS 域和林名称、域 GUID、域 SID 以及 任何信任——即使 SAMR 本身被锁定,这些通常也能返回。

它还会为你标记有趣的账户:例如“不需要密码”、“密码永不过期”、可进行 AS-REP 烘焙、无约束委派、 从未登录过,或描述中提到了密码。

由此自然得出的几件事:

  • 你收集的用户名就是用于 AS-REP 烘焙的列表。
  • 计算机名就是用于 Windows 2000 之前机器账户 检查的列表。

如何比较

这里的一切都是标准的匿名 SAMR/LSARPC,现有工具 已经能获取相同的数据。这是一个便利封装,而不是新能力, 所以值得了解替代方案:

  • enum4linux-ng 是最接近的 等价工具:null 会话 SAMR + LSA、RID 循环、策略、用户和组。如果你 想要一个成熟、广泛使用的工具,就用它。adnullenum 与它大量重叠。
  • NetExec(--rid-brute、--users、 --pass-pol)在更大的框架内覆盖相同的枚举。
  • impacket 将其作为两个脚本提供:samrdump.py(用户/组/别名 + 每个用户详细信息)和 lookupsid.py(通过 LSA 进行 RID 循环)。没有单次运行,没有 SAMR→LSA 回退,仅 stdout。
  • rpcclient 暴露底层调用(queryuser、enumdomusers、 querydominfo、lsaquery、lookupsids……),但是交互式的且仅 stdout。 它的 enumdomusers 按名称列出标准用户,没有机器($)账户,而 完整详细信息需要一次一个 。没有内置的 RID 循环,它 无法恢复计算机或绕过受限枚举。参见 。

adnullenum 增加的是打包:一次 null 会话运行而不是多个工具, SAMR 优先并可选 LSA 回退,精选的有趣账户标志,以及 整洁的多格式输出,你可以直接交给下一步或稍后重新打开。 如果这个工作流适合你的工作方式,就用它;如果你更想要一个久经考验的工具, 就用 enum4linux-ng 或 NetExec。


安装

你需要 Python 3.9+ 和一个 SMB 库。虚拟环境可以保持整洁:

root@kitploit:~
# clone / copy the files, then from the project folder:
python3 -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate

pip install impacket              # for adnullenum.py

就这样。运行 python3 adnullenum.py --help 查看所有内容。


如何使用

一切都通过单个 --mode 运行。默认是 recon,这是 首先运行的安全选择。

root@kitploit:~
# 1. Is anonymous access open, and how big is this domain?
python3 adnullenum.py 10.0.0.10

# 2. Grab everything
python3 adnullenum.py 10.0.0.10 --mode full

# 3. Just the account inventory, wider net for a big domain
python3 adnullenum.py 10.0.0.10 --mode rids --start-rid 1000 --max-rid 200000

# 4. Go slower to stay quiet
python3 adnullenum.py 10.0.0.10 --mode users --sleep 1 --jitter 40

# 5. Also write JSON (txt and csv are always written)
python3 adnullenum.py 10.0.0.10 --mode full --json

查找账户

如果域不允许你直接列出用户(很常见),该工具会回退到 RID 循环:它要求 DC 以 1000 个为一批将账户 ID 转换为名称。默认情况下,它会 向上扫描,直到找到 DC 声称存在的所有内容,或者直到连续 5000 个 ID 返回空。你可以将其固定到精确 范围:

root@kitploit:~
python3 adnullenum.py 10.0.0.10 --mode rids --range 500-50000

当 SAMR 被锁定时

一些 DC 完全拒绝匿名 SAMR(enumdomains 和 RID 转换返回 ACCESS_DENIED)。运行不会放弃:

  • LSA recon 始终运行。 域名、SID,通常还有林、GUID 和 信任来自 \lsarpc,它经常在 SAMR 不响应时响应。
  • RID 循环可以回退到 LSA(可选)。 如果 SAMR 不转换 RID 并且 你传递 --lsa-fallback,该工具会使用域 SID 通过 LSA LsarLookupSids 重试相同的扫描,这仍然给你账户 清单(名称和类型,包括计算机)。它默认关闭,因为 这是第二次暴力枚举;没有该标志,运行会在 recon 停止并 说明原因。
  • 深入的每个用户详细信息和组成员身份需要 SAMR。 当 SAMR 被阻止时 这些阶段会被跳过并记录;你仍然获得名称/类型清单。
  • 如果 LSA 查找也被阻止,运行会降级为仅 recon(域名 和 SID)。在这样的目标上,没有匿名工具能枚举账户。

不进行两次暴力枚举

查找账户是慢的部分,所以该工具在 每次运行的输出文件夹中保存列表(rids.txt)。用 --session 将后续运行指向该文件夹, 它会跳过暴力枚举并复用你已经找到的内容:

root@kitploit:~
python3 adnullenum.py 10.0.0.10 --mode rids
# -> output/20260917-1530_10.0.0.10_rids/

python3 adnullenum.py 10.0.0.10 --mode users \
    --session output/20260917-1530_10.0.0.10_rids

--session 接受上一次运行的文件夹。(--rid-file 从每行一个 RID 的纯文本文件做同样的事。)


输出

每次运行都会在 output/ 下生成一个带时间戳的文件夹:

root@kitploit:~
output/20260917-1530_10.0.0.10_full/
├── rids.txt          # the account IDs found (reuse with --session)
├── manifest.json     # summary: counts, interesting accounts, run details
├── access_denied.txt # only if something was denied/restricted (with a timestamp)
├── output
├──── lists/          # ready-to-use lists (see below)
├──── txt/            # easy to read
└──── csv/            # easy to grep / open in a spreadsheet

txt 和 csv 始终写入;添加 --json 还会生成 json/ 文件夹。

lists/ 文件夹包含两个纯文本文件,用于直接提供给其他工具:

  • lists/userlist.txt — 直接用于 AS-REP 烘焙、密码喷洒, 或破解器的 --users 列表。在 users/full 模式下,它包含仅启用的 账户;在 rids 模式下(没有每个用户详细信息),它是每个用户。
  • lists/computerlist.txt — 机器账户名称保留 $( sAMAccountName),用于 Windows 2000 之前机器账户检查。

忘了查看它们,或者只运行了 rids 现在想要列表?指向 运行的文件夹,它们会从 CSV 重建,无需网络:

root@kitploit:~
python3 adnullenum.py --lists-from output/20260917-1530_10.0.0.10_full

在屏幕上你会得到一个有上限的预览,这样大域不会淹没你的终端 (--limit,默认每节 100)——文件始终包含完整数据。 当你在终端时颜色开启;--no-color 关闭它。


示例

针对测试 DC 的 full 运行(已脱敏)。在屏幕上你会得到 recon、RID 扫描、有趣账户摘要以及写入的文件列表:

root@kitploit:~
$ python3 adnullenum.py 10.0.0.10 --mode full
[*] Connecting to 10.0.0.10:445 anonymously ...
[+] SAM domain: CORP (S-1-5-21-1111111111-2222222222-3333333333)
...
[ COUNTS ]
  Users:   43
  Groups:  0
  Aliases: 17

[ PASSWORD POLICY ]
  Min length:       7
  Max age:          42 days
  Properties:       COMPLEX

[*] Bruting RIDs via SAMR (chunk=1000, open-ended 500-100000, stop-after 5000)
[*] up to RID 1498: 31 resolved, gap=0
[*] stop: 5000 consecutive empty RIDs (--stop-after 5000)
[+] Resolved: 5 users, 4 computers, 22 groups, 0 other
[*] Deep-querying 5 users (skipping 4 computers)
    [!] Administrator (RID 500)  PWD_NEVER_EXPIRES
    [!] Guest (RID 501) (disabled)  PWD_NOT_REQUIRED, PWD_NEVER_EXPIRES
    [!] svc_sql (RID 1104)  ASREP_ROASTABLE
[+] 5 users: 3 enabled, 2 disabled, 3 interesting (full detail in the users file)

[ FILES WRITTEN in output/20260101-120000_10.0.0.10_full ]
  txt/recon.txt / csv/recon.csv        domain info + password/lockout policy
  txt/inventory.txt / csv/inventory.csv  all resolved accounts
  txt/users.txt / csv/users.csv        full per-user detail
  txt/groups.txt / csv/groups.csv      groups + aliases with members
  rids.txt                             existing RIDs (reuse with --session)
  lists/userlist.txt                   usernames, one per line
  lists/computerlist.txt               machine accounts (with $)
  manifest.json                        run metadata + counts

来自 txt/users.txt 的单条记录(主要组和直接组被 解析为名称):

root@kitploit:~
[+] RID 500
    Enabled:                   True
    SamAccountName:            Administrator
    SID:                       S-1-5-21-1111111111-2222222222-3333333333-500
    Description/AdminComment:  Built-in account for administering the computer/domain
    Last Logon:                2026-09-03 17:58:26+09:00
    Password Last Set:         2026-01-23 05:14:35+09:00
    Primary Group:             Domain Users (513)
    Account Control:           NORMAL_ACCOUNT | PASSWORD_NEVER_EXPIRES
    Logon Count:               92
    Direct Domain Groups:      Domain Users; Administrators; Domain Admins
    >> INTERESTING:            PWD_NEVER_EXPIRES

手动操作

这里的一切都是标准 SAMR/LSARPC,所以你可以用 Samba 的 rpcclient 一次一个调用地提取相同的事实。首先匿名连接:

root@kitploit:~
rpcclient -U "" -N 10.0.0.10

enumdomusers 仅按名称返回标准用户账户;机器($)账户 被过滤掉,完整详细信息意味着一次一个账户地运行 queryuser。 rpcclient 没有内置的 RID 循环,所以当服务器端枚举受限时,它无法恢复机器 账户(或其他任何东西);你需要自己在一个范围上编写 lookupsids 脚本。它也没有锁定策略命令 并且不返回 LSA DNS/林/GUID 或信任,这就是为什么此工具 直接查询 PolicyDnsDomainInformation。

有关脚本化等价物以及此工具与它们的关系,参见 如何比较。


缓解措施

如果你在蓝队一方并想关闭这个,匿名路径是 需要关闭的东西:

  • 开启 “不允许匿名枚举 SAM 账户” 和 “……账户和共享”(RestrictAnonymousSAM / RestrictAnonymous 设置)。
  • 从 Windows 2000 之前兼容访问 组中移除 Anonymous Logon(以及 Everyone)。这通常是 为什么 null 会话 RID 循环在域控制器上有效的原因。
  • 将 “让 Everyone 权限应用于匿名用户” 设置为禁用,并 限制对命名管道的匿名访问。
  • 要求 SMB 签名并禁用 SMBv1。

这些都不能阻止已登录用户读取相同的数据——这是正常 且预期的。它只关闭无凭据路径。

检测它

  • 开启 SAM/目录对象审计,并留意来自一台机器在短时间窗口内的大量 事件 4661 / 4662(对 SAM 或目录对象的句柄)。
  • 留意大量 匿名登录(事件 4624,登录类型 3,ANONYMOUS LOGON 账户)和 IPC$ 活动(5140 / 5145)。
  • 线索是来自单一来源的量:短时间内对 \samr 的大量账户 ID 查找,或对 \lsarpc 的策略/查找调用。
  • 因为 --sleep 和 --jitter 可以将调用分散开,所以对 一个窗口内的总数发出警报,而不是仅对速率发出警报。

注意事项

  • 仅使用端口 445——这不触及 135 上的 RPC 端点映射器。
  • 如果 SAMR RID 转换返回 ACCESS_DENIED,添加 --lsa-fallback 尝试 LSA LsarLookupSids 获取清单(参见“当 SAMR 被锁定时”)。如果 LSA 查找也被阻止,则只能进行 recon(域名 + SID)。

许可证

MIT。参见 LICENSE。

下载工具
queryuser
手动操作
模式你得到什么
recon域信息、计数、密码/锁定策略以及 LSA/DNS 详细信息。不进行暴力枚举。只是四处看看。
rids找出哪些账户存在,并将它们分类为用户 / 计算机 / 组。
users上述内容,加上每个真实用户的完整详细信息以及“有趣账户”摘要。添加 --include-groups 还会列出每个用户的组。
groups域组和内置别名及其成员。
full全部内容。
此工具rpcclient 等价物
recon(域信息 + 计数)querydominfo
recon(密码策略)getdompwinfo
recon(LSA 域 + SID)lsaquery、lsaenumsid
rids(名称/SID 转换)lookupnames <name>、lookupsids <SID>
rids(服务器端列表)enumdomusers(仅标准用户——没有 $ 机器账户)
users(每个用户详细信息)queryuser <rid> 或 queryuser <name>、querydispinfo
groupsenumdomgroups、querygroupmem <rid>、enumalsgroups builtin、queryaliasmem builtin <rid>