반응형
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 |