Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/crypt0p3g/adnullenum
Defensive ToolsOSINT (Open Source Intelligence)ReconnaissanceVulnerability AnalysisInformation GatheringNetwork SecurityPenetration TestingRed Teaming
GitHubcrypt0p3g/adnullenum

adnullenum

SAMR 및 LSARPC를 통한 원패스 익명 Active Directory 열거 — 널 세션, 자격 증명 불필요, 구조화된 재사용 가능 출력.

저장소 보기
377374일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

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-roastable, 비밀번호 불필요, unconstrained delegation 등).

소유하고 있거나 명시적으로 테스트 권한을 받은 시스템에만 실행하십시오. 허가 없이 다른 사람의 디렉터리를 열거하는 것은 옳지 않으며, 위치에 따라 불법일 수 있습니다.

동일하게 동작하는 두 가지 버전이 있습니다. 가지고 있는 라이브러리에 맞는 것을 사용하십시오:

  • adnullenum.py — impacket 기반.

수집하는 정보

  • 사용자, 컴퓨터 및 그룹. 머신 계정($로 끝나는 계정)은 실제 사용자와 분리됩니다.
  • 사용자별 전체 상세 정보. 설명, 그룹 멤버십, 비밀번호 및 로그온 타임스탬프, 계정 플래그, 로그인 제한(로그온 시간, 허용 워크스테이션, 만료).
  • 멤버가 포함된 그룹, 실제 이름으로 확인됩니다.
  • 도메인 및 정책 정보. 도메인 이름, SID, 서버 역할, 실제 사용자/그룹/컴퓨터 수, 그리고 비밀번호 및 잠금 정책.
  • LSA / DNS 세부 정보. DNS 도메인 및 포리스트 이름, 도메인 GUID, 도메인 SID, 그리고 모든 트러스트 — SAMR 자체가 잠겨 있을 때도 자주 반환됩니다.

또한 흥미로운 계정을 표시해 줍니다: "비밀번호 불필요", "비밀번호 만료 안 됨", AS-REP-roastable, unconstrained delegation, 로그온한 적 없음, 또는 설명에 비밀번호가 언급된 경우 등.

여기서 자연스럽게 도출되는 두 가지:

  • 수집한 사용자 이름은 AS-REP roasting을 위한 목록입니다.
  • 컴퓨터 이름은 pre-Windows 2000 머신 계정 검사를 위한 목록입니다.

비교

여기의 모든 것은 표준 익명 SAMR/LSARPC이며, 기존 도구들도 이미 동일한 데이터에 도달합니다. 이것은 새로운 기능이 아니라 편의를 위한 래퍼이므로 대안을 알아둘 가치가 있습니다:

  • enum4linux-ng 가 가장 가까운 대응물입니다: null-session SAMR + LSA, RID cycling, 정책, 사용자 및 그룹. 성숙하고 널리 사용되는 도구를 원한다면 이것을 사용하십시오. adnullenum은 이것과 상당히 겹칩니다.
  • NetExec (--rid-brute, --users, --pass-pol)는 훨씬 더 큰 프레임워크 안에서 동일한 열거를 다룹니다.
  • impacket은 이를 두 개의 스크립트로 제공합니다: samrdump.py (사용자/그룹/별칭 + 사용자별 상세 정보)와 lookupsid.py (LSA를 통한 RID cycling). 단일 실행도, SAMR→LSA 폴백도 없고 stdout만 출력합니다.
  • rpcclient 는 기본 호출(queryuser, enumdomusers, querydominfo, lsaquery, lookupsids, …)을 노출하지만 대화식이며 stdout만 출력합니다. enumdomusers는 표준 사용자를 이름으로 나열하며 머신() 계정은 없고, 전체 상세 정보는 를 한 번에 하나씩 실행해야 합니다. 내장된 RID-cycling 루프가 없어 컴퓨터를 복구하거나 제한된 열거를 우회할 수 없습니다. 를 참조하십시오.

adnullenum이 추가하는 것은 패키징입니다: 여러 도구 대신 하나의 null-session 실행, 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 cycling으로 폴백합니다: DC에 계정 ID를 1000개 단위로 이름으로 변환하도록 요청합니다. 기본적으로 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 cycling은 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 roasting, password spraying, 또는 크래커의 --users 목록에 바로 투입. users/full 모드에서는 활성화된 계정만 포함합니다; rids 모드(사용자별 상세 정보 없음)에서는 모든 사용자입니다.
  • lists/computerlist.txt — 머신 계정 이름으로 $가 유지됩니다 (sAMAccountName), pre-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-cycling 루프가 없어 서버 측 열거가 제한될 때 머신 계정(또는 다른 무엇이든)을 복구할 수 없습니다; 범위에 대해 lookupsids를 직접 스크립트해야 합니다. 또한 잠금 정책 명령이 없고 LSA DNS/포리스트/GUID 또는 트러스트를 반환하지 않으므로, 이 도구는 PolicyDnsDomainInformation을 직접 쿼리합니다.

스크립트 대응물과 이 도구가 그것들과 어떻게 관련되는지는 비교를 참조하십시오.


완화

블루 팀 측에서 이것을 차단하고 싶다면, 익명 경로를 닫는 것이 핵심입니다:

  • "Do not allow anonymous enumeration of SAM accounts" 및 "…accounts and shares" (RestrictAnonymousSAM / RestrictAnonymous 설정)를 켜십시오.
  • Pre-Windows 2000 Compatible Access 그룹에서 Anonymous Logon(및 Everyone)을 제거하십시오. 이것이 보통 도메인 컨트롤러에서 null-session RID cycling이 작동하는 이유입니다.
  • "Let Everyone permissions apply to anonymous users" 를 Disabled로 설정하고, 명명된 파이프에 대한 익명 액세스를 제한하십시오.
  • 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 LsarLookupSids를 시도하려면 --lsa-fallback을 추가하십시오("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>