완료됨
익스플로잇 방식 질문

제가 생각한 공격 방식은

  1. buf 변수에 생성한 shellcode를 read 함수로 덮어씌우고
  2. buf 주소로 점프

입니다

buf 주소는 $rbp-0x20이고, environ 주소와 차이를 이용하면 되는데

environ 주소와 buf 주소 차이는 0x800000 수준으로 너무 큰 차이가 나서 이상하고,
environ 주소에 존재하는 값(= 환경변수 문자열들이 들어있는 주소)은 buf 주소랑 0x128 차이가 나는데

leak한 environ 주소에 존재하는 값에서 0x128을 뺀 주소(buf 변수의 주소)로 점프하면 쉘코드가 실행될 것으로 보이는데 제 접근 방식이 맞나요?

문제는 저 environ 주소에 존재하는 값을 어떻게 읽어올 수 있을지 모르겠습니다..

지금 할 수 있는건 environ 주소 자체에 숫자를 더하고 뺄 수 있는건데,

그렇게 되면 jump = *(long *)value; 코드 실행 시 value, 즉, environ 주소 자체에 값을 변경하는 거라 jump에 완전 엉뚱한 위치가 들어가버리고..

그렇다고 environ 자체 주소와 buf 변수의 차이인 0x800000 수준의 값을 더하면 정상적으로 실행이 안되네요(왜 안되는지 모르겠지만..)

어느 부분을 잘못 생각하고 있는걸까요?

#pwnable
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
Sechack
2024 Invitational Contenders
avatar
Sechack
2024 Invitational Contenders

우리가 입력한 value값은 그 value값으로 바로 점프뛰는게 아니라 함수 포인터 입니다. 이 점을 잘 생각해보세요.

2021.04.05. 23:43