[클라우드 바우처] 80% 할인된 금액으로 드림핵 엔터프라이즈를 도입해 보세요. 자세히 알아보기
카나리 손상

문제를 풀긴 풀었는데 read를 통해 카나리를 손상시킬 때 카나리까지 가지 않더라도 카나리가 손상되는 것 같아서 이유가 궁금해 질문드립니다.
문제에서 buf를 0x40만큼 할당해 주었고 디버깅을 해보니 카나리는 이보다 8바이트 뒤에 있었습니다.
read 전 버퍼의 내용입니다.
0x7fffffffe2a0: 0x00000000 0x00000000 0x00000000 0x00000000
0x7fffffffe2b0: 0x00000000 0x00000000 0x00000000 0x00000000
0x7fffffffe2c0: 0x00000000 0x00000000 0x00000000 0x00000000
0x7fffffffe2d0: 0x00000000 0x00000000 0x00000000 0x00000000
0x7fffffffe2e0: 0xffffe3e0 0x00007fff 0x891bfc00 0x6221ddb2

맨 아랫줄에 0x891bfc00 이 카나리라고 판단하고 카나리 전까지 A를 집어넣어 보았습니다.

read 후
0x7fffffffe2a0: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffe2b0: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffe2c0: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffe2d0: 0x41414141 0x41414141 0x41414141 0x41414141
0x7fffffffe2e0: 0x41414141 0x41414141 0x891bfc0a 0x6221ddb2

그런데 갑자기 카나리의 널바이트가 바뀌더라구요... 실제로 A를 0x48만큼 보낸 제 익스플로잇도 성공을 하였습니다.
바뀌는 이유가 무엇인지 궁금합니다.

#pwnable
작성자 정보
답변 1
avatar
김진우
대표 업적 없음

sendline으로 보내면 값 뒤에 엔터 문자가 포함됩니다. 실제로 엔터문자(0x0a) 값이 카나리를 덮어씌운 것을 보면 이것이 원인인 것 같네요.

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