왜 Constraints: [rsp+0x40] == NULL인 one gadget만 되나요?
gdb를 통해서 분석한 결과
(jne free+736)을 실행하기 위해 제가 rax의 값을 main의 시작 주소로 설정했습니다.
__free_hook이 가리키는 함수를 실행하는 부분은 <free+741>에 해당하고 이 시점에 [
둘 다 NULL이 아님을 알 수 있습니다. 따라서 다음과 같이
우리가 실행하고자 하는 one_gadget들의 constraints를 만족하지 않는데,
0x4f432 execve("/bin/sh", rsp+0x40, environ)
constraints:
[rsp+0x40] == NULL
는 어떻게 실행된 거고,
0x10a41c execve("/bin/sh", rsp+0x70, environ)
constraints:
[rsp+0x70] == NULL
는 실행되지 않는 건가요..?
둘 다 Constraints를 만족시키지 못 했으니, 둘 다 실행되지 않아야 하는 거 아닌가요?
혼자서 해결해보려 했지만, 제 힘으로는 도저히 이해가 가지 않아 질문 남겨봅니다.
긴 글 읽어주셔서 감사합니다
#pwnable
작성자 정보
답변
2
wyv3rn
무플 방지 위원회장
요구조건을 만족하지 않아도 성공하는 경우도 다소 있는 것 같습니다.
항간에는 출력되는 요구 조건이 틀린 경우가 많다고 합니다. (카더라...)
다만, 요구조건을 만족해주면 100% 성공하는 것 같습니다.
bincat mk2
대표 업적 없음
call rax
를 실행하기 전이 아니라 실행한 이후에 조건을 확인해 보시면 될 것 같습니다.