Question: PATH environment variable. The system (const char *cmd) library function can be used to execute a command within a program. The way system(cmd) works is
PATH environment variable. The system (const char *cmd) library function can be used to execute a command within a program. The way system(cmd) works is to invoke the /bin/sh program, and then let the shell program to execute cmd. Because of the shell program invoked, calling system() within a Set-UID program is extremely dangerous. This is because the actual behavior of the shell program can be affected by environment variables, such as PATH; these environment variables are under user's control. By changing these variables, malicious users can control the behavior of the Set-UID program. In bash, you can change the PATH environment variable in the following way (this example adds the directory /home/seed to the beginning of the PATH environment variable): $ export PATH=/home/seed:$PATH
The Set-UID program below is supposed to execute the /bin/ls command; however, the programmer uses only ls instead of /bin/ls, it relies on the PATH variable to get its location:#include
system("ls");
return 0; }
-
Can you let this Set-UID program (owned by root) run your code instead of /bin/ls? If you can, is your code running with the root privilege? Describe and explain your observations.
-
Now, change /bin/sh so it points back to /bin/dash, and repeat the above attack. Can you
still get the root privilege? Describe and explain your observations.
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
