펜테스팅 위키
  • Welcome
    • Home
  • 정보 수집
    • OSINT
      • Sub Domain
      • Google Hacking
      • Github
      • IP Address
      • Employees
    • 내부망
      • RID Cycling
      • Password Spraying
      • Password Must Change
      • Extension
        • xlsx/ods
        • pfx
        • vhd
        • pst
        • vbs
        • hc
      • Protocol
        • 21 - FTP
        • 22 - SSH
        • 25 - SMTP
        • 23 - Telnet
        • 53 - DNS
        • 80/443 - HTTP
        • 88 - Kerberos
        • 111 - RPC
        • 135 - msrpc
        • 139/445 - SMB
        • 389/636 - LDAP
        • 1433 - MSSQL
        • 5985/5986 - wsman
  • 초기 침투
    • CVEs
      • CVE-2025-31486
    • Phishing
      • Command File
      • EXE + LNK
      • wax
      • Microsoft Word
    • Web
      • Quary Language
        • SQL
        • GraphQL
      • File Upload
      • File Download
      • XSS
      • SSRF
      • CSRF
      • Open Redirect
      • SOP / CORS
    • ZIP Slip
  • 지속성
    • Active Directory
      • Golden Ticket
      • DC Shadow
      • RID Hijacking
    • Local
      • Task Scheduler
      • Startup Folder
      • Registry AutoRun
      • COM
      • WMI Event Subscription
      • SSH Key Injection
      • DLL Hijacking
      • DLL SideLoading
      • Create Account
  • 권한 상승
    • Active Directory
      • DACL
        • ReadGMSAPassword
        • ReadLAPSPassword
        • ForceChangePassword
        • AddSelf
        • WriteOwner
        • GenericAll
        • GenericWrite
        • WriteSPN
        • AddMembers
        • WriteProperty
        • WriteGPO
        • AddAllowedToAct
        • AllExtendedRights
      • AD CS
        • Abuse Permissions
        • ESC1
        • ESC2
        • ESC3
        • ESC4
        • ESC5
        • ESC6
        • ESC7
        • ESC8
        • ESC9
        • ESC10
        • ESC11
        • CVE-2022-26923
        • Non-PKINIT
      • MS14-068
      • Server Operators
      • DnsAdmins
      • noPac
      • Silver Ticket
      • KrbRelayUp
    • Windows
      • SeImpersonatePrivilege
      • Unquoted Service Path
      • Weak Service Permissions
      • Weak Service Binary Permissions
      • UAC Bypass
      • Always Install Elevated
      • Autoruns
      • Credential Manager
      • Local Service Account
  • 민감정보 탈취
    • Active Directory
      • Kerberoasting
      • Targeted Kerberoast
      • ASRep-Roasting
      • AS Requested Service Tickets
      • Unconstrained Delegation
      • Constrained Delegation
      • Alternate Service Name
      • Resource Based Constrained Delegation
      • DCSync
      • LSASS
      • Shadow Credentials
      • Backup Operators
      • SeEnableDelegationPrivilege
      • Domain Cached Credentials
    • Windows
      • Unattended File
      • DPAPI
      • Hard-coding Credentials
      • SeBackupPrivilege
  • 측면 이동
    • File Transfer
      • SCP
      • ZIP
      • ncat
      • Python
      • PowerShell
      • certutil
      • wget
      • SMB
      • Base64
      • FTP
      • WebDav
      • cURL
    • Pivoting
      • SOCKS
      • Proxyfier
      • Remote Port Forwarding
    • NTLM Relay
    • WinRM
    • PsExec
    • WMI
    • DCOM
    • RDP
    • Port Forwarding
    • Domain Trust Discovery
  • 사용자 가장
    • Pass the Hash
  • Pass the Ticket
  • Overpass the Hash
  • Token Impersonation
  • Make Token
  • Process Injection
  • ETC
    • CS
      • Kerberos
      • NTLM
      • PKINIT
      • Integrity
      • Registry
      • Active Directory Trusts
      • Delegation
      • OAuth 2.0
      • S4U
    • Tools
      • Cobalt Strike
      • BloodHound
      • Certipy-ad
      • LDAP Search
      • Hydra
      • Hashcat
Powered by GitBook
On this page
  • Vaults
  • Windows Credentials
  • Web Credentials
  • References

Was this helpful?

Export as PDF
  1. 민감정보 탈취
  2. Windows

DPAPI

Data Protection API는 Windows에 내장된 구성 요소로 데이터를 암호화하고 복호화 할 수 있는 수단을 제공합니다. 이것은 Windows Credential Manager가 RDP 자격 증명과 같은 저장된 시크릿을 보관하는데 사용되며, Chrome 등의 서드파티 애플리케이션에 저장된 자격 증명 정보를 저장하기도 합니다. Windows에는 Vaults와 Credentials라는 두개의 개념이 사용됩니다.

Vaults

Windows의 크리덴셜을 저장하는 Vaults는 금고와 같은 개념입니다. 기본적으로 2가지 종류의 금고가 있는데 Windows Credentials와 Web Credentials를 따로 저장합니다. 사용자의 Vaults를 열거하기 위해서 Cobalt Strike에서 기본으로 제공하는 비콘 도구인 vaultcmd를 사용할 수 있습니다.

