이번 글은 _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등을 설치한뒤
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
이글에 따르면
libc를 실행하는 걸로 심볼에 주소값을 저장하기에 오프셋을 편하게 구하는게 가능하다고 합니다.
이를 이용해 rtld 문제에 적용후 확인해보면 확인할 수 있었습니다.
하지만 드림핵 자료를 보면
offset이 차이가 나는데 이건 libc와 ld의 셋팅문제인것으로 확인됩니다.
이러한 문제를 겪으면서 분석을 위한 셋팅에 관한 자세한 부분은
추후 문제를 통해 더 깊게 들어가는 것으로 하고 마무리 하겠습니다.
'Reference > Pwnable_Study' 카테고리의 다른 글
[Pwn] _IO_FILE_Plus & _IO_FILE vtable Overwrite (0) | 2023.07.01 |
---|---|
[Pwn] SROP(Sig Return Oriented Programming) (0) | 2023.05.02 |
[Pwn] Overwrite _rtld_global (0) | 2023.04.01 |
tcache double free bypass (0) | 2023.02.12 |
DFB(Double Free Bug) 취약점 (0) | 2023.01.19 |