wargame을 풀 때 제공되는 libc.so.6 파일은 wargame을 풀 때 중요한 역할을 한다. libc의 버전이 정말 중요한데 libc의 버전을 알아낼 수 있는 방법은 아래와 같다.
./libc.so.6 --version
위와 같이 명령어를 쓰게 되면 libc버전이 출력되게 된다.
GNU C Library (Ubuntu GLIBC 2.23-0ubuntu11) stable release version 2.23, by Roland McGrath et al.
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 5.4.0 20160609.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>.
pwntools
우선 문제를 풀다 보면 동적으로 디버깅이 필요할 때가 있다. 하지만 pwnable의 문제 특성상 libc의 version이 다르면 취약점이 달라지기 때문에 해당 문제 서버 환경에 맞는 libc를 이용해 취약점을 찾아야 한다. 이때 pwntools을 이용하면 매번 환경을 구축하지 않고 쉽게 디버깅이 가능하다.
p = process(['바이너리경로'], env = {"LD_PRELOAD": 'libc.so.6 경로'})
위의 방법으로 pwntools을 이용해 실행하게 된다면 자동으로 libc의 버전을 바꾸어 바이너리를 실행할 수 있게 된다.
위의 방법을 사용할 때는 ubuntu의 저번이 16.04 버전이여야 한다. ubuntu 16.04 이후의 버전에서 해당 방법을 사용하게 되면 에러가 발생하고 디버깅이 불가능하다.
'hacking > pwnable' 카테고리의 다른 글
| scanf (0) | 2022.12.06 |
|---|---|
| SROP (0) | 2022.12.06 |
| Lazy Binding (0) | 2022.12.06 |
| _IO_FILE (0) | 2022.12.06 |
| Stack Pivoting (0) | 2022.12.06 |