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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
pywhisker — 'Shadow Credentials' 공격을 위한 C# 도구의 Python 버전 | Kitploit
도구/GitHubGitHub/shutdownrepo/pywhisker
Privilege EscalationExploitationPenetration TestingAuthentication
GitHubshutdownrepo/pywhisker

pywhisker

'Shadow Credentials' 공격을 위한 C# 도구의 Python 버전

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

pyWhisker

pyWhisker는 Elad Shamir이 만들고 C#으로 작성된 원본 Whisker의 Python 버전입니다. 이 도구를 사용하면 대상 사용자/컴퓨터의 msDS-KeyCredentialLink 특성을 조작하여 해당 개체에 대한 완전한 제어권을 얻을 수 있습니다. 이 도구는 Impacket과 podalirius가 만든 PyDSInternals ( Michael Grafnetter's 의 DSInternals 의 Python 버전)를 기반으로 합니다. 이 도구는 Dirk-jan의 PKINITtools와 함께 유닉스 기반 시스템에서만 완전한 기본적인 익스플로잇을 가능하게 합니다.

이 공격의 전제 조건은 다음과 같습니다:

  1. 대상 도메인 기능 수준이 Windows Server 2016 이상이어야 합니다.
  2. 대상 도메인에 Windows Server 2016 이상을 실행하는 도메인 컨트롤러가 하나 이상 있어야 합니다.
  3. 공격 중 사용할 도메인 컨트롤러에는 자체 인증서와 키가 있어야 합니다(이는 조직에 AD CS, PKI, CA 또는 이와 유사한 것이 있어야 함을 의미합니다).
  4. 공격자는 대상 사용자 또는 컴퓨터 계정의 msDs-KeyCredentialLink 특성을 쓸 수 있는 계정을 제어할 수 있어야 합니다.

왜 일부 전제 조건인가?

  • 전제 조건 1과 2는 PKINIT 기능이 Windows Server 2016에서 도입되었기 때문입니다.
  • 전제 조건 3은 DC가 AS_REQ <-> AS_REP 트랜잭션 중 세션 키 교환을 위해 자체 인증서와 키가 필요하기 때문입니다.

전제 조건 3이 충족되지 않으면 KRB-ERROR (16) : KDC_ERR_PADATA_TYPE_NOSUPP 오류가 발생합니다.

이 "Shadow Credentials" 기본 요소에 대한 자세한 정보:

  • Shadow Credentials: Abusing Key Trust Account Mapping for Takeover
  • The Hacker Recipes - ACEs and DACL abuse
  • The Hacker Recipes - Shadow Credentials

사용법

pyWhisker는 대상의 msDs-KeyCredentialLink 특성에 대해 다양한 작업을 수행하는 데 사용할 수 있습니다:

  • list: 모든 현재 KeyCredential ID 및 생성 시간 나열
  • add: msDs-KeyCredentialLink에 새 KeyCredential 추가
  • spray: msDs-KeyCredentialLink에 새 KeyCredential 스프레이 추가
  • remove: msDs-KeyCredentialLink에서 KeyCredential 제거
  • clear: msDs-KeyCredentialLink에서 모든 KeyCredential 제거
  • info: KeyCredential 구조에 포함된 모든 정보 출력
  • export: msDs-KeyCredentialLink에서 모든 KeyCredential을 JSON으로 내보내기
  • import: JSON 파일의 KeyCredential로 msDs-KeyCredentialLink 덮어쓰기

pyWhisker는 다음 인증 방식을 지원합니다:

  • (NTLM) 평문 암호
  • (NTLM) Pass-the-hash
  • (Kerberos) 평문 암호
  • (Kerberos) Pass-the-key / Overpass-the-hash
  • (Kerberos) Pass-the-cache (Pass-the-ticket 유형)
  • (LDAP over Schannel) Pass-the-cert

또한 pyWhisker는 다단계 상세 출력을 지원하며, 명령어에 -v, -vv, ...를 추가하면 됩니다 :)

pyWhisker는 크로스 도메인도 지원하므로 -td/--target-domain 인수를 참조하세요.

