In this Linux machine, we fuzz the web server to find a mattermost vhost. However, the credentials has to be exfiltrated from the default host via SQL Injection (It was a pretty hard SQL Injection). We can use these credentials to log into mattermost and get another set of credentials to login via SSH. Once inside, we notice that we can run a password manager as sudo. A simple reverse engineering with xxd yields the password. We can then use these creds to login as user who is part of docker group.
Starting Nmap 7.95 ( https://nmap.org ) at 2026-02-07 00:16 EST
Warning: 10.129.227.233 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.129.227.233
Host is up (0.18s latency).
Not shown: 64354 closed tcp ports (reset), 1178 filtered tcp ports (no-response)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9093/tcp open copycat
Nmap done: 1 IP address (1 host up) scanned in 12.24 seconds
Starting Nmap 7.95 ( https://nmap.org ) at 2026-02-07 00:16 EST
Warning: 10.129.227.233 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.129.227.233
Host is up (0.19s latency).
All 65535 scanned ports on 10.129.227.233 are in ignored states.
Not shown: 65504 open|filtered udp ports (no-response), 31 closed udp ports (port-unreach)
Nmap done: 1 IP address (1 host up) scanned in 38.14 seconds
# Nmap 7.95 scan initiated Sat Feb 7 00:18:15 2026 as: /usr/lib/nmap/nmap -Pn -sCV -p22,80,9093 --min-rate 20000 -oN nmap/scriptVersionScan.nmap 10.129.227.233
Nmap scan report for 10.129.227.233
Host is up (0.18s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 9e:5e:83:51:d9:9f:89:ea:47:1a:12:eb:81:f9:22:c0 (RSA)
| 256 58:57:ee:eb:06:50:03:7c:84:63:d7:a3:41:5b:1a:d5 (ECDSA)
|_ 256 3e:9d:0a:42:90:44:38:60:b3:b6:2c:e9:bd:9a:67:54 (ED25519)
80/tcp open http nginx 1.23.1
|_http-server-header: nginx/1.23.1
|_http-title: Did not follow redirect to http://shoppy.htb
9093/tcp open http Golang net/http server
|_http-title: Site doesn't have a title (text/plain; version=0.0.4; charset=utf-8).
| fingerprint-strings:
| GenericLines:
| HTTP/1.1 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| Connection: close
| Request
| GetRequest, HTTPOptions:
| HTTP/1.0 200 OK
| Content-Type: text/plain; version=0.0.4; charset=utf-8
| Date: Sat, 07 Feb 2026 05:21:35 GMT
| HELP go_gc_cycles_automatic_gc_cycles_total Count of completed GC cycles generated by the Go runtime.
| TYPE go_gc_cycles_automatic_gc_cycles_total counter
| go_gc_cycles_automatic_gc_cycles_total 6
| HELP go_gc_cycles_forced_gc_cycles_total Count of completed GC cycles forced by the application.
| TYPE go_gc_cycles_forced_gc_cycles_total counter
| go_gc_cycles_forced_gc_cycles_total 0
| HELP go_gc_cycles_total_gc_cycles_total Count of all completed GC cycles.
| TYPE go_gc_cycles_total_gc_cycles_total counter
| go_gc_cycles_total_gc_cycles_total 6
| HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
| TYPE go_gc_duration_seconds summary
| go_gc_duration_seconds{quantile="0"} 9.518e-06
| go_gc_duration_seconds{quantile="0.25"} 3.1209e-05
|_ go_gc_dura
|_http-trane-info: Problem with XML parsing of /evox/about
sudo -l
[sudo] password for jaeger:
Matching Defaults entries for jaeger on shoppy:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User jaeger may run the following commands on shoppy:
(deploy) /home/deploy/password-manager
We can run password-manager as deploy
ID
1
2
id
uid=1000(jaeger) gid=1000(jaeger) groups=1000(jaeger)
u/UH
[]A\A]A^A_
Welcome to Josh password manager!
Please enter your master password:
Access granted! Here is creds !
cat /home/deploy/creds.txt
Access denied! This incident will be reported !
;*3$"
zPLR
GCC: (Debian 10.2.1-6) 10.2.1 20210110
crtstuff.c
I can see our constants here, but none is the master password