코드 영역이랑 스택 질문
-
메모리의 코드 영역은 read-only로 알고 있는데 왜 덮어쓸 수 있나요? (동적디버깅하면 할 수 있나?)
코드를 한번 덮어써봤는데 덮어써지더라고요? 그래서 스택의 ret부분에 get_shell의 주소를 두고 leave ret을 카나리 확인 위에 덮어썼는데 실패.. pwndbg로 보면 특정 코드에서 더 안나가더라고요. 이건 왜 그러나.. -
왜 실행할 때마다 스택주소가 달라지나요? 컴파일된 내용은 같을텐데 왜 위치가 다른지.. PIE가 적용되지 않으니까 그냥 운영체제가 랜덤하게 고르는건가
#pwnable
작성자 정보
답변
1
sangjun
공부벌레
-
덮으시는 위치가 코드 영역인지 bss영역이였는지 확인해보시기 바랍니다.
-
stack주소가 바뀌는 이유는 ASLR이 켜져있기 때문입니다. 스택 주소를 고정하려면
echo 0 >/proc/sys/kernel/randomize_va_space
를 해주면 됩니다.