완료됨
example8_leak.py의 payload 관련 질문드립니다.

payload를 작성할 때, 왜 "A" * 40으로 들어가는지 설명 부탁드려도 될까요? 제 생각에는 "A"*32(buf[32]) + "A"*4(sfp) + ret 이렇게 돼서 결국 "A"*36 + give_shell 이렇게 들어가야 한다고 생각했습니다.

처음에는 카나리가 들어가있나해서 readelf -s ./example8 | grep stack_chk_fail 명령어를 이용해서 카나리를 체크를 해봤는데, 아무런 결과도 나오지 않는 것을 보아서 어떤 것이 4byte를 차지하는지 모르겠습니다.

#시스템해킹
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 2
Karatus
워게임: 50

해당 코드의 실행 환경 및 GCC 버전에 따라 지역 변수 할당의 차이가 있을지 모르나
해당 예제 기준으로는 FSB를 통해 buf의 시작주소와 RET까지의 주소 차이가 4Byte(32-bit 기준) * 10 만큼 난 것을 볼 수 있습니다.
그러므로 'A' * 40(총 40Byte)가 됩니다.

2021.01.14. 20:30
avatar
Sechack
2024 Invitational Contenders

저도 처음 배울때 이론과 실제 offset이 달라서 당황스러운적이 있었습니다. gdb로 보시면 offset이 40인걸 알 수 있습니다. 저같은경우는 함수 프롤로그 다음에 push ebx라는게 있어서 offset이 4늘어났었습니다. offset은 바이너리마다 다를수가 있으므로 이론적으로 코드만 보고 유추하지 마시고 정확한 분석 과정을 거쳐서 구하시기 바랍니다. 컴파일 환경의 차이로 인해서 이론과 실제 스택 구조가 달라질 수 있습니다.

2021.03.03. 16:38