포맷 스트링 공격

justugi·2024년 5월 28일

웹 취약점 진단

목록 보기
16/19

주의사항 : 이 포스팅은 개인 학습 및 교육적 목적으로 작성되었으며, 제공하는 정보를 악용하여 불법적인 행위를 하는 것은 엄격히 금지되어 있습니다. 웹 취약점 진단은 해당 웹사이트의 소유자의 명시적인 허가 없이는 수행해서는 안되며, 웹 취약점을 발견하였을 경우 즉시 해당 웹사이트의 소유자나 관리자에게 알려야 합니다.

포맷 스트링

: 프로그래밍에서 사용되는 형식 지정 문자열로, 주로 사용자 입력을 받아들이거나 결과를 출력할 때 특정한 형식이나 형태를 지정해주는 역할을 한다. 또한 포맷 스트링은 공간 확보, 0으로 채우기, 정렬 방향 등 다양한 기능을 지원한다.

  • printf("The number : %d\n", 618); 와 같은 함수에서 따옴표(" ") 안의 문자열 The number : %d\n 이 포맷 스트링이다.

포맷 스트링은 다양한 서식 변환 문자를 포함하며, 이를 사용하는 함수에서 특정한 형식으로 값을 출력하거나 입력받을 수 있다.

  • 주요 서식 변환 문자
    %d : 10진수의 수 출력
    %o : 8진수의 수 출력
    %x : 16진수의 수 출력
    %c : 문자 출력
    %s : 문자열 출력

포맷 스트링 공격

: 포맷 스트링을 지정하지 않았을 경우, 스택의 메모리 주소를 출력하여 공격에 활용되거나 메모리 값 자체가 변조되거나 원하는 명령을 수행하도록 악용될 수 있다.

점검 절차

  1. 웹 사이트에서 사용자가 입력할 수 있는 파라미터 값에 다양한 포맷 스트링 패턴을 삽입하여 일반적인 값을 입력했을 때는 발생하지 않는 에러 반응이 있는지 확인한다.

보안 대책

  1. 사용자 입력값을 직접적으로 포맷 스트링으로 사용하지 않는다.
  2. 공격에 취약한 함수 사용을 지양한다.

출처
http://wiki.hash.kr/index.php/%ED%8F%AC%EB%A7%B7%EC%8A%A4%ED%8A%B8%EB%A7%81_%EA%B3%B5%EA%B2%A9
https://bloofer.net/94

profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글