728x90
우리는 여러 File operation 들을 안다.
(예를 들어서 fclose, fopen, fread... 등등)
이들은 모두 리눅스의 file descriptor라는 단위(device 따위가 사용함)를 통해 사용되는 operation들이다.
이 file descriptor들은 파일 구조체(_IO_FILE)을 통해 조작 즉, file operation들은 이 _IO_FILE을 참조하여 동작한다.
_IO_FILE의 모습에서 일단 _lock에 null을 넣지 않으면 file 연산이 수행되지 않는다는 것만 알아두자.
→ 우리가 아는 멀티스레딩에서 lock 부분에 해당함(그냥 웬만하면 그대로 두자...)
각설하고! 가장 중요한건 제일 마지막에 있는 _IO_FILE_PLUS의 vtable이다.
tele를 통해 보면 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 |
댓글