Spectra

Spectra is an easy machine from Hack The Box.

Enumeration

The OS version for this box is unknown, so let’s see if nmap returns anything in that vein.

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.1 (protocol 2.0)
| ssh-hostkey: 
|_  4096 52:47:de:5c:37:4f:29:0e:8e:1d:88:6e:f9:23:4d:5a (RSA)
80/tcp   open  http    nginx 1.17.4
| http-methods: 
|_  Supported Methods: GET HEAD
|_http-server-header: nginx/1.17.4
|_http-title: Site doesn't have a title (text/html).
3306/tcp open  mysql   MySQL (unauthorized)
|_ssl-cert: ERROR: Script execution failed (use -d to debug)
|_ssl-date: ERROR: Script execution failed (use -d to debug)
|_sslv2: ERROR: Script execution failed (use -d to debug)
|_tls-alpn: ERROR: Script execution failed (use -d to debug)
|_tls-nextprotoneg: ERROR: Script execution failed (use -d to debug)

No OS information, but I can see MySQL running, in addition to a web server and SSH.

image

The homepage doesn’t reveal much, and the “Test” link throws a “database connection” error, but reveals a “/testing” directory. Clicking through to “Software Issue Tracker” brings up the main WordPress page.

Pasted image 20210621215533

If I go to “/testing” I can see the directory listing of WordPress files.

image

Trying to view wp-config.php throws a database connection error, but wp-config.php.save brings up a blank page. Viewing the source of the page reveals its contents:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'dev' );

/** MySQL database username */
define( 'DB_USER', 'devtest' );

/** MySQL database password */
define( 'DB_PASSWORD', 'devteam01' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

Looks like I have a MySQL database name and associated creds. I ran WPScan to enumerate WordPress further and found a single user, administrator, who is the author of the only post on the site. I tried to login with administrator:devteam01 to the “wp-admin” panel, and got in!

Initial Foothold

I did some searching around and found an exploit I can use. I can use this script to generate a malicious plugin, upload that to the admin panel, and, once the plugin is activated, I should get a reverse shell.

Pasted image 20210622221523

Got a shell! Time to do some digging.

I am on as the user nginx with not a whole lot of functionality. Looking at the /home directory, there are a few users I may be able to use to elevate my privileges. I didn’t find anything of value in the SQL server, but maybe linPEAS will find something. After transferring linPEAS from my machine to spectra and running the script, I might have found another password:

/etc/autologin/passwd
-rw-r--r-- 1 root root 19 Feb  3 16:43 /etc/autologin/passwd
SummerHereWeCome!!

autologin is using this password to log a particular user in, but I’m not sure who. I’ll create a list of users and use hydra to test that password against each of them via SSH.

Pasted image 20210623163223

katie is the lucky winner.

Pasted image 20210623163405

SSH in as katie and I’ve found a user flag.

Privilege Escalation

Now that I’m on as a “real” user, with a real terminal, I’ll run sudo -l to see what permissions katie has.

User katie may run the following commands on spectra:
    (ALL) SETENV: NOPASSWD: /sbin/initctl

katie can run /sbin/initctl as root. Let’s take a look at the different jobs they might have access to. katie is a member of the developers group:

Pasted image 20210623164505

It appears the developers group has write access to quite a few jobs. I can edit one of these and then execute initctl as root to elevate my privileges.

Pasted image 20210623164313

Open test.conf, add a line to enable the SUID on /bin/bash, and restart the job with sudo /sbin/initctl start test.

image

image

Drop into a new shell, and I am indeed root. The /bin/bash -p allows me to spawn a new shell with the effective UID of root, as opposed to the real UID of katie.

Written on June 28, 2021