Buffer Overflow (Stack Canary, FSB)

2021. 8. 2. 15:02Layer7/Layer7_System Hacking

 

 

 


 

 

Leak Stack Canary through Format String Bug

 

 

 

 

 

 

Format String Bug를 이용하여 Stack Canary와 __libc_start_main을 leak 한 후 libc_base를 구하고 

Stack Canary를 우회하여 RTL로 익스플로잇을 한다.

 

 

 

 

 

 

Stack Canary란,

 

버퍼 오버플로우 공격을 막기 위해서 Buf와 RET 사이에 랜덤한 값을 심은 뒤 프로그램 실행 전과 실행 후의 상태를 비교한다.

 

만약 버퍼 오버플로우가 발생했을 경우 Buf부터 RET까지 모두 더미 값으로 채워지게 되어 카나리 값도 변하게 되는데, 이때 카나리 값이 실행 전과 비교해서 달라졌으면 프로그램을 강제 종료시키는 보호 기법이다.

 

 

 

Stack smashing detected와 같이 뜨고 프로그램이 강제 종료 된다.

 

 

 

 


 

 

Stack Canary를 우회하려면

 

1. Brute Force 공격을 수행하여 카나리를 무차별 대입한다.

 

2. Leak를 해서 카나리 값을 알아낸 뒤, 페이로드를 작성할 때 카나리가 올 위치에 leak 한 카나리 값을 넣으므로써 버퍼 내에서 변조가 일어나지 않은 것처럼 속일 수 있다.

 

 

 


 

공격 코드 (페이로드) 작성

 

 

 

실습 파일

prob2
0.01MB

 

 

 

 

 

 

1.  레지스터 rsi, rdx, rcx, r8, r9(5) + 카나리 직전까지(0x20-8/8) + 카나리(1) : %9$p      (카나리 leak)

 

2.  레지스터 rsi, rdx, rcx, r8, r9(5) + sfp 직전까지(0x20/8) + sfp(1) + ret(1) : %11$p        (ret leak)

 

 

 

따라서 leak을 하기 위해서 보내는 첫 번째 페이로드는 %9$p|%11$p가 된다. ( | 는 두 숫자를 구분하기 위해 사용)

 

 

카나리를 릭 한 다음에 익스플로익을 하는 두 번째 페이로드의 rbp-0x8 부분에 카나리 값을 넣는다.

 

 

RET에는 pop rdi; ret; 가젯, 이후에는 차례대로 /bin/sh, 그리고 leak한 ret에서 구한 libc_base + system이 들어간다.

 

 

 


 

 

Exploit with RTL through bypassing Stack Canary

 

 

 

 

 

실행하면 위와 같이 쉘이 따지는 것을 볼 수 있다.

 

 

 

 


 

 

관련된 시스템 해킹 글 다시 보기

 

 

Buffer Overflow - RTL

 

Buffer Overflow 공격 (RTL)

Buffer Overflow 공격 문제 풀이 이 글은 Buffer Overflow 공격 문제를 풀이한다. 이 취약점의 원리에 관해서 Buffer Overflow 취약점 글을 참고하기 바란다. PLT & GOT 바이너리를 Dynamic Linking, 즉 동적 링킹..

mountainhiker.tistory.com

 

Buffer Overflow - ROP

 

Buffer Overflow 공격 (ROP)

Buffer Overflow 공격 문제 풀이 이 글은 Buffer Overflow 공격 문제를 풀이한다. 이 취약점의 원리에 관해서 Buffer Overflow 취약점 글을 참고하기 바란다. Dreamhack basic_rop_x86 system은 프로그램 실행..

mountainhiker.tistory.com

 

Format String Bug

 

Format String Bug

Exploit through Format String Bug Format String Bug를 이용하여 __libc_start_main의 주소를 leak 한 후, 이를 이용하여 libc_base를 구하고 RTL로 익스플로잇을 한다. ret addr에 있는 값을 leak 하려면 레지..

mountainhiker.tistory.com

 

모든 시스템 해킹 글 다시 보기

 

'Layer7/System Hacking' 카테고리의 글 목록

 

mountainhiker.tistory.com

 

 

 


 

 

 

 

 

 

 

 

메인 사진 출처: Unsplash

© 남찬우, 2021

 

 

 

'Layer7 > Layer7_System Hacking' 카테고리의 다른 글

Format String Bug  (0) 2021.08.01
Buffer Overflow (ROP)  (0) 2021.07.31
Buffer Overflow (RTL, PLT&GOT)  (0) 2021.07.14
Buffer Overflow (PIE)  (0) 2021.07.11
Buffer Overflow (Shellcode)  (0) 2021.07.10