rop 문제에 해당하는 강의에서 read 함수 인자와 pop_rsi_r15 에 관한 의문점

이 문제에 해당하는 강의입니다.
https://learn.dreamhack.io/84#13

  1. payload 작성 부분에서 주석에 #read(0, read_got, 0x10)이라고 되어 있는 부분이 있는데 0x10이라 해놓고 왜 p64(0)으로 0을 전달하는건지 모르겠습니다. read 함수는 인자로 설정한 길이만큼 읽어 들일거고 코드 마지막에 system 함수의 주소+/bin/sh\x00까지 16 bytes를 전달하는데 길이를 맘대로 설정해도 되는건가요?
  2. pop_rsi_r15 즉, pop rsi; pop r15; ret 명령에서 rdx가 아닌 r15를 써야되는 이유가 이해가 안갑니다.
    https://dreamhack.io/forum/qna/1239 글에서 답변을 봤는데 pop rsi에 대한 기계어 코드가 5e라서 pop r14(41 5e)에서 일부분 이용했다고 해도 pop rdx는 pop r15(41 5f)랑 기계어 코드가 엄연히 다를텐데 대체가능한 이유를 모르겠습니다.(pop rdx에 대한 기계어 코드는 못 찾겠네요.)
#pwnable
작성자 정보
답변 1
avatar
propaganda
댓글 작성: 10

우선 0 값은 r15 레지스터에 들어가는 값이에요
pop rsi만 있는 가젯이 없어서 rsi와 r15가 같이 있는 가젯을 쓴 것이고
r15 레지스터에는 아무 의미 없는 값 0을 넣어준 것임다
그리고 0x10 값은 이미 레지스터에 들어가있는 거 같아요 디버깅 안해봐서 확실하지는않지만..

pop rsi; pop r15; ret 명령에서 rdx가 아닌 r15를 써야되는 이유는 pop rsi; pop rdx; ret 가젯이 없기 때문 아닐까요??

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