-
gdb 실행중 pipe로 입력 받기카테고리 없음 2025. 2. 24. 11:25
gdb 실행중에 python이나 binary file을 통해 디버깅중인 프로그램에 표준 입력(stdin)을 주려면 어떻게 해야될까?
나는 linux의 mkfifo를 이용해 보았다.
일단 mkfifo /path/to/myfifo 이렇게 해서 fifo 파일을 만든다.
그리고 다음 코드를 작성한다.
#pipe.py import sys import os fd = os.open("/path/to/myfifo", os.O_RDONLY | os.O_NONBLOCK) with os.fdopen(fd, "rb") as f: while True: data = f.read() if data == None: continue sys.stdout.buffer.write(data) sys.stdout.flush()
그 다음
gdb) r < <(python pipe.py)
브레이크 포인트 걸고 이렇게 실행한 다음, 메모리 값 같은 거 확인해서 페이로드 작성한 다음다른 shell을 열든 어떻게든 해서 /path/to/myinfo에 값을 쓴다! 그러면 디버깅 중인 프로그램의 stdin에 그 값이 써진다!
나는 cat exploit.bin > /path/to/myinfo 이렇게 해서 gdb로 관측한 메모리 덤프를 기반으로 exploit을 작성해서 한 번 넣어 보았다.