Sudo
を必要としないサーバー上の任意のパスを読み取ることができる パストラバーサル 脆弱性を発見しました。
これを十分に活用するために、各ディレクトリにどのファイルが存在するかを知り、それらを読み取ることができるようにしたいと思います。
つまり、cat /any/path
、 だがしかし ls /any/path
またはSudo cat /any/path
。では、どのようにしてそれらをcat
するためにできるだけ多くのファイルを見つけることができますか(すべての可能性を試さずに...)
Devやprocなどの特別なファイル、またはほとんどのLinuxディストリビューションに存在するファイルを読み取っても問題ありません。たとえば、locate
s /var/lib/mlocate/mlocate.db
データベース問題は解決されますが、Sudo
がないために解決できません。
allファイルをリストする理想的な回答がない場合、既存のファイルを多数リストする回答にも興味があります。
この特定の例では、トラバーサルはリモートVM内で発生するため、特権の昇格自体は主な目的ではありません。私が関心を持っているのは、VMで検出される可能性のある機密のソースコードです。しかし、他のシステムで直接役立つだけでなく、mlocate
を与えて問題を解決する非常に一般的な権限昇格パスも歓迎します。
より正確には、私の場合のシステムは、GitHub/GHページに類似したPush Gitサービス上のビルドです(各JekyllビルドがVM上で実行されると想定していますが、これはわかりません)。もちろん、これはベンダーによってすでに修正されているので言及します:) Gitリポジトリを作成するのは私です。これが攻撃ベクトルであるため、Gitリポジトリを読むことはあまり面白くありません。
一般に/var/lib/locate/locatedb
または/var/cache/locate/locatedb
などにある、誰でも読み取り可能なインデックスで、誰でもアクセスできるファイルにインデックスを付ける他のLocate実装を試すことができます。
一般的なサーバーでのアクセスをエスカレートするために、ファイルリストを作成する必要性はあまりありません。通常、攻撃しているアプリケーションを把握し、その構成ファイルとデータベースを取得して、この方法で資格情報を取得します。 .netrc
、.ssh/id_rsa
、.ssh/config
などのファイルを試して、アカウントが他のアカウントへのゲートウェイになることができるかどうかを確認します。ボックスで何が実行されているかわからない場合は、たくさんのもっともらしいファイル名を試してください。
少し長くなるのは、何が実行されているかを調べるためのPID値です。 Linuxでは、デフォルトでpid_t
を使い果たすために32kリクエストがかかり、/proc/sys/kernel/pid_max
で最大値を確認できます。コマンドラインは/proc/PID/cmdline
にあります。開いているファイルのリストを表示することはできません(そのためにはreadlink
が必要です)が、それらのコンテンツ(cat /proc/PID/fd/0
…)は表示できます。
ビルドサービスの特定のケースについては、そのサービスの構成ファイルを確認してください。これは、gitリポジトリを見つけるのに役立ちます。 gitチェックアウトを見つけることができた場合は、.git/index
と.git/logs/HEADS
、および.git/logs
の他のファイルを調べてください(そのサービスを使用して、使用されているブランチとその操作を確認してください)使用)。これにより、.git/objects
から読み取ることができるオブジェクトIDを取得できるようになります。
ロケートデータベースを見つける以外に、一般的な構成で読み取りファイルへのアクセスをリストファイルに昇格させる方法は考えられません。
Unixの一部のバージョン(特に古いバージョン)では、cat
ディレクトリ自体を使用できる場合があります。例:cat /any
またはcat /
。結果は、UNIXのバージョンによってフォーマットが異なるバイナリファイルになりますが、これには常にディレクトリ内のすべてのエントリの名前(.
および..
で始まる)とそのiノード番号が含まれます。 (バイナリ形式)。したがって、たとえば、cat /
の出力にはany
などが含まれます。