이번 강의에서는 스택 버퍼 오버플로우로부터 반환 주소를 보호하는 스택 카나리(Stack Canary)에 대해 배워보겠습니다.
Description
Objectives
카나리 보호 기법을 이해한다.
Questions related to this course.
9 questions
실제 환경에서 실습할때 canary leak한 값이 깨져서 나오면 어떻게 읽나요?
제가 실제 환경에서 실습해보려고 마지막 실습 페이지에 있는 부분을 돌려 봤습니다
a 9개를 해서 입력하면 다음과 같이 나옵니다

위와 같이 a 9개 다음에 나오는 문자들이 깨져서 나와서 복붙으로는 사용 못할 것 같은데 이럴 경우 어떻게 읽으면 좋을까요?
왜 main에서 부터의 offset이 강의와 조금 다른 것일까요?
강의에서는 다음과 같이 있지만

제가 해보면 다음과 같이 나옵니다.

offset이 4가 차이나는데 endbr64가 차이인가요?
Figure3 실습 질문입니다
Figure3 스택 카나리 릭 실습은 어떻게 진행하는 건가요?
name 에 a를 9개 작성해서 canary값을 얻어오는건 했는데,
그 이후에 어떻게 해야 해당 실습을 성공적으로 완료한 것인지 모르겠습니다ㅜㅜ
카나리 우회 질문
https://dreamhack.io/lecture/courses/112
우분투 20.04 환경에서 실습중입니다. 우분투 18.04로 해야 하나요?
강의대로
catch syscall arch_prctl
i r $rsi, i r $rdi를 했습니다.
여기서 주소의 값(TLS)+0x28을 x/gx로 덤프해봤더니 강의대로 나와야할 0x000000000... 이 나오질 않습니다.
watch *(rsi의 주소+0x28)로 해당 주소값이 변경되면 멈추도록 한뒤 실행하여도 여전히 이전의 이상한 값이 똑같이 나오길래 ni로 한줄씩 실행했음에도 값이 고정되어 나옵니다...
실습은 몇차례 반복하여 똑같이 진행했는데 환경이 다른 건 우분투 버전밖에 없는 것 같아서 질문드립니다...
카니리 강의에서 Figure 3. 카나리 우회에서 질문
[https://learn.dreamhack.io/112#13](https://learn.dreamhack.io/112#13) 에서 카나리가 tTc(xU8가 나오는것 같은데 어떻게 푸는건가요?
rsi+0x28값 질문입니다
강의상에서는 catch로 멈추었을 때에는 아무런 값이 없어야 하는데 저는 값이 들어있습니다. 이유가 뭔가요?
canary 넣고 컴파일
canary 넣고 컴파일 하려면 제 환경에선 명시적으로 gcc에 -fstack-protector 옵션을 넣지 않으면 카나리가 생성이 안되던데요. 교안에선 해당 설명이 누락되어 있어요.
Overflow 실습 질문
다음 강의의 https://dreamhack.io/learn/6/64#8 부분을 보면 카나리의 첫 부분은 널 바이트라고 되어 있는데
이 실습에서는 카나리의 첫 부분이 널 바이트가 아니라서 페이로드에 +1을 해줄 필요가 없습니다(https://dreamhack.io/learn/6/64#8에서는 b"A"*(buf2cnry+1)을 해주고 있습니다.) 그래서 카나리도 8개의 문자로 나옵니다.
카나리의 첫 바이트가 널이 아닐 수 있는 것인지 아니면 다음 강의를 제가 잘못 이해한 것인지 이 실습이 오류인 건지 궁금합니다.
오타인가요??
카나리가 저장될 fs+0x28(0x7ffff7fe64c0+0x28)의 값을 본다고 하였는데
pwndbg> x/gx 0x7ffff7fdb4c0+0x28
0x7ffff7fdb4e8: 0x0000000000000000
을 하고 있습니다. 단순 오타인 것으로 생각했는데 [카나리 생성 과정] 3/3 페이지에서도 저 값을 계속 사용합니다.
갑자기 값이 바뀐 이유가 무엇인가요??
Roadmap with this course

Recommend for you
Related courses

Mitigation: Stack Canary

Free
Detail
30 minutes read
Very Easy
없음