Eine große Bibliotheksdatenbank zur Unterstützung der Binärausnutzung unter Linux. Dieses Tool kann dabei helfen, unbekannte Bibliotheken zu identifizieren, indem es den Speicherort bekannter Symbole bereitstellt, es kann dabei helfen, den Namen von Paketen zu finden, die eine bestimmte Bibliothek enthalten, und es kann die Debugging-Version einer Bibliothek finden, mit der Sie arbeiten.
Sobald die Bibliothek identifiziert ist, können Sie nützliche Informationen wie Symbole (sowohl exportierte Symbole als auch besonders nützliche berechnete Orte, die für die Ausbeutung nützlich sind), Gadgets für ROP-Ketten oder One-Shot (auch bekannt als magische Gadgets oder One-Gadgets) und deren Einschränkungen ausgeben.
Die Verwendung ist von der hervorragenden libc-Datenbank inspiriert.
Es unterstützt viele Architekturen, darunter:
Es gibt viele Bibliotheken, die über viele Distributionen hinweg über viele Jahre hinweg indiziert sind. Die indizierten Bibliotheken sind:
Die bevorzugte Methode besteht darin, einfach die neueste Version herunterzuladen und zu extrahieren. Von diesem Zeitpunkt an wird Karkinos die Aktualisierungen selbst verwalten. Alternativ können Sie dieses Repository klonen.
Sobald Sie Karkinos über eine der beiden Methoden erhalten haben, können Sie auf das Tool zugreifen, indem Sie Folgendes ausführen:
$ ./kark.py --help
Beim ersten Durchlauf wird versucht, die Datenbanken aus den komprimierten Dateien zu extrahieren. Sie müssen die xz
und cat
-Binärdateien installiert haben und über die PATH
Umgebungsvariable verfügbar sein.
usage: kark.py [-h] [--libdb {glibc,libstdc++}] [--distro DISTRO]
[--arch {x86,amd64,i386,arm,arm64,mips,mips64,ppc,ppc64,sparc,sparc64,m68k,hppa,sh4}]
[--endian {little,big}]
{find,dump,info,update} ...
description:
karkinos is a library database to assist with exploitation by helping to
identify libraries from known offsets or to dump useful offsets from those
identified libraries. Each database indexes symbols, gadgets and where
possible one shot gadgets (AKA magic gadgets or one gadgets).
architectures indexed:
- x86 (amd64, i386)
- arm (arm, arm64)
- mips (mips, mips64)
- ppc (ppc, ppc64)
- sparc (sparc, sparc64)
- m68k
- hppa
- sh4
- riscv
libraries indexed:
- glibc
- libstdc++
- glibc-ld
- libgcc
- musl
commands:
- find find a library by symbol offsets, file, build id or file hash
- dump dump symbols/gadgets for a given library
- info print some information about a specific library
- update check for updates to the database
- version display version information and exit
positional arguments:
{find,dump,info,update}
command to execute
args arguments for specific command, see examples
optional arguments:
-h, --help show this help message and exit
--libdb {glibc,libstdc++}
the library database to use
--distro DISTRO the linux distribution to filter in symbol search
--arch {x86,amd64,i386,arm,arm64,mips,mips64,ppc,ppc64,sparc,sparc64,m68k,hppa,sh4}
architecture to filter in symbol search
--endian {little,big}
endianess to filter in symbol search
examples:
./kark.py find fgets b20 puts 9c0 fwrite 8a0
./kark.py find 50390b2ae8aaa73c47745040f54e602f
./kark.py find b417c0ba7cc5cf06d1d1bed6652cedb9253c60d0
./kark.py find /lib/x86_64-linux-gnu/libc.so.6
./kark.py --arch arm --endian big find system 440
./kark.py --distro ubuntu fgets b20 puts 9c0
./kark.py dump centos_glibc-2.12-1.107.el6_4.2.x86_64
./kark.py dump opensuse_glibc-2.19-16.9.1.i686 fgets system str_bin_sh
./kark.py info ubuntu_libc6-udeb_2.27-3ubuntu1_amd64
./kark.py update
@0xb0bb