web-dev-qa-db-ja.com

任意のファイルパスのみが読み込まれ、ディレクトリリストもsudoもないすべてのファイルをリストする方法は?

Sudoを必要としないサーバー上の任意のパスを読み取ることができる パストラバーサル 脆弱性を発見しました。

これを十分に活用するために、各ディレクトリにどのファイルが存在するかを知り、それらを読み取ることができるようにしたいと思います。

つまり、cat /any/path、 だがしかし ls /any/pathまたはSudo cat /any/path。では、どのようにしてそれらをcatするためにできるだけ多くのファイルを見つけることができますか(すべての可能性を試さずに...)

Devやprocなどの特別なファイル、またはほとんどのLinuxディストリビューションに存在するファイルを読み取っても問題ありません。たとえば、locates /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などが含まれます。

参照 ディレクトリがファイルとして読み取れなくなったのはいつですか?

1
Scott