大家好,我正在玩 CTF,我必须破解一个程序来获取 shell 源代码是:
/*
* gcc ch21.c -lcrypt -o ch21
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <crypt.h>
#include <sys/types.h>
#include <unistd.h>
int main (int argc, char *argv[]) {
char pid[16];
char *args[] = { "/bin/bash", "-p", 0 };
snprintf(pid, sizeof(pid), "%i", getpid());
if (argc != 2)
return 0;
printf("%s=%s",argv[1], crypt(pid, "$1$awesome"));
if (strcmp(argv[1], crypt(pid, "$1$awesome")) == 0) {
printf("WIN!\n");
execve(args[0], &args[0], NULL);
} else {
printf("Fail... :/\n");
}
return 0;
}
现在我用 gdb 调试它,因为我从源代码中了解到我必须在运行时输入 proccessid (PID) 才能使用GDB-PEDA获得成功的 shell我在断点期间尝试了 getpid,但是如何使用 gdb 继续使用 proccess id 只运行命令传递输入对程序有什么帮助!
任何通知!