완료됨
질문 있습니다.[스포 주의]

카나리를 릭하는 것과, readint를 이용해서 overflow시켜 return address를 overwrite하는 것 까지는 스스로 알아냈는데 libc base를 구하는 것에 막혔었습니다.

풀이를 보니, __libc_start_main + 128의 주소가 처음 카나리 릭할 때 뒤의 여러 주소값들과 섞여있더군요.

이 __libc_start_main + 128 주소가 카나리 뒤의 여러 주소값들과 섞여있다는 걸 안다는 것은 배경지식인건가요? 아니면 gdb를 통해 충분히 알아낼 수 있었던 건가요?

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

말씀하신 __libc_start_main + offset 꼴의 주소는 main함수의 return address에요. 따라서 모든 바이너리에 동일하게 존재하기 때문에 스택에서 libc를 가져올때 유용하게 쓰이는 주소에요. gdb를 통해 충분히 알아낼 수도 있지만 저도 그렇고 보통은 질문자님처럼 한번 경험을 한 뒤로 알게 되는거 같아요.

2024.12.29. 18:33