RUNPATH
動的接続が変数とどのように機能するかをテストし、bash
最小限のchroot
ディレクトリで実行しようとしています。
$ find dir_chroot/ -type f
dir_chroot/bin/bash
dir_chroot/lib/x86_64-linux-gnu/libc.so.6
dir_chroot/lib/x86_64-linux-gnu/libdl.so.2
dir_chroot/lib/x86_64-linux-gnu/libtinfo.so.5
dir_chroot/lib64/ld-linux-x86-64.so.2
- これは依存関係であり、シンボリックリンクではなくbash
実際のバイナリ()です。find -type f
彼らも同様ですRUNPATH
:
$ find dir_chroot/ -type f -exec sh -c "readelf -d {} | grep RUNPATH" \;
$
chroot
このディレクトリではうまくいきます:
$ sudo chroot dir_chroot /bin/bash
bash-4.3# exit
exit
ただし、すべてをコピーして設定すると、RUNPATH
次の$ORIGIN/
実行時に終了コード(?)lib64/ld-linux-x86-64.so.2
が表示されます。139
segfault
chroot
$ cp -R dir_chroot dir_chroot4
$ find dir_chroot4/ -type f -exec sh -c "echo {} `readelf -d {} | grep RUNPATH`" \;
dir_chroot4/bin/bash
dir_chroot4/lib/x86_64-linux-gnu/libc.so.6
dir_chroot4/lib/x86_64-linux-gnu/libdl.so.2
dir_chroot4/lib/x86_64-linux-gnu/libtinfo.so.5
dir_chroot4/lib64/ld-linux-x86-64.so.2
$
$ patchelf --set-rpath "\$ORIGIN/" dir_chroot4/lib64/ld-linux-x86-64.so.2
$ find dir_chroot4/ -type f -exec sh -c "echo {} `readelf -d {} | grep RUNPATH`" \;
dir_chroot4/bin/bash
dir_chroot4/lib/x86_64-linux-gnu/libc.so.6
dir_chroot4/lib/x86_64-linux-gnu/libdl.so.2
dir_chroot4/lib/x86_64-linux-gnu/libtinfo.so.5
dir_chroot4/lib64/ld-linux-x86-64.so.2 0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN/]
$
$ sudo chroot dir_chroot4 /bin/bash
$
$ echo $status
139
-$status
シェルの状態変数。fish
ld-linux-x86-64.so.2
パッチが適用されている場合にのみ、他のライブラリとbash
実行可能ファイルが連携できますRUNPATH
。なぜですか?
答え1
確かに、ld-linux-x86-64.so.2少なくとも私のシステムでは静的に接続されています。
>ldd ld-linux-x86-64.so.2
statically linked
同じではないlibc.so.6、libdl.so.2そしてlibtinfo.so.5
>ldd libc.so.6 libdl.so.2 libtinfo.so.5
libc.so.6:
/lib64/ld-linux-x86-64.so.2 (0x000056469847a000)
linux-vdso.so.1 => (0x00007ffe95185000)
libdl.so.2:
linux-vdso.so.1 => (0x00007fffc4718000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa1df136000)
/lib64/ld-linux-x86-64.so.2 (0x0000558334a9c000)
libtinfo.so.5:
linux-vdso.so.1 => (0x00007ffe1b7bd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffa990b9000)
/lib64/ld-linux-x86-64.so.2 (0x00005590bfced000)
これにより、ローダが狂ったように動作し、強制注入時にセグフォルトが発生します。実行パス入ってください。