karkinos
1.0.0
Linux でのバイナリの活用を支援する大規模なライブラリ データベース。このツールは、既知のシンボルの場所を提供することで未知のライブラリを特定したり、特定のライブラリを含むパッケージの名前を見つけたり、使用しているライブラリのデバッグ バージョンを見つけたりするのに役立ちます。
ライブラリが特定されたら、シンボル (エクスポートされたシンボルと悪用に役立つ特別に計算された便利な場所の両方)、ROP チェーンまたはワンショット用のガジェット (別名マジック ガジェットまたはワン ガジェット) およびその制約などの有用な情報をダンプできます。
この使用法は、優れた libc-database からインスピレーションを得ています。
次のような多くのアーキテクチャをサポートしています。
長年にわたる多くのディストリビューションにわたってインデックスが作成されたライブラリが多数あります。インデックス付けされたライブラリは次のとおりです。
推奨される方法は、最新リリースをダウンロードして抽出することです。それ以降は、Karkinos が独自に更新を管理します。あるいは、このリポジトリのクローンを作成することもできます。
いずれかの方法で Karkinos を取得したら、次のコマンドを実行してツールにアクセスできます。
$ ./kark.py --help
最初の実行では、圧縮ファイルからデータベースの抽出が試行されます。xz xz
とcat
バイナリがインストールされており、 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