Print Stack Canary
Reading time: 2 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Enlarge printed stack
스택 오버플로우에 취약한 프로그램이 스택 오버플로우의 일부를 가리키는 puts 함수를 실행할 수 있는 상황을 상상해 보십시오. 공격자는 canary의 첫 번째 바이트가 null 바이트(\x00
)이고 나머지 canary는 무작위 바이트라는 것을 알고 있습니다. 그러면 공격자는 canary의 첫 번째 바이트까지 스택을 덮어쓰는 오버플로우를 생성할 수 있습니다.
그런 다음 공격자는 페이로드의 중간에서 puts 기능을 호출하여 canary를 모두 출력합니다(첫 번째 null 바이트 제외).
이 정보를 통해 공격자는 canary를 알고 새로운 공격을 구성하고 전송할 수 있습니다(같은 프로그램 세션에서).
명백히, 이 전술은 공격자가 자신의 페이로드의 내용을 출력하여 canary를 유출할 수 있어야 하므로 매우 제한적입니다. 그런 다음 새로운 페이로드를 생성하고 실제 버퍼 오버플로우를 전송할 수 있어야 합니다.
CTF 예시:
- https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html
- 64비트, ASLR 활성화, PIE 없음, 첫 번째 단계는 canary의 바이트 0x00까지 오버플로우를 채운 다음 puts를 호출하여 유출하는 것입니다. canary로 ROP 가젯을 생성하여 puts를 호출하여 GOT에서 puts의 주소를 유출하고
system('/bin/sh')
를 호출하는 ROP 가젯을 생성합니다. - https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html
- 32비트, ARM, relro 없음, canary, nx, pie 없음. canary를 유출하기 위해 puts를 호출하는 오버플로우 + ROP 체인을 사용하여 r0(인수
/bin/sh
)와 pc(시스템 주소)를 팝하는system
을 호출합니다.
Arbitrary Read
형식 문자열이 제공하는 임의 읽기를 사용하면 canary를 유출할 수 있을 수 있습니다. 이 예제를 확인하십시오: https://ir0nstone.gitbook.io/notes/types/stack/canaries 및 다음에서 임의의 메모리 주소를 읽기 위해 형식 문자열을 악용하는 방법에 대해 읽을 수 있습니다:
- https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html
- 이 도전 과제는 형식 문자열을 매우 간단하게 악용하여 스택에서 canary를 읽습니다.
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.