최근에 format string bug 취약점을 공부하면서 c언어 코드를 작성해 %n, %hn에 관한 실험을 많이 해봤는데, 이상하게 같은 코드라도 gcc에서는 빌드가 되지만 visual studio(2017)에서는 빌드가 안되는 현상을 발견했다.
위 코드는 "Hello World!"의 길이 값을 int형 변수 a에 넣어준 후 a 값을 출력하는 간단한 c언어 코드다.
%n 서식 지정자가 길이 값을 넣어주는 역할을 하는데, 저대로 실행한다면 아래와 같은 오류가 뜬다.
%hn을 써봐도 똑같은 오류가 뜨는 것을 볼 수 있다.
해결 방법은 간단하다.
_set_printf_count_output(1); 이 코드를 main 함수 맨 위에 작성해주면 된다.
_set_printf_count_output(1);를 써주니 잘 작동하는 것을 볼 수 있다.(%hn도 잘 작동한다.)
'Old (2021.01 ~ 2021.12) > Tip' 카테고리의 다른 글
정상적인 plt 코드가 나오지 않을 경우 (0) | 2021.05.15 |
---|