제 익스플로잇의 문제점을 모르겠습니다ㅠㅠ

우선 해당 문제의 정석(?) 풀이법은 이해했습니다
원하는 메모리에 원하는 값을 넣을 수 있으니 read함수를 통해 카나리를 변조시킨 후 stack check fail 의 got을 overwrite하여 get_shell을 실행 시킬 수 있음을 확인 했는데 이와는 다르게
제가 처음 생각한 시나리오는 이렇습니다..
원하는 메모리 주소의 값을 변경 할 수 있으니(쓰기 권한이 있다면) main 함수의 return 주소를 카나리 변조 없이 변경할 수 있지 않을까 싶어 확인해보니
ret 값을 저장해 둔 스택에 쓰기 권한이 있다는것을 확인했고 PIE기법이 적용되지 않아있기에 해당 메모리 주소의 값을 get_shell 함수의 주소값을 대입했습니다.
디버깅 결과 정상적으로 get_shell 함수로 ret 됨 또한 확인 했는데 결론적으로 오류가 나며 익스플로잇에 실패합니다..
제가 뭔가를 놓친부분이 있는것 같은데 찾질 못하겠네요..ㅠ 조언 부탁드립니다..!

아래 사진은 ret 당시 상황이며 이후 오류가 발생한 부분입니다!
image.png

image.png

#pwnable
작성자 정보
답변 2
avatar
wyv3rn
무플 방지 위원회장

음 movaps에 대해서 검색찬스 써보시면 좋을 것 같습니다.

요약하자면, 스택 정렬이 되지 않아 정상적인 실행이 되지 않는 것입니다.

문제가 의도한 부분이 아닌 다른 방법으로 푸는 것에 대해 접근은 제대로 하셨지만, 위의 이슈로 인해 실행이 되지 않는 것이 정상이며, 해결 방법으로는 추후 강의에 나오던가 아니면 이미 나왔던가 할텐데... 문제와 연계되어있어서 직접적으로 알려드리긴 좀 그렇네요 ^^;

어쨌든 해당 문제에서 한번에 main ret을 shell 함수 주소로 점프하는 것은 불가하고, 다른 다양한 방법(?!)으로는 가능할 것 같습니다.

2023.04.27. 14:35
avatar
wyv3rn
무플 방지 위원회장

방법이 아주 없진 않은 것 같습니다.
저도 따로 증명해보아야겠지만... 아마 제 생각에는 got overwrite가 아니라도 풀 수 있을 것 같네요 ㅎㅎ

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