이번 글은 _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의 셋팅문제인것으로 확인됩니다.
이러한 문제를 겪으면서 분석을 위한 셋팅에 관한 자세한 부분은
추후 문제를 통해 더 깊게 들어가는 것으로 하고 마무리 하겠습니다.
'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 |