
libc 오프셋 데이터베이스를 구축하여 익스플로잇을 단순화합니다.
libc-database는 이제 웹 서비스와 프론트엔드를 제공합니다. https://libc.rip/를 방문하여 사용해 보세요! API에 관심이 있다면 https://github.com/niklasb/libc-database/tree/master/searchengine를 읽어보세요.
오류가 발생하면 아래 "요구 사항" 섹션을 확인하세요.
원하는 libc 카테고리를 가져와서 심볼 오프셋을 추출합니다. 두 번 다운로드하지 않으므로 데이터베이스를 업데이트하는 데에도 사용할 수 있습니다:
$ ./get # List categories
$ ./get ubuntu debian # Download Ubuntu's and Debian's libc, old default behavior
$ ./get all # Download all categories. Can take a while!
사용자 정의 libc를 데이터베이스에 추가할 수도 있습니다.
$ ./add /usr/lib/libc-2.21.so
지정된 주소에 주어진 이름을 가진 데이터베이스의 모든 libc를 찾습니다. 무작위화는 일반적으로 페이지 크기 수준에서 작동하므로 마지막 12비트만 확인합니다.
$ ./find printf 260 puts f30
archive-glibc (libc6_2.19-10ubuntu2_i386)
누출된 반환 주소로부터 libc를 찾습니다 (__libc_start_main).
$ ./find __libc_start_main_ret a83
ubuntu-trusty-i386-libc6 (libc6_2.19-0ubuntu6.6_i386)
archive-eglibc (libc6_2.19-0ubuntu6_i386)
ubuntu-utopic-i386-libc6 (libc6_2.19-10ubuntu2.3_i386)
archive-glibc (libc6_2.19-10ubuntu2_i386)
archive-glibc (libc6_2.19-15ubuntu2_i386)
libc ID가 주어지면 유용한 오프셋을 덤프합니다. 덤프할 자신만의 이름을 제공할 수도 있습니다.
$ ./dump libc6_2.19-0ubuntu6.6_i386
offset___libc_start_main_ret = 0x19a83
offset_system = 0x00040190
offset_dup2 = 0x000db590
offset_recv = 0x000ed2d0
offset_str_bin_sh = 0x160a24
라이브러리가 이미 데이터베이스에 있는지 확인합니다.
$ ./identify /usr/lib/libc.so.6
local-f706181f06104ef6c7008c066290ea47aa4a82c5
또는 해시를 사용하여 libc를 찾습니다 (현재 BuildID, MD5, SHA1 및 SHA256이 구현됨):
$ ./identify bid=ebeabf5f7039f53748e996fc976b4da2d486a626
libc6_2.17-93ubuntu4_i386
$ ./identify md5=af7c40da33c685d67cdb166bd6ab7ac0
libc6_2.17-93ubuntu4_i386
$ ./identify sha1=9054f5cb7969056b6816b1e2572f2506370940c4
libc6_2.17-93ubuntu4_i386
$ ./identify sha256=8dc102c06c50512d1e5142ce93a6faf4ec8b6f5d9e33d2e1b45311aef683d9b2
libc6_2.17-93ubuntu4_i386
libc ID에 해당하는 전체 라이브러리를 다운로드합니다.
$ ./download libc6_2.23-0ubuntu10_amd64
Getting libc6_2.23-0ubuntu10_amd64
-> Location: http://security.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.23-0ubuntu10_amd64.deb
-> Downloading package
-> Extracting package
-> Package saved to libs/libc6_2.23-0ubuntu10_amd64
$ ls libs/libc6_2.23-0ubuntu10_amd64
ld-2.23.so ... libc.so.6 ... libpthread.so.0 ...
이 스크립트를 실행하려면 PATH에 다음 명령이 필요합니다:
RPM 기반 요구 사항 외에도 다음이 필요합니다:
데비안 기반 요구 사항 외에도 다음이 필요합니다:
Debian 10에 모든 것을 설치하려면 다음 명령을 실행하세요:
apt-get update
apt-get install -y \
binutils file \
wget \
rpm2cpio cpio \
zstd jq