tmxklab

FSOP(File Stream Oriented Programming) 본문

Security/01 System Hacking

FSOP(File Stream Oriented Programming)

tmxk4221 2020. 9. 15. 17:11

FSOP기법을 사용하기 위해서는 file stream을 사용하는 함수가 존재해야하고 file stream을 변조할 수 있으면 가능하다. 

FSOP를 통해서 할 수 있는 거는 libc주소를 릭하거나 file stream의 vtable주소를 변조하여 원하는 함수로 이동할 수 있다.

 

이거를 이해하기 위해서 먼저 _IO_FILE struct, _IO_FILE_plus struct를 이해해야 한다.

참고 :

 

stdout flag를 이용한 libc leak

stdout flag값을 변경하여 libc주소를 leak하는 방법을 정리하였다 따로 libc주소를 leak할 방법이 없을 때 유용하게 쓰일 것 같당ㅎㅎ 관련 문제 : [HackCTF/Pwnable] ChildHeap stdout을 이용한 libc주소 leak &..

rninche01.tistory.com

 

 

그러고 나서 다음 링크를 참고하면 대충 vtable주소를 변조하여 원하는 주소로 어떻게 조지는지 알 수있다.

 

[Pwnable.xyz] fclose

1. 문제 nc svc.pwnable.xyz 30018 1) mitigation 확인 2) 문제 확인 인사했는데 안받아줬다 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { setup(argc,..

rninche01.tistory.com

 

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