printf 인자 질문

printf의 인자로 바꿀 변수의 주소를 먼저 넣고 그 다음에 포맷 스트링을 넣어서 이 포맷 스트링 %n이 buf를 가리키도록 하여,
그 변수의 값을 문자열의 길이로 바꾸게 된다는 것까지 실습을 통해서 배웠습니다.

그렇지만 buf에서 1) 왜 주소값을 먼저 넣고 2) 왜 그 다음에 포맷 스트링을 넣었을 때 되는 것인지 궁금합니다.
뭔가 printf에 비정상적인 방법으로 인자가 들어가서 공격이 성공하는 과정이 원리가 이해되지 않고 암기만 되어 잘 와닿지 않는 것 같습니다.
특히 printf("%s%n", buf, &auth)와 같이 앞에 포맷 스트링을 포함한 문자열이 오고 뒤에 변수들이 따라붙는 일반적인 경우와
굉장히 헷갈립니다.

개인적으로 생각해본 것은 printf의 첫번째 인자가 const char *이라서
첫번째 인자는 주소값까지로 끊기고 이후에 적용되는 것인가...하고 싶습니다.

#시스템_해킹 #기초 #포맷_스트링_버그
작성자 정보
답변 0
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기