web-dev-qa-db-ja.com

シェルを手に入れるには?

別のユーザーとして実行しているシェルにアクセスする必要がある演習(exploit-exercises.com)を実行しています。

私の質問はこれです。他のユーザーによる実行が保証されているアプリケーションを作成できます。これを使用して、特権/アカウントの下でシェルアクセスを取得するにはどうすればよいですか?

コマンドをそのまま実行できるのはあまり便利ではなく、実際にシェルにドロップできるのは便利ですasそれらが成功したかどうかを確認するアプリケーションがあるのでアカウントを適切に危険にさらしているので、インタラクティブに実行したいと思います。

私に最初に起こったのは、netcatデーモンを起動してコマンドを実行することでしたが、この侵害されたVMには-eオプションが存在しないようです。

考え/アイデア?私はここしばらく頭を悩ませてきました-これは簡単なことです!

編集:私が行き詰まっている演習の答え/ネタバレを探しているわけではありませんが、システムのセキュリティについて私が持っている基本的な理解にはギャップがあると感じています。この穴を利用する方法がわからない場合、いくつかの情報が不足しています。私が直面している実際の問題に対する答えではなく、その基本的な情報が欲しいのです。

8
Harv

ユーザーとしてシェルを取得する1つの方法は、そのユーザーとして実行されている setuid実行可能ファイル を見つけることです。理想的には、この実行可能ファイルは/ bin/bashなどのシェルであり、この場合、そのユーザーとして実行されているシェルにドロップされます。そうでない場合は、実行時に常にバッファオーバーフローを使用して実行可能ファイルのメモリを破壊することができます。グローバルに書き込み可能なsetuid実行可能ファイルがあると、実際のファイルでneverが発生しますが、これは非現実的な戦争ゲームなので、決してわかりません。

もう1つのオプションは、/home/USER/.bashrcファイルに書き込むことです。このファイルは、グローバルに書き込み可能にすることも、そのユーザーとしてコマンドを実行できる場合は変更することもできます。このスクリプトは、ログインするたびにそのユーザーによって実行されます。このユーザーがSudo'erである場合は、.bashrcファイルを変更して$PATH環境変数を制御し、ユーザーをだまして 偽のSudoプロキシ実行可能ファイル を実行させてroot特権。

2
rook

私が見た最も簡単な方法は、ネットワークポートでリッスンする単純な実行可能ファイルを構築し、接続時に/bin/bashのコピーからフォークして、ネットワークソケットをシェルのstdin/stdoutとして割り当てます(参照)。 man dup2 )。接続すると、bashシェルが表示されます。全体で、約10行から20行程度のコードです。

これはnetcatの-eオプションの背後にある基本的な機能であり、通常はコンパイル時に無効になっているため、セキュリティ違反を防ぐために[簡単に]使用することはできません。

けれども私の経験では、ほとんどのハッカーは、Perlで独自のカスタム "シェル"を作成することを好みます。このシェルは、特殊なコマンドセット、認証、および多くのひどい英語を備えています。また、プライベートIRC=サーバーに接続し、その方法でコマンドをリッスンすることは、私が説明する必要がないと思う理由で非常に人気があります。

1
tylerl