[Pwn tips] main_arena offset

코코·2023년 4월 18일
0

Pwn-tools & tip

목록 보기
5/8

오늘은 main_arena의 symbol을 못찾을 때, 어떤 식으로 검색해야하는지 찾아보다가 한 블로그에서 __malloc_hook의 symbol을 통해 찾는 것을 보고 메모로 적어보려한다.


이걸 왜 찾아보게 되었냐면, 일반적으로 system 함수나 다른 함수들의 offset을 검색할 때 nm명령어를 통해 검색했었는데, main_arena는 도통 나오지않았다.

nm 명령어로 검색했을 때, system함수와 __malloc_hook의 offset은 나왔지만 main_arena의 offset은 나오지 않았다..

readelf 명령어를 통해 검색해도 마찬가지이다...


Calc main_arena's offset

이러던 중 한 블로그를 보게 되었는데... 아래와 같이 적혀 있었다.

main_arena와 __malloc_hook + 0x10에 위치한다.

실제로 바이너리 파일을 하나 실행해보고, __malloc_hook과 main_arena의 주소를 찍어본 결과! 두둥 0x10(0x7ffff7dcdc40 - 0x7ffff7dcdc30)차이였다.


즉, 라이브러리의 베이스 주스를 구하려면 main_arena의 실제 주소 - (malloc_hook의 offset + 0x10) 이런 식으로 계산해주면 된다!

실제 계산한 결과와 vmmap을 통해 라이브러리의 베이스 주소를 살펴보면 일치한다!

p &__malloc_hook
p &main_arena

print/x 0x7ffff7dcdc40 - 0x3ebc30 - 0x10

vmmap



Github

서칭하다보니 관련 Tool도 존재한다고 해서 작성해보려한다. 아래에 해당 Tool의 Github 주소를 적어두겠다.
👉 https://github.com/bash-c/main_arena_offset

git clone https://github.com/bash-c/main_arena_offset

git clone을 통해 gitbub에 있는 파일을 로컬로 복사해온다.


사용방법은 간단하다. main_arena [라이브러리 파일 경로]로 사용하면 된다!


-The end-




※ 참고
👉 https://juntheworld.tistory.com/m/87
👉 https://d41jung0d.tistory.com/114

profile
화이팅!

0개의 댓글