본문 바로가기
Pwnable

Format String Bug

by ms-eo 2025. 11. 19.

Format String

Format : 서식 또는 형식

Format Function

  • Format String을 사용해 데이터를 원하는 형식으로 다루는 것이 가능한 함수

Format String

  • 어떠한 형식이나 형태를 지정해 주는 문자열
  • Format Function의 인자에 해당하며 텍스트나 Format Tag를 포함

ex. char str[20] = “LMS Pwnable”;

printf(”Hello %s World!”. str);

Format Tag

  • %로 시작하며 출력할 값에 [옵션]들을 선택 적용해 출력 형태 설정
  • 필수적인 최소한의 형태는 ‘%서식 지정자’

% [파라미터$] [플래그] [넓이] [.정밀도] [길이] 서식 지정자

  • 파라미터 : 참조할 인자의 인덱스를 지정 (구분자 : $)
  • 플래그 : 출력할 인자의 정렬 방식이나 부호를 지정
  • 넓이 : 출력할 인자의 최소 너비를 지정
  • .정밀도 : 출력할 인자의 자릿수를 지정
  • 길이 : 출력할 인자의 정확한 크기를 지정
  • 서식 지정자 : 출력할 인자의 자료형을 지정

Format Specifier

  • 여러 API에서 가변 인자를 받아 처리하기 위한 Data Format
  • 형식이나 형태를 지정하기 위한 %로 시작하는문자열

Format String Bug

Format String 취약점

  • 서식 지정자가 필요로 하는 인자 개수와 함수에 전달될 인자 개수를 비교하는 루틴이 없음
  • 대표적인 Format String 함수인 printf의 경우, 서식 지정자 개수에 따라 인자의 개수 결정

Format String Bug (FSB)

  • Format String 함수의 취약점을 이용해 Format String Bug라는 오류를 발생시키는 공격 방법
  • 사용자가 프로그램에 입력한 문자열 데이터가 Format String 명령으로 해석될 때 발생

Format String Bug 공격 기법

인자 적접 접근

  • Format Tag의 파라미터 옵션과 구분자인 $를 사용해 원하는 인자에 직접 접근하는 공격
  • “%(접근하려는 인자 번호)$(서식 지정자)”
  • ex. “$3$s”, %10$05d…

short 쓰기

  • short형인 서식 지정자 %hn을 사용하는 공격 (%n은 4byte의 int형, %hn은 2byte의 short형)
  • int 범위를 넘어서는 수를 저장해야할 때 short로 나누는 방식

 

'Pwnable' 카테고리의 다른 글

Heap Basic  (0) 2025.11.19
Integer Overflow  (0) 2025.11.19
Buffer Overflow  (0) 2025.11.19
Pwnable Tools  (0) 2025.11.19
Pwnable 방법론  (0) 2025.11.19