this repo helps you to download & debug glibc easily.
feature
- download glibc binary
- download glibc debug file
- download glibc source code
- extract custom glibc
- auto patch
available command associated with downloading libc:
update_list
at first.remove_duplicate
will delete duplicate libc version info in list.download all
will download all libc in list.install_build-id
will copy all build-id (debug info) to system debug info dir. !!! BE CAREFUL !!!
โ glibc-all-in-one ./update_list
[+] Common list has been save to "list"
[+] Old-release list has been save to "old_list"
โ glibc-all-in-one ./remove_duplicate
[+] Removed 0 items in ./list, left: 4
[+] Removed 0 items in ./old_list, left: 0
โ glibc-all-in-one cat list
2.23-0ubuntu10_amd64
2.23-0ubuntu10_i386
2.23-0ubuntu11_amd64
2.23-0ubuntu11_i386
2.23-0ubuntu3_amd64
2.23-0ubuntu3_i386
2.27-3ubuntu1_amd64
2.27-3ubuntu1_i386
2.28-0ubuntu1_amd64
2.28-0ubuntu1_i386
......
โ glibc-all-in-one cat old_list
2.21-0ubuntu4.3_amd64
2.21-0ubuntu4.3_amd64
2.21-0ubuntu4_amd64
2.21-0ubuntu4_amd64
2.24-3ubuntu1_amd64
2.24-3ubuntu1_amd64
2.24-3ubuntu2.2_amd64
2.24-3ubuntu2.2_amd64
2.24-9ubuntu2.2_amd64
2.24-9ubuntu2.2_amd64
......
โ glibc-all-in-one ./download all
Getting 2.31-0ubuntu9.10_amd64
-> Location: https://mirrors.ustc.edu.cn/ubuntu/pool/main/g/glibc/libc6_2.31-0ubuntu9.10_amd64.deb
-> Downloading libc binary package
-> Extracting libc binary package
-> Package saved to libs/2.31-0ubuntu9.10_amd64
-> Location: https://mirrors.ustc.edu.cn/ubuntu/pool/main/g/glibc/libc6-dbg_2.31-0ubuntu9.10_amd64.deb
-> Downloading libc debug package
-> Extracting libc debug package
-> Package saved to libs/2.31-0ubuntu9.10_amd64/.debug
-> Location: https://mirrors.ustc.edu.cn/ubuntu/pool/universe/g/glibc/glibc-source_2.31-0ubuntu9.10_all.deb
-> Downloading libc source package
-> Extracting libc source package
-> Package saved to libs/2.31-0ubuntu9.10_amd64/src
......
โ glibc-all-in-one ls libs/2.23-0ubuntu10_i386/.debug
ld-2.23.so libc-2.23.so ......
โ glibc-all-in-one ls libs/2.31-0ubuntu9.10_amd64/src
abi-tags configure ......
libc-patch
is a script that helps you to patch your ELF file to a specific libc version.
We call the ELF file waiting for patch pwn
.
Given a libc, this script will detect its version and try to find ld in libs
, using patchelf
to patch the pwn
's libc and ld.
If no libc path is given, the script will try to search ELF file named like *libc*
under pwn
's dir.
A backup named pwn.orig
will be created.
โ pwnpwn libc-patch ./pwnpwn
[*] glibc base dir: /usr/lib/glibc
[*] try to find libc under `.`
[*] '/home/wangjihe/pwn/pwnpwn/pwnpwn'
Arch: amd64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
[*] '/home/wangjihe/pwn/pwnpwn/libc-2.31.so'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
[+] libc: libc.so.6
[+] linker: /lib64/ld-linux-x86-64.so.2
[+] libc version: 2.31-0ubuntu9.9_amd64
[*] replace ld: ['patchelf', '--set-interpreter', '/usr/lib/glibc/2.31-0ubuntu9.9_amd64/ld-linux-x86-64.so.2', './pwnpwn']
[*] replace libc: ['patchelf', '--replace-needed', 'libc.so.6', '/usr/lib/glibc/2.31-0ubuntu9.9_amd64/libc.so.6', './pwnpwn']
continue? (Y/n)
[*] created backup: ./pwnpwn.orig
[*] ld result: 0
[*] libc result: 0
[*] ldd result:
linux-vdso.so.1 (0x00007ffe0d3ec000)
/usr/lib/glibc/2.31-0ubuntu9.9_amd64/libc.so.6 (0x00007fa95ac0e000)
/usr/lib/glibc/2.31-0ubuntu9.9_amd64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fa95b1cb000)