익스플로잇 과정 질문

제가 gdb를 이용하여 확인한 바로는 메모리 구성이 다음과 같았습니다.

msg [0x10 byte] | ??? [0x8 byte] | check [8byte] | sfp [8byte] | ret [8byte]

그래서 익스플로잇 페이로드를 다음과 같이 구성했습니다.

"A"*0x10 + "A"*0x8 + "\x00"*0x8 + "A"*0x8 + p64(oneshot_gadget)

근데 정상적인 실행이 이루어지지 않아서 방법을 찾다가 도저히 모르겠어서 질문 남깁니다 ㅠㅠ 뭐가 잘못된 건지 알 수 있을까요?
추가로, 가젯의 조건을 확인하고 조건에 부합하는 것을 이용했습니다. 또한 gdb를 이용해서 흐름을 확인할 때 "\x00"가 입력이 안되는 것처럼 보이더라구요. 혹시 이것이 문제라면 메모리에 0x0 값을 전달하는 방법이 있을까요?

#pwnable
작성자 정보
답변 2
avatar
snwo
CTF First Place

쉘창에서 바로 페이로드를 전송하시는건가요?
pwntools 를 이용해 페이로드를 전달하기 전, gdb 에 프로세스를 attach 해서
페이로드 전송 후 메모리를 확인해볼 수 있습니다.

2021.02.28. 19:59
Karatus
워게임: 50
  1. 혹시 oneshot_gadget 이용하실 때 그냥 one_gadget 명령어에서 나온 offset을 이용하셨나요?
    만약 그렇다면 당연히 되지 않습니다. libc_base를 얻는 과정을 진행하셨는지 확인해주시기 바랍니다.

  2. gdb에서 입력값을 전달할 때 키보드에 있는 문자들 이외의 값을 주고 싶다면
    (gdb) r <<< $(python -c "print '\x90'*52")
    이런식으로 값을 전달할 수 있습니다.
    다른 방법도 있으니 알고 싶으시다면 직접 찾아보시길 권합니다.

2021.02.28. 20:01
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기