根据题目描述,本关需要在系统中搜索一个设置了SUID的程序,这个程序将是以flag00身份运行的。
要完成本关,需要掌握find命令的使用。find命令的格式如下:
find [path...] [expression]
expression可以跟选项。更加具体的用法,请通过百度或者man学习。根据题目的要求,我们需要查找一个所属于flag00账号的可执行程序。find有个选项叫-uid,后面跟用户的uid值。每个Linux账号都对应一个uid,且不重复。账户的UID可以用命令`id`查看:
flag00@nebula:~$ id flag00
uid=999(flag00) gid=999(flag00) groups=999(flag00)
得到flag00的UID为999,接着从根目录“/”开始搜索这个神秘的程序:
level00@nebula:~$ find / -uid 999 2>/dev/null
/home/flag00
/home/flag00/.profile
/home/flag00/.bash_logout
/home/flag00/.bashrc
/bin/.../flag00
由于当前用户是level00,在进一些没有权限进入的目录进行搜索的时候,是会出错的,所以用2>/dev/null将错误输出到/dev/null这个空白设备里。Linux标准输入、标准错误输出分别对应0、1和2。
搜索结果中,~/bin/…/flag00~ 看上去比较特殊,应该就是我们要的程序。执行下面命令获得权限:
level00@nebula:~$ /bin/.../flag00
Congrats, now run getflag to get your flag!
按照提示,我们已经拥有flag00的权限了,执行getflag试试:
flag00@nebula:~$ getflag
You have successfully executed getflag on a target account