Reference/Pwnable_Study

[Pwn] gdb offset Tip

P_Squirrel 2023. 4. 1. 03:14

이번 글은 _rtld_global overwrtie를 하기 위해 문제를 진행하다 막혀 리서칭하다

알게된 Tip아닌 Tip을 정리했기에 _rtld_global overwrtie를 예시로 설명한 글입니다.

 

gdb-peda, pwndbg

지금까지는 pwndbg를 이용해 대부분의 문제를 해결했습니다.

하지만 관련 디버깅툴을 알아보니 gdb-peda 뿐 아니라 몇가지에 특화된 디버깅툴이 많이 존재했습니다.

그중에서도 gdb-peda는 offset을 계산하거나 찾는데 특화가 되어 있다고 합니다.

해서 이러한 좋은 툴을 매번 선택적으로 쓰기 위해서 파일을 갈아엎어야 하는게

불편해서 자료를 찾아보니 이를 해결한 방안이 있었습니다.

 

https://flash-ctf.tistory.com/91

 

[디버거] PEDA, PWNDBG,gef 설정방법! (feat. gdbinit)

안녕하세요, 오랜만에 포스팅 하네요! 비오비에서 공부하느라 블로그에 소홀했네요.. 될때마다 틈틈히 올리도록 하겠습니다. 각설하고 오늘 포스팅 할 내용은, pwnable 할 때 쓰는 다양한 디버거

flash-ctf.tistory.com

관련 자료를 짧게 정리하면 peda와 pwndbg등을 설치한뒤

gdb 명령어로 gdb들을 연결해주는 source를 정해두는 ~/.gdbinit 파일에서 조정을 하는 것입니다.

 

사용하고자 하는 디버깅툴을 제외하고 나머지는 주석처리를 하는 것으로 해결이 가능합니다.

이렇게 사용을 하면 사용하고자 하는 목적에 따라 맞는 디버깅툴을 선택적으로 사용할 수 있게 됩니다.

 

gdb offset 계산

이번 글을 작성하게 된 목표인 _rtld_global 의 오프셋을 예로 들어보겠습니다.

먼저 드림핵의 자료를 보면

_rtld_global을 심볼로써 _dl_load_lock를 검색하는걸 당연하게 작업을 했습니다.

 

하지만 작성자는 어째서인지 cast type문제에 막혀 이에대해 해결할수가 없었습니다.

몇시간동안 symbol search, _rtld_global cast type 등 여러 키워드로 검색을 했으나

찾지 못했을때 peda pwngdb 플러그인 팁정리 글을 찾게 되었습니다.

https://my-repo.tistory.com/m/43

 

의외로 잘 모르는 peda pwngdb 플러그인 사용 팁

code, ld, libc , heap 등등으로 base 주소를 출력하는 방법은 잘 알것이다. 그러나 오프셋 연산이 즉각적으로 필요한 경우에 계산기를 켜거나 p 명령을 이용해서 연산을 진행하는 경우가 있다. 이때 cod

my-repo.tistory.com

이글에 따르면

libc를 실행하는 걸로 심볼에 주소값을 저장하기에 오프셋을 편하게 구하는게 가능하다고 합니다.

 

이를 이용해 rtld 문제에 적용후 확인해보면 확인할 수 있었습니다.

하지만 드림핵 자료를 보면

offset이 차이가 나는데 이건 libc와 ld의 셋팅문제인것으로 확인됩니다.

 

이러한 문제를 겪으면서 분석을 위한 셋팅에 관한 자세한 부분은

추후 문제를 통해 더 깊게 들어가는 것으로 하고 마무리 하겠습니다.