Une grande base de données de bibliothèque pour aider à l'exploitation binaire sous Linux. Cet outil peut aider à identifier les bibliothèques inconnues en fournissant l'emplacement des symboles connus, il peut aider à localiser le nom des packages contenant une bibliothèque donnée et il peut trouver la version de débogage d'une bibliothèque avec laquelle vous travaillez.
Une fois la bibliothèque identifiée, vous pouvez vider des informations utiles telles que des symboles (à la fois des symboles exportés et des emplacements calculés utiles spéciaux qui sont utiles pour l'exploitation), des gadgets pour les chaînes ROP ou one shot (gadgets magiques AKA ou gadgets uniques) et leurs contraintes.
L'utilisation est inspirée de l'excellente base de données libc.
Il prend en charge de nombreuses architectures, notamment :
Il existe de nombreuses bibliothèques indexées sur de nombreuses distributions s'étalant sur plusieurs années. Les bibliothèques indexées sont :
La méthode préférée consiste simplement à télécharger et à extraire la dernière version. Karkinos gérera lui-même les mises à jour à partir de ce moment-là. Alternativement, vous pouvez cloner ce référentiel.
Une fois que vous avez Karkinos via l'une ou l'autre méthode, vous pouvez accéder à l'outil en exécutant :
$ ./kark.py --help
Lors de la première exécution, il tentera d'extraire les bases de données des fichiers compressés. Vous devrez avoir les binaires xz
et cat
installés et disponibles via la variable d'environnement PATH
.
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