왜 Constraints: [rsp+0x40] == NULL인 one gadget만 되나요?

gdb를 통해서 분석한 결과

image.png

image.png
(jne free+736)을 실행하기 위해 제가 rax의 값을 main의 시작 주소로 설정했습니다.

__free_hook이 가리키는 함수를 실행하는 부분은 <free+741>에 해당하고 이 시점에 [rsp+0x40],[rsp+0x40], [rsp+0x70]을 확인해보면

image.png

둘 다 NULL이 아님을 알 수 있습니다. 따라서 다음과 같이
image.png
우리가 실행하고자 하는 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
avatar
wyv3rn
무플 방지 위원회장

요구조건을 만족하지 않아도 성공하는 경우도 다소 있는 것 같습니다.
항간에는 출력되는 요구 조건이 틀린 경우가 많다고 합니다. (카더라...)

다만, 요구조건을 만족해주면 100% 성공하는 것 같습니다.

2023.07.31. 15:06
bincat mk2
대표 업적 없음

call rax 를 실행하기 전이 아니라 실행한 이후에 조건을 확인해 보시면 될 것 같습니다.

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