这个关卡有一个计划任务,每隔2分钟执行/home/flag03目录下的writable.sh。
我们可以看到writeable.sh的内容。
这个脚本会自动执行writable.d里面的所有文件,接着有删除这个脚本。
而计划任务crontab是flag03用户创建的,我们可以在writable.d中创建脚本来完成操作。
我们在writable.d的目录下创建一个run脚本。
/bin/getflag > /tmp/20155110wangyifan这个脚本执行/bin/getflag,并把结果重定向到/tmp/20155110wangyifan文件中。
等待两分钟,我们在/tmp目录下发现20155110wangyifan这个文件。
也就是说crontable自动执行了/bin/getflag程序
level04——越权获得token这个关卡需要我们获取token文本文件的内容。目前我们的权限是读取不了的。
除了root权限外,只要flag04用户可以对它进行读写操作。这里有一个flag04程序,我们需要利用这个程序的漏洞,来获得token。
#include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char **argv, char **envp) { char buf[1024]; int fd, rc; if(argc == 1) { printf("%s [file to read]\n", argv[0]); exit(EXIT_FAILURE); } if(strstr(argv[1], "token") != NULL) { printf("You may not access \'%s\'\n", argv[1]); exit(EXIT_FAILURE); } fd = open(argv[1], O_RDONLY); if(fd == -1) { err(EXIT_FAILURE, "Unable to open %s", argv[1]); } rc = read(fd, buf, sizeof(buf)); if(rc == -1) { err(EXIT_FAILURE, "Unable to read fd %d", fd); } write(1, buf, rc); }注意这段代码:
if(strstr(argv[1], "token") != NULL) { printf("You may not access \'%s\'\n", argv[1]); exit(EXIT_FAILURE); } fd = open(argv[1], O_RDONLY);flag04会把命令行参数作为文件名并打开,但是文件名不能包含“token”字符串,否则会退出程序。
还是祭出我们的软链接大法,迷惑flag04程序。
这就是flag04账号的密码,登录flag04账号执行getflag,完成这一关的任务
level05——ssh密钥窃取在这一关,我们需要找到一个弱权限的目录,然后通过它来提权。
我们需要关注的是.backup和.ssh这两个目录。
.ssh目录我们进不去。只能先在.backup目录里面探索一下。
我们把backup-19072011.tgz解压到/tmp目录下(因为权限不过无法在当前目录解压)
原来是ssh的公钥和私钥!直接把它copy到/home/level05然后ssh登录flag05的账号就能完成此关卡了!