基础知识 有效的组识别码用来决定进程执行时组的权限。 int setresuid(uid_t ruid, uid_t euid, uid_t suid); int setresgid(gid_t rgid, gid_t egid, gid_t sgid); 参数依次是下面三个用户/组标识符:
源码相对简单,setresuid(getegid(), getegid(), getegid()); 和 setresgid(getegid(), getegid(), getegid()); 是将进程的 real user ID,real group ID,effective user ID,effective group ID, saved set-user-ID,saved set-group-ID 都设置为执行目前进程有效组识别码。所以我们刚开始启动程序时,我们对程序的权限与 other 相同,即 r+x,在执行 setresuid() 和 setresgid() 后我们对程序的权限与 shock_pwn 相同,即 r+s,所以此时我们用于对 flag 文件的读权限。下一步是想办法执行 cat ./flag