tmxklab
FSOP(File Stream Oriented Programming) 본문
FSOP기법을 사용하기 위해서는 file stream을 사용하는 함수가 존재해야하고 file stream을 변조할 수 있으면 가능하다.
FSOP를 통해서 할 수 있는 거는 libc주소를 릭하거나 file stream의 vtable주소를 변조하여 원하는 함수로 이동할 수 있다.
이거를 이해하기 위해서 먼저 _IO_FILE struct, _IO_FILE_plus struct를 이해해야 한다.
참고 :
그러고 나서 다음 링크를 참고하면 대충 vtable주소를 변조하여 원하는 주소로 어떻게 조지는지 알 수있다.
fsop관련해서 두 문제밖에 풀지는 못했지만...(libc leak하고 vtable 변조하는거 각각 1개씩)
대충 느낌은 이런 것 같다.
file stream을 사용하는 함수(ex. puts(), fclose() 등등 )루틴 내에 존재하는 함수
즉, 내가 변조했던 vtable에 존재하는 함수를 실행하기 위해 _flags값을 조져서 이리저리 우회하고
그러다가 최종적으로 실행되면 vtable에 박아놨던 내가 최종적으로 원하는 함수를 실행시킨다.
말을 어렵게 했는데.. 요약하면
1) vtable을 변조하여 vtable에 offset만큼 떨어진 함수(ex. vtable->__close)에 내가 원하는 함수를 넣는다.
2) __close를 호출하는 부분까지 도달하기 위해 _flags를 조져서 이리저리 우회
3) 그러면 vtable로부터 __close까지 떨어진 offset을 계산해서 __close를 호출하겟지만....
실제로는 vtable을 변조했기 때문에 __close까지 떨어진 offset에는 내가 원하는 함수가 있따.!!
'Security > 01 System Hacking' 카테고리의 다른 글
Linux Memory Protection (0) | 2020.09.15 |
---|---|
RTC(Return to csu) (0) | 2020.09.15 |
FSOP를 위한 fclose()분석 (0) | 2020.09.15 |
stdout flag를 이용한 libc leak (6) | 2020.08.26 |
heap(5) - tcache 정리 (0) | 2020.08.24 |
Comments