buf의 크기가 0x30인데 익스플로잇 코드에 buf공간을 채울때 0x38만큼 채우는 이유가 궁금합니다.

최종 익스플로잇 코드를 보면 buf공간을 채우기 위해 b'A'같은 문자를 0x38개 만큼 넣습니다. 근데 소스코드에 있는 buf의 크기는 분명 0x30인데 말이죠. 분명 예전에 이해했던 것 같은데 갑자기 헷갈립니다. 제가 buf와 canary사이에 제가 빼먹고 있는 무언가가 있나요?

제가 생각한 소스코드의 스택 구조는

Low


buf 0x30

canary 0x8

sfp 0x8

ret 0x8

High

이렇게 인데 제가 뭘 빠트리고 있는거 같아요

#시스템_해킹 #공격기법 #rtl
작성자 정보
답변 1
avatar
Sechack
2024 Invitational Contenders

컴파일 과정에서 최적화와 같은 이유로 스택에 더미를 집어넣는 경우가 있습니다. 따라서 C언어 코드만을 보고는 정확한 offset을 계산해낼 수 없습니다. 컴파일러는 종류별로, 버전별로 동작이 다 다르기 때문에 C언어 코드상에서는 0x30만큼 스택을 사용할지라도 실제로는 스택에 더미가 좀더 들어갈 수 있습니다.

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