Challenge is using libc 2.23
Analysis
input
에 fake FILE
structure를 만들고 fclose()
를 호출한다.
Exploitation
파일 구조체 전체에 임의의 값을 쓸 수 있기 때문에 vtable overwrite 기법을 이용하여 win()
이 실행되도록 할 수 있다. 문제에서는 libc 2.23 버전을 사용하고 있어서 vtable check가 존재하지 않는다.
fclose()
는 내부적으로 _IO_file_jumps+0x10
에 있는 _IO_new_file_finish()
를 호출하는데, _IO_new_fclose+48
부터 _IO_new_fclose+60
까지의 코드가 이 과정에 해당한다. 이 코드까지 도달하기 위해서 딱히 필요한 조건은 없는데, _lock
필드(&fp+0x88
)에는 쓰기 권한이 있는 주소를 넣어야 한다.
728x90