본문 바로가기

Security

[systemhacking] format string bug

반응형

format string을 인자로 받는 함수

  • printf
  • sprintf / snprintf
  • fprintf
  • vprintf / vfprintf
  • vsprintf / vsnprintf

위와 같은 함수에 포맷 스트링을 주면 의도치 않은 값이 출력되거나 저장됨.

 

출력

#include <stdio.h>
int main(void) {
    char buf[100] = {0, };
    
    read(0, buf, 100);
    printf(buf);
}
$ ./fsb-1
%x %d
bf3977c0 100
$

 

파일 저장

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    FILE *fp = fopen("log.txt", "w");
    char buf[100] = {0, };
    
    read(0, buf, 100-1);
    
    fprintf(fp, "BUFFER-LOG: ");
    fprintf(fp, buf);
    
    fclose(fp);
    return 0;
}

의도치 않은 값 파일에 저장.

 

quiz

#include <stdio.h>
int main(void) {
    int flag = 0x41414141;
    char buf[32] = {0, };
    
    read(0, buf, 31);
    printf(buf);
}

printf 는 포맷스트링을 만나면 esp(현재 진행 스택 지점  / extended stack pointer) 0x4 단위로 이동하여 출력

flag는 printf로부터 40byte 떨어져 있으므로 %x 10개 입력으로 출력

반응형

'Security' 카테고리의 다른 글

[systemhacking] Integer Issues  (0) 2021.11.22
[systemhacking] Memory corruption  (0) 2021.11.18
[systemhacking] Off-by-one  (0) 2021.11.11
[systemhacking] Out of Boundary  (0) 2021.11.11
[systemhacking] 버퍼 오버플로우  (0) 2021.11.10