카테고리 없음

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을 작성해서 한 번 넣어 보았다.