z이전 글들과 같이 setvbuf를 이용한 프로그램을 하나 짜고 실행을 시켜보면서 함수들을 알아내고 glibc에서 그 함수들을 볼 수 있습니다. #include int main(){ setvbuf(stdin, 0LL, 2, 0); } #define _IOFBF 0 /* 완전 버퍼링. */ #define _IOLBF 1 /* 줄 버퍼링. */ #define _IONBF 2 /* 버퍼링 하지 않음. */ int _IO_setvbuf (_IO_FILE *fp, char *buf, int mode, _IO_size_t size) { int result; CHECK_FILE (fp, EOF); _IO_acquire_lock (fp); switch (mode) // mode에 따라 다르게 작동한다. { case _..
2019/09/12 - [힙(heap)/house_of_orange] - house_of_orange 번외 - fopen함수 분석(glibc 2.23) 2019/09/13 - [힙(heap)/house_of_orange] - house_of_orange 번외 fread 분석 (glibc 2.23) 2019/09/13 - [힙(heap)/house_of_orange] - house_of_orange 번외 - fwrite 분석 2019/09/13 - [힙(heap)/house_of_orange] - house_of_orange 번외 - fclose 분석 이렇게 파일 관련 함수들을 분석을 해보았는데 이번에는 이것을 바탕으로 FSOP라는 공격기법을 사용해볼 것입니다. 문제는 pwnable.tw의 seethefi..
이제 마지막으로 fclose를 분석함으로서 파일 관련 분석을 끝낼 것입니다. 이번에도 마찬가지로 #include int main(){ FILE* f = fopen("tmp", "w"); fclose(f); } 이런식으로 간단한 프로그램을 짜주시고 디버깅을 해보시면서 함수를 보시면 됩니다. 먼저 fclose도 fwrite와 fread와 비슷하게 fclose는 _IO_new_fclose의 약어입니다. int _IO_new_fclose (FILE *fp) { int status; CHECK_FILE(fp, EOF); #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) /* 우리는 필사적으로 이상한 방법으로 스트림을 사용하고, 예전과 새로운 함수를 섞은 프로그램들을 도우려고 시도한..
2019/09/13 - [힙(heap)/house_of_orange] - house_of_orange 번외 fread 분석 (glibc 2.23) 저번에는 fread에 대해 분석을 해보았는데 이제는 fwrite에 대해 분석을 진행해 볼 것입니다. #include int main(){ char s[100] = "test_test_test_test"; int f = fopen("tmp", "w"); fwrite(s,1,9,f); } 이런식으로 간단한 프로그램을 짜주시고 컴파일 후 디버깅을 이용해 함수를 보시면 됩니다. fwrite는 iofwrite랑 같습니다. 즉 iofwrite를 분석하면 fwrite를 분석하는 것입니다. _IO_size_t _IO_fwrite (const void *buf, _IO_siz..
이번에는 fread를 분석해볼 것입니다. 저번과 마찬가지로 간단한 c 프로그램을 짜고 컴파일 후 디버깅을 하면서 함수를 보고 소스코드를 보는식으로 하겠습니다. #include int main(){ char s[100]; int f = fopen("tmp", "r"); fread(s,1,10,f); } 이런식으로 간단하게 짠다음에 디버깅을 해서 함수를 보자면 아래 그림의 과정으로 함수가 호출이 됩니다. 먼저 _IO_fread를 보겠습니다. # define CHECK_FILE(FILE, RET) do { } while (0) # define _IO_release_lock(_fp) ; } while (0) size_t _IO_fread (void *buf, size_t size, size_t count, FI..
house_of_orange라는 것도 FSOP라는 공격기법 중 하나입니다. 그래서 이번엔는 house of orange 심화로 FILE과 관련된 구조체, 함수들에 대해 정리를 해보고 익스플로잇(FSOP)을 해보도록 하겠습니다. 먼저 파일 디스크립터를 다룰때 가장 많이 나오는 foen함수를 보도록 하겠습니다. fopen 함수를 아래처럼 코딩한 후 gdb를 통해 fopen() 함수의 흐름을 보자면 #include int main(){ int f = fopen("tmp", "r"); } 이런식으로 호출이 된다는 것을 알 수 있습니다. __fopen_internal 부터 보도록합시다. typedef struct { int lock; int cnt; void *owner; } _IO_lock_t; //stdio-..