Linux Exploitation/settings
[Pwnable] 디버깅 심볼 다운로드 및 오프셋 알아내기
Rosieblue
2023. 7. 14. 12:17
728x90
_rtld_global 관련 워게임을 풀다가 이건 다른 문제 풀이에도 많이 쓰일 것 같아서 포스트를 하나 더 작성한다.
예를 들어 _rtld_global의 주소를 우리가 릭 했다고 해도, 이 구조체 안 멤버 변수들 간의 오프셋이 궁금할 수가 있다.
이때 이 오프셋은 glibc나 우분투 버전 등에 의해 다를 수 있는데 이런 경우 공격 환경과 동일한 버전의 디버깅 심볼을 다운로드 한 후 gdb로 오프셋을 구할 수 있다.
1. 먼저 라이브러리 버전 및 ld 버전을 안 상태에서 glibc 버전을 구할 수 있다
이상태 그대로 libc-2.27.so를 실행해보자
libc를 실행하기 위해서는 ld 버전도 동일해야하는 것 같다. 위 주어진 ld-2.27.so랑 내 칼리에서 돌아가는 로더가 다르기 때문에 문제에서 주어진 ld-2.27.so로 로더를 변경해서 실행해야 한다.
그러기 위해서는 patchelf 명령어를 실행해야한다. -> [Pwnable] 로더 파일 설정, patchelf 사용법
pathelf로 라이브러리의 로더에 맞게 설정해주니 잘 뜬다
Ubuntu GLIBC 2.27-3ubuntu1을 사용한다고 한다. 해당 버전의 libc6-dbg 패키지를 다운받으면 된다.
구글에 libc6-dbg 2.27-3ubuntu1을 치면 나온다.
$ wget http://launchpadlibrarian.net/365856914/libc6-dbg_2.27-3ubuntu1_amd64.deb
다운이 제대로 되면 압축을 풀어준다
$ dpkg -x libc6-dbg_2.27-3ubuntu1_amd64.deb ./
이후 gdb로 아래 파일을 분석해서 오프셋을 알아낼 수 있다.
$ gdb usr/lib/debug/lib/x86_64-linux-gnu/ld-2.27.so