📄 sudo_pppoe.c
字号:
#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <signal.h>#include <errno.h>#define g_print printf int ruid,euid;void be_root(){ ruid=getuid(); euid=geteuid(); if(ruid == euid) { g_print("Warning: This program wasn't marked setuid in the filesystem.\n"); return; } if(setuid(euid) == -1) { g_print("Failed to be euid -> %d !!\n",euid); } else{ g_print("be_euid:I think I done.Real uid = %d, effective uid = %d pid = %d\n", getuid(), geteuid(),getpid()); }}void be_user(){ /* if(seteuid(euid)==-1){ g_print("Failed to noraml euid !!\n"); } else{ g_print("Real uid = %d, effective uid = %d pid = %d\n", getuid(), geteuid(),getpid()); } */ g_print("be_user:euid = %d ,ruid = %d \n",geteuid(),getuid());if(setuid(ruid)==-1){ g_print("Failed to noraml user !!\n"); } else{ g_print("be_user :Real uid = %d, effective uid = %d ,pid = %d\n", getuid(), geteuid(),getpid()); }} char *getexedir(void){ static char str[1024]={0}; char tmp[32]={0}; int len=0; sprintf(tmp,"/proc/%d/exe",getpid()); if((len=readlink(tmp,str,1024))<0)perror("readlink():"); len--; while(len>=0){ if(str[len]=='/'){ str[len]=0; return str; } else str[len]=0; len--; } return NULL;}int main(int argc ,char **argv){ int pid=0; signal(SIGCHLD ,SIG_IGN); if((pid=fork())==0) { char *str = getexedir(); char *file = NULL; L : file = malloc (strlen(str)+256); if(file==NULL){ fprintf(stderr,"malloc():%s .\n",strerror(errno)); goto L; } sprintf(file,"%s/gtk-pppoe",str); be_root(); execl(file,"gtk-pppoe",argv[1],NULL); fprintf(stderr,"%s :execl():%s !\n",argv[0],strerror(errno)); free(file); } else //be_user(); g_print("Proc pid = %d euid = %d ,ruid = %d \n",getpid(),geteuid(),getuid()); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -