I’ve felt for a long time that whilst I understand a lot of vulnerabilities and exploits, I don’t have enough knowledge to actually build exploits myself. Reading is all well and good, but doing is better, especially when it comes to development.
To make learning easier, there are several virtual machine images you can download which have a series of challenges, getting progressively harder. The one I chose to do is called Nebula from exploit-exercises.com – it was recommended on several forums.
Getting up and running is very easy – download the ISO and run it from any virtualisation software. I’m using Parallels on Mac OS X.
I’m going to go through each level one by one!
This level requires you to find a Set User ID program that will run as the “flag00” account. You could also find this by carefully looking in top level directories in / for suspicious looking directories.
Alternatively, look at the find man page.
I always prefer the lazy, more reliable method i.e. using find.
We need to find an executable that is owned by flag00 and has the suid bit set. If suid is set, the executable will run as the owner of the file, rather than the person running it.
The command here is simple:
level00@nebula:~$ find / -perm /u=s -user flag00 2>/dev/null /bin/.../flag00 /rofs/bin/.../flag00
The directory name of … has been used to try to hide the file.
level00@nebula:~$ ls -asl /bin/.../ total 8 0 drwxr-xr-x 2 root root 29 2011-11-20 21:22 . 0 drwxr-xr-x 3 root root 2728 2012-08-18 02:50 .. 8 -rwsr-x--- 1 flag00 level00 7358 2011-11-20 21:22 flag00
As you can see this is owned by flag00 and instead of just being executable (-rwx-r-x—) it is suid (-rws-r-x—).
Run this file and you end up in a flag00 shell:
level00@nebula:~$ /bin/.../flag00 Congrats, now run getflag to get your flag! flag00@nebula:~$ getflag You have successfully executed getflag on a target account