15 코인 질문

  1. rdi = 1, rsi = read_got, r15 = 0 로 이해했는데
    마지막에 write_plt를 추가한 이유가 무엇인지 궁금합니다
    write를 실행하기 위해서 추가한 것 입니까?

  1. 여기는 그냥 모르겠습니다...

#pwnable
작성자 정보
답변 1
avatar
🐰
2023 Christmas CTF 참여

1. 네, 그렇습니다.

결과적으로 해당 부분은 write(1, read_got, ...)을 실행합니다.
write 함수가 어떤 함수인지, 각 인자는 어떤 값으로 오는지 더 알아보시면 왜 존재하는가 아실 수 있습니다.

2. 설명해드리겠습니다.

결과적으로 python 코드 내에 있는 read는 위 write를 실행한 결과로서 나온 값은 메모리로 올라온 read함수의 주소입니다.
흔히 라이브러리 주소를 릭(leak)한다고 표현합니다.

그리고 lb는 libc base의 준말로, 메모리 상에 올라온 libc가 어느 주소에 올라와 있는지 알 수 있습니다.
그 이후 system을 구하는 과정은 libc base와 함수 간 offset(거리)가 동일함을 이용해서 메모리로 올라온 system함수의 위치를 구하는 과정입니다.

이러한 정보는 이후에 GOT Overwrite 시 유용하게 사용하실 수 있습니다.

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