네른

2. FSB - Format String Bug / Double Free / Use After Free 본문

강의 정리/드림핵 정리

2. FSB - Format String Bug / Double Free / Use After Free

네른 2021. 2. 24. 11:38

1. FSB - 포맷 스트링 버그

 - printf 혹은 sprintf 와 같이 '포맷 스트링'을 사용하는 함수에서 발생할 수 있는 버그

 - 사용자의 입력을 받아 출력할 때, 사용자가 일반적인 스트링이 아닌, '포맷 스트링'을 입력했다면?

 - %x와 %s같은 값을 입력하는 경우 의도되지 않은 스트링이 출력될 것.

 

주로 사용되는 포맷 스트링

 - %x : 16진수

 - %p : 포인터

 - %n : 작성된 총 바이트 수

 - %s : 문자열

 - %d : 10진수 등등

 

예시

 - fgets(buf, sizeof(buf), stdin) 이후 printf(buf)를 하는 경우

 - buf(buf의 내용을 가리키는 주소) / sizeof(buf) / stdin / buf의 내용 과 같이 스택이 구성됨

 - 여기서 사용자가 buf에 AAAA %d %p %x 를 입력하게 되면

 - buf의 내용(AAAA) / %d / %p / %x 의 순서대로 내용이 출력되기에

 - AAAA / buf 길이 / stdin의 주소 / 41414141 이 출력됨

 

여기서 %n은 지금까지 출력된 값들을 세서 다음 메모리 값에 그대로 입력해줌

만약 위의 내용의 맨 끝에 %n이 있었다면, 0x41414141이라는 주소에 출력된 값이 덮어씌워짐

 

2. Double Free & Use After Free

 

 - 힙에서 일어나는 메모리 취약점

 - UAF의 경우, 할당된 힙 메모리를 해제한 이후, 다시 할당할 때 기존에 사용한 주소와 동일한 주소를 사용하여 발생하는 문제.

 - 이는 구조적으로 효율성을 위해 해제된 메모리를 재사용하여 발생하는 것

 - 이를 통해 이미 사용중인 다른 힙 메모리의 내용을 수정할 수도 있음

 

퀴즈 내용

 - int의 최대값은 0x7FFFFFFF 이고, 이 값 + 1은 0x80000000이며 이는 곧 음수이다.

 - 자료형의 최소 최댓값과 overflow에 대해서 생각해보자.

'강의 정리 > 드림핵 정리' 카테고리의 다른 글

Stack Buffer Overflow  (0) 2022.02.15
Calling Convention  (0) 2022.02.15
pwntools API 정리  (0) 2022.02.11
orw shellcode  (0) 2022.02.11
1. BOF - Buffer OverFlow / OOB - Out Of Boundary / Off-by-one  (0) 2021.02.23
Comments