# Vaults 열거
beacon> run vaultcmd /list

# Vaults 중 Windows Credentials 열거
beacon> run vaultcmd /listcreds:"Windows Credentials" /all

Windows Credentials라고 하더라도 모두 같은 Vault에 저장된다고 보장할 수는 없습니다. 따라서 권한 상승 혹은 측면 이동에 꼭 필요한 사용자 계정 정보를 찾기 위해서 하나의 Vault를 복호화 했다고 모든 시도를 끝냈다고 말할 수는 없습니다. 일반적으로 어떤 정보가 어디에 암호화 되어있는지는 알 수 없기 때문에 모든 Vault를 복호화하는 수밖에 없습니다.

Windows Credentials

사용자가 cmdkey명령이나 Credential Manager를 통해 로컬 자격 증명을 저장하거나 RDP, SMB 클라이언트에서 CredWrite()를 호출할 경우 저장됩니다. 사용자가 로컬에서 저장한 크리덴셜은 모두 \AppData\Roaming\Microsoft\Credentials\ 하위에 {GUID} 형식의 파일로 저장됩니다. Windows Credentials가 없는 경우 실습을 위해서 아래 명령어를 통해 가짜 자격 증명 정보를 저장합니다.

# 실습을 위한 가짜 자격 증명 저장
$Cred = New-Object -TypeName PSCredential -ArgumentList "TestUser", (ConvertTo-SecureString "TestPassword123" -AsPlainText -Force)
cmdkey /add:target.example.com /user:$Cred.UserName /pass:"TestPassword123"

Windows 로컬 내에 저장된 크리덴셜은 사용자마다 모두 다른 마스터키를 가지고 있습니다. 내가 가진 마스터키의 GUID가 무엇인지 파악하기 쉽게 정리해주는 도구로 Seatbelt.exe가 있지만 이 도구를 사용하지 않더라도 기본적으로 mimikatz의 sekurlsa::dpapi를 사용해서 나온 첫 번째 마스터키가 현재 사용자의 마스터키이기 때문에 mimikatz만 사용하더라도 복호화를 하는데 지장은 없습니다. 만약 코발트 스트라이크 환경이라면 내장된 명령어를 통해 저장된 크리덴셜 위치를 파악할 수 있고, 없다면 Seatbelt를 통해 편리하게 파악할 수 있습니다.

# 크리덴셜 경로 및 마스터키 GUID 열거
.\Seatbelt.exe WindowsCredentialFiles

# 확인한 마스터키 GUID에 맞는 키 값 확보
mimikatz # sekurlsa::dpapi

# 획득한 마스터키를 통해 DPAPI 복호화
mimikatz # dpapi::cred /in:C:\Users\Mick3y\AppData\Roaming\Microsoft\Credentials\84B[...]EB6 /masterkey:524[...]4d3

Web Credentials

Chrome와 같은 서드파티 브라우저 애플리케이션을 사용할 때 웹 사이트에 로그인하면 Chrome에 자격 증명을 저장할 것인지 묻는 팝업창을 경험해본 적이 있을 것입니다. 이때 Chrome에 내가 입력한 자격 증명을 저장한다면, DPAPI로 암호화되어 \AppData\Local\Google\Chrome\User Data\Default\로 저장됩니다.

대표적인 웹 브라우저 구글 크롬에서, 사용자들은 매번 패스워드를 통한 로그인이 번거로워 브라우저 내에 크리덴셜 정보를 저장하는 기능을 한 번 쯤은 사용해봤을 것입니다. 우리가 입력한 크리덴셜 정보를 크롬 브라우저의 저장 기능으로 저장했다면 SQLite 포맷으로 Login Data 파일에 저장됩니다. 절대 경로는C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\ 입니다. 그리고 이곳에 저장된 암호화된 정보를 복호화하는 키가 저장된 파일은 C:\Users\user\AppData\Local\Google\Chrome\User Data\Local State입니다.

위 파일에 저장된 정보는 모두 키에 관련된 정보는 아니기 때문에 우리가 복호화를 원할 시에는 키 정보만을 출력해야 합니다. 키 파일을 Base64 인코딩 된 형태로 출력한 뒤, 출력된 문자를 그대로 복사하여 mimikatz의 Chrome 복호화 인자로 전달합니다.

# Base64 Encoded Key 추출
(Get-Content "$env:LOCALAPPDATA\Google\Chrome\User Data\Local State" | ConvertFrom-Json).os_crypt.encrypted_key

# 추출한 키를 통해 Chrome에 저장된 자격 증명 덤핑
mimikatz # dpapi::chrome /in:"%LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data" /encryptedkey:[Base64 Encoded Key] /unprotect

References

PreviousUnattended FileNextHard-coding Credentials

Last updated 3 days ago

Was this helpful?

LogoGitHub - GhostPack/Seatbelt: Seatbelt is a C# project that performs a number of security oriented host-survey "safety checks" relevant from both offensive and defensive security perspectives.GitHub
Logomimikatz/mimikatz.exe at master · ParrotSec/mimikatzGitHub
LogoHow to manage your passwords in ChromeTechRadar
LogoWeb Browser Stored CredentialsPenetration Testing Lab