#include #include #include 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; } if (setgid(atoi(argv[1])) < 0) { perror("setgid"); return EXIT_FAILURE; } if (argc == 2) run_program(default_argv); else run_program(argv + 2); }