libc inner plt & got and exploit

https://dreamhack.io/wargame/writeups/6673

이 글을 보면서 공부하다가 느낀점을 적는다. 이 문제는 원래 rtld_global overwrite 문제이다.

그런데 이 사람은 다르게 풀었기에 보았는데 printf 함수가 내부에서 vfprintf 함수를 호출하면서 libc 내부에서 plt & got 형식을 사용하는 것을 보았다.

여기서 보면 vfprintf+157 에서 어떤 함수를 call을 한다. 그리고 그 함수를 보면

*ABS*+0xa07f0@plt 라고 되어 있다 여기서 ABS “Absolute symbol” 라는 뜻으로 절대 주소의 심볼이다. libc 안에서도 왜 plt&got 형식을 쓰는지 궁금해서 알아보니 libc 안에서도 함수들끼리의 재배치 및 후킹과 같은 이유로 고정된 주소를 쓰면 후킹이 불가능 하기에 그렇다고 한다.

따라서 libc_base 구한다면 저 libc의 got를 overwrite 해서 공격이 가능하다.