본문 바로가기
Systemhacking/Base info

File Stream Oriented Programming

by reindeer002 2023. 7. 19.
728x90

우리는 여러 File operation 들을 안다.
(예를 들어서 fclose, fopen, fread... 등등)

이들은 모두 리눅스의 file descriptor라는 단위(device 따위가 사용함)를 통해 사용되는 operation들이다.

이 file descriptor들은 파일 구조체(_IO_FILE)을 통해 조작 즉, file operation들은 이 _IO_FILE을 참조하여 동작한다.

_IO_FILE_plus 구조

 

_IO_FILE의 모습에서 일단 _lock에 null을 넣지 않으면 file 연산이 수행되지 않는다는 것만 알아두자.
→ 우리가 아는 멀티스레딩에서 lock 부분에 해당함(그냥 웬만하면 그대로 두자...)

각설하고! 가장 중요한건 제일 마지막에 있는 _IO_FILE_PLUS의 vtable이다.
tele를 통해 보면 vtable의 모습이 명확히 보인다.

실험을 위해 stdin을 가지고 테스트해봄
vtable의 모습

그럼 vtable을 one_gadget으로 가득 찬 공간의 주소를 넣으면 익스가 성공할 것이다.

그러나... vtable의 내부에 존재하는 함수들의 주소는 읽기 권한만 존재하므로
stdout, stdin, stderr 및 다른 파일 디스크립터들의 vtable을 참조하기 위한 변수를 수정하여 익스플로잇 해야한다.

728x90

'Systemhacking > Base info' 카테고리의 다른 글

IO_buf_end attack  (0) 2023.07.19
malloc consolidate with Fastbin_Dup Consolidate  (1) 2023.06.04
small bin attack  (0) 2023.06.04
unsorted bin attack  (0) 2023.06.02
unsafe Unlink in heap  (0) 2022.11.07

댓글