2022-10-28 15:52:46 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
char* default_argv[] = {"/bin/sh", NULL};
|
|
|
|
|
|
|
|
void run_program(char** argv)
|
|
|
|
{
|
|
|
|
execv(argv[0], argv);
|
|
|
|
|
|
|
|
perror("execv");
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
}
|
|
|
|
|
|
|
|
int main(int argc, char** argv)
|
|
|
|
{
|
|
|
|
if (argc == 1)
|
|
|
|
{
|
|
|
|
fprintf(stderr, "Usage: %s [uid] [command | sh]\n", argv[0]);
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (setuid(atoi(argv[1])) < 0)
|
|
|
|
{
|
|
|
|
perror("setuid");
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
2022-10-28 15:55:56 +00:00
|
|
|
if (setgid(atoi(argv[1])) < 0)
|
|
|
|
{
|
|
|
|
perror("setgid");
|
|
|
|
return EXIT_FAILURE;
|
|
|
|
}
|
|
|
|
|
2022-10-28 15:52:46 +00:00
|
|
|
if (argc == 2) run_program(default_argv);
|
|
|
|
else
|
|
|
|
run_program(argv + 2);
|
|
|
|
}
|