file structure __lll_lock_wait_private 우회
·
File Structure
문제를 풀다가 생긴 문제점을 간단하게 요약하겠다. fwrite 함수를 파일 스트럭쳐를 변조한 뒤 call 하여 aaw를 하던 와중, 분명 fwrite 함수가 실행됐는데 입력을 받으며 멈춰있는 현상이 발생했고, 페이로드는 아래와 같았다. pay += p64(0) #read ptr pay += p64(environ) #read end pay += p64(0) #read base pay += p64(environ) #write base pay += p64(environ+0x100) #write ptr pay += p64(0) #write end pay += p64(0) #buf base pay += p64(0) #buf end pay += p64(0) #save base pay += p64(0) #backup..
_IO_FILE_plus의 모든 것.
·
File Structure
자꾸 헷갈려서 간단하게 요약해본다. 추가로 확인되는 사항이 있으면 지속적으로 update 할 예정이다. _IO_FILE_plus 많은 함수들이 단독으로 존재하는 것 같지만 사실은 _IO_FILE_plus 라는 구조체의 형식으로 존재하는 것들이 많다. 파일을 열고 닫는 함수들이 대부분 해당되며, stdin, stdout, stderr 등도 이 형식을 띄고 있다. _IO_FILE_plus 는 _IO_FILE 구조체와 vtable 구조체의 집합이다. _IO_FILE_plus 구조체의 모양은 아래와 같다. struct _IO_FILE_plus { FILE file; const struct _IO_jump_t *vtable; }; _IO_FILE 구조체 _IO_FILE 구조체의 형식은 아래와 같다. struct ..
FSOP - _IO_flush_all_lockp ()
·
File Structure
원리 기본적인 내용은 앞선 FSOP 들과 동일하며, _IO_FILE 구조체가 아닌 vtable 구조체의 값을 사용하는 함수이다. 더보기 https://wyv3rn.tistory.com/110?category=949837 _IO_FILE Arbitrary Address Read 원리 여러개의 파일을 열지만 읽기 권한이 없는 경우, 예를 들어 관리자가 작성한 암호 파일과 유저가 작성한 파일을 열어 그 내용을 비교한다고 가정할 때 관리자 파일에 읽기 권한이 없는 경 wyv3rn.tistory.com https://wyv3rn.tistory.com/112?category=949837 _IO_FILE Arbitrary Address Write 원리 큰 틀은 _IO_FILE Arbitrary Address Read..
Bypass IO_validate_vtable
·
File Structure
그냥 대충 훑어보면 절대 이해 못한다. 자세히 읽어보고 이해가 되면 넘어가자. 원리 _IO_FILE 구조체에서는 vtable을 참조하는데, vtable 내 함수를 조작할 수 있다면 임의의 함수를 실행할 수 있다. *libc 2.23 버전 이하와 2.24 버전 이상에서의 공격 방식이 조금 다르다. *2.29 이상에서는 완전히 패치 되었다. 취약점 앞서 본 _IO_FILE 구조체는 사실 혼자 있는 것이 아닌 vtable 구조체와 함께 한다. struct _IO_FILE_plus { FILE file; const struct _IO_jump_t *vtable; }; 즉, _IO_FILE_plus 구조체 내에 file, 즉 _IO_FILE 구조체와 vtable 구조체가 존재한다. _IO_jump_t _IO_ju..
_IO_FILE Arbitrary Address Write
·
File Structure
원리 큰 틀은 _IO_FILE Arbitrary Address Read와 동일하다. https://wyv3rn.tistory.com/110 _IO_FILE Arbitrary Address Read 원리 여러개의 파일을 열지만 읽기 권한이 없는 경우, 예를 들어 관리자가 작성한 암호 파일과 유저가 작성한 파일을 열어 그 내용을 비교한다고 가정할 때 관리자 파일에 읽기 권한이 없는 경 wyv3rn.tistory.com 취약점 마찬가지로 read와 동일하지만, _flags 값과 구조체에 들어가는 데이터가 조금 다르다. Read 함수 함수 인자 read 함수의 구조는 아래와 같다. read(f->_fileno, _IO_buf_base, _IO_buf_end - _IO_buf_base); 각 인자의 주요점은 아래..
_IO_FILE Arbitrary Address Read
·
File Structure
문제와 함께 읽어야 이해가 쉽다. https://wyv3rn.tistory.com/111 _IO_FILE Arbitrary Address Read 1. intro 2. code 및 분석 2.1 code // Name: iofile_aar // gcc -o iofile_aar iofile_aar.c -no-pie #include #include #include char flag_buf[1024]; FILE *fp; void init() { setvbuf(stdin, 0, 2, 0); setv.. wyv3rn.tistory.com 원리 여러개의 파일을 열지만 읽기 권한이 없는 경우, 예를 들어 관리자가 작성한 암호 파일과 유저가 작성한 파일을 열어 그 내용을 비교한다고 가정할 때 관리자 파일에 읽기 권한이 ..