일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- vtable
- RTL
- 나뭇잎 책
- srop
- UAF
- Reversing
- BOF
- tcache
- heap feng shui
- heap exploit
- ROP
- Dynamic Analysis
- _IO_FILE Arbitrary Address Write
- Lazenca
- __environ
- H4CKING GAME
- master canary
- Android
- DreamHack
- DFC 2022
- heap
- HackCTF
- shellcode
- _IO_FILE Arbitrary Address Read
- _IO_FILE
- GOT overwrite
- K-shield Junior
- seccomp
- DFB
- malware
- Today
- Total
목록개념 정리/_IO_FILE (4)
Studying Security

vtable overwrite (glibc < 2.24) 만약 vtable을 overwrite할 수 있는 조건이라면 해당 vtable에 조작된 vtable을 overwrite함으로써 원하는 동작을 수행하도록 할 수 있습니다. 그러나 IO_validate_vtable 함수가 생겨나면서 더 이상 vtable overwrite 기법으로 공격할 수 없습니다. Bypass IO_validate_vtable (glibc < 2.29) 전달된 파일 포인터의 vtable 주소를 참조하기 때문에 이 점을 이용합니다. vtable을 참조하는 과정을 확인해봅시다. IO_validate_vtable vtable pointer가 __libc_IO_vtables section에 할당됩니다. 해당 섹션의 시작과 끝 주소의 차이로 ..

파일 구조체를 조작해 파일을 읽는 함수를 이용해 임의의 메모리 값에 데이터를 쓸 수 있습니다. 파일의 데이터를 읽는 함수는 대표적으로 fread와 fgets가 존재합니다. 해당 함수는 라이브러리 내부에서 _IO_file_xsgetn 함수를 호출합니다. 해당 함수는 파일 함수의 인자로 전달된 n이 _IO_buf_end - _IO_buf_base 값보다 작은지를 검사하고 _underflow 즉 _IO_new_file_underflow함수를 호출합니다. _IO_new_file_underflow _flags 변수에 읽기 권한이 부여되어 있는지 확인합니다. 이 후 _IO_SYSREAD 함수의 인자로 파일 포인터와 파일 구조체의 멤버 변수를 연산한 값이 전달됩니다. _IO_SYSREAD 함수는 vtable의 _IO..

파일 구조체를 조작해 파일을 쓰는 과정에서 임의의 메모리 값을 읽을 수 있습니다. 파일에 데이터를 쓰기 위한 함수는 대표적으로 fwrite, fputs가 있습니다. 해당 함수는 라이브러리 내부에서 _IO_sputn 함수를 호출합니다. _IO_XSPUTN 함수의 매크로이며 실질적으로 _IO_new_file_xsputn 함수를 실행합니다. 이 함수에서는 파일 함수로 전달된 인자인 데이터와 길이를 검사하고 _IO_OVERFLOW, 즉 _IO_new_file_overflow 함수를 호출합니다. 실제로 파일에 내용을 쓰는 과정은 _IO_new_file_overflow를 시작으로 다양한 함수가 호출되면서 이뤄집니다. 그렇다면 _IO_new_file_overflow 함수 내부에서 어떻게 파일에 데이터를 쓰는지 자세하..

모든 파일 함수는 fopen함수에서 반환한 파일 포인터를 인자로 전달 받고 기능을 수행하기에 앞서 파일 포인터를 참조해 파일 정보(파일의 모드, 파일 작업을 수행하기 위한 함수의 주소)를 먼저 확인합니다. 이를 위해 파일 구조체와 파일 함수가 실행되는 과정을 이해합니다. 파일 구조체(_IO_FILE) 리눅스 시스템의 표준 라이브러리에서 파일 스트림을 나타내기 위한 구조체로 파일을 열기위한 fopen함수 사용할 때 힙 영역에 할당됩니다. 할당된 _IO_FILE 영역을 살펴보면 _IO_FILE_plus 구조체의 file 부분에 해당하고 이어서 vtable이 존재하는 것을 디버깅을 통해 확인할 수 있습니다. vtable(virtual function table)은 가상함수를 사용할 때 할당되는 테이블입니다. ..