본문 바로가기
Q&A2021년 5월 15일1분 읽기

Format String 취약점이 뭔가요?

조
조은서
조회 679댓글 1

C언어 포맷 스트링 취약점이 어떤 원리인지 설명해주세요.

댓글 1

김김영삼5년 전

포맷 스트링 취약점은 printf 등 포맷 함수에 사용자 입력이 직접 들어갈 때 발생합니다.

// 취약한 코드
printf(user_input); // BAD

// 안전한 코드
printf("%s", user_input); // GOOD

공격:

  • %x — 스택 메모리 읽기
  • %s — 메모리의 문자열 읽기
  • %n — 메모리에 값 쓰기 (가장 위험)

%n으로 GOT 테이블을 덮어써서 코드 실행이 가능합니다.

방어: 포맷 문자열에 사용자 입력을 넣지 마세요. 컴파일러 경고(-Wformat-security)를 활성화하면 탐지 가능합니다.

Ctrl+Enter로 등록