C 언어의 printf()
등의 함수에서 사용되는 문자열의 입,출력 형태를 정의하는 문자열로 Format String이라 표현한다.
printf(buf)
와 같은 형태로 사용하면 출력할 buf
의 값이 format string이면 buf
를 문자로 취급하는게 아닌 format string으로 취급하여 취약점이 일어남.
buf
배열을 가르키는 주소의 다음 4바이트 위치를 참조하여 그 서식 문자의 기능대로 출력함Format String을 인자로 하는 함수의 취약점을 이요한 공격으로 외부로부터 입력된 값을 검증하지 않고 입출력 함수의 format string을 그대로 사용하는 경우 발생하는 취약점
공격자는 format string을 이용하여 취약한 프로세스를 공격, 메모리 read 또는 write를 할 수 있음
%n directive
를 이용하여 공격
%n
은 현재까지 출력된 값들을 count해서 그 다음 메모리 주소값에 그대로 대입하는 서식문자
프로세스의 권한을 획득하여 임의의 코드 실행 가능
#include <stdio.h>
int main(int argc, char **argv){
printf(argv[1]);
}
#include <stdio.h>
int main(int argc, char** argv){
printf("%s", argv[1])
}