usage: pywhisker [-h] (-t TARGET_SAMNAME | -tl TARGET_SAMNAME_LIST) [-a [{list,add,spray,remove,clear,info,export,import}]] [--use-ldaps] [--use-schannel] [-v] [-q]
                 [--dc-ip ip address] [-d DOMAIN] [-u USER] [-crt CERTFILE] [-key KEYFILE] [-td TARGET_DOMAIN] [--no-pass | -p PASSWORD | -H [LMHASH:]NTHASH | --aes-key hex key]
                 [-k] [-P PFX_PASSWORD] [-f FILENAME] [-e {PEM,PFX}] [-D DEVICE_ID]

Python (re)setter for property msDS-KeyCredentialLink for Shadow Credentials attacks.

optional arguments:
  -h, --help            show this help message and exit
  -t TARGET_SAMNAME, --target TARGET_SAMNAME
                        Target account
  -tl TARGET_SAMNAME_LIST, --target-list TARGET_SAMNAME_LIST
                        Path to a file with target accounts names (one per line)
  -a [{list,add,spray,remove,clear,info,export,import}], --action [{list,add,spray,remove,clear,info,export,import}]
                        Action to operate on msDS-KeyCredentialLink
  --use-ldaps           Use LDAPS instead of LDAP
  --use-schannel        Use LDAP Schannel (TLS) for certificate-based authentication
  -v, --verbose         verbosity level (-v for verbose, -vv for debug)
  -q, --quiet           show no information at all

authentication & connection:
  --dc-ip ip address    IP Address of the domain controller or KDC (Key Distribution Center) for Kerberos. If omitted it will use the domain part (FQDN) specified in the identity parameter
  -d DOMAIN, --domain DOMAIN
                        (FQDN) domain to authenticate to
  -u USER, --user USER  user to authenticate with
  -crt, --certfile CERTFILE
                        Path to the user certificate (PEM format) for Schannel authentication
  -key, --keyfile KEYFILE
                        Path to the user private key (PEM format) for Schannel authentication
  -td TARGET_DOMAIN, --target-domain TARGET_DOMAIN
                        Target domain (if different than the domain of the authenticating user)

  --no-pass             don't ask for password (useful for -k)
  -p PASSWORD, --password PASSWORD
                        password to authenticate with
  -H [LMHASH:]NTHASH, --hashes [LMHASH:]NTHASH
                        NT/LM hashes, format is LMhash:NThash
  --aes-key hex key     AES key to use for Kerberos Authentication (128 or 256 bits)
  -k, --kerberos        Use Kerberos authentication. Grabs credentials from .ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones
                        specified in the command line

arguments when setting -action to add:
  -P PFX_PASSWORD, --pfx-password PFX_PASSWORD
                        password for the PFX stored self-signed certificate (will be random if not set, not needed when exporting to PEM)
  -f FILENAME, --filename FILENAME
                        filename to store the generated self-signed PEM or PFX certificate and key, or filename for the "import"/"export" actions
  -e {PEM,PFX}, --export {PEM,PFX}
                        choose to export cert+private key in PEM or PFX (i.e. #PKCS12) (default: PFX))

arguments when setting -action to remove:
  -D DEVICE_ID, --device-id DEVICE_ID
                        device ID of the KeyCredentialLink to remove when setting -action to remove

다음은 pyWhisker가 수행할 수 있는 작업의 예시와 스크린샷입니다.

목록 및 정보 확인

pyWhisker는 기존 KeyCredential을 나열할 수 있습니다. 또한 전체 구조를 펼쳐 해당 개체가 포함한 모든 정보(RSA 공개 키 매개변수 포함)를 보여줄 수 있습니다.

python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "list"
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "info" --device-id 6419739b-ff90-f5c7-0737-1331daeb7db6

제거 및 삭제

pyWhisker는 특정 값을 제거하거나 전체 특성을 지울 수 있습니다.

python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "remove" --device-id a8ce856e-9b58-61f9-8fd3-b079689eb46e

python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "clear"

새 값 추가

도구 다운로드