ここで提供されている*ようなシェルコードを脆弱なプログラムへのペイロードとして使用する場合、シェルはルートとしてどのように実行されますか? 特権がルートに昇格する方法について質問していますか? setuid
シェルコードは、ユーザーを変更するための呼び出しや何かをしていないようです。
* http://www.tenouk.com/Bufferoverflowc/Bufferoverflow5.html
ここで提供されている*ようなシェルコードを脆弱なプログラムへのペイロードとして使用する場合、シェルはルートとしてどのように実行されますか? 特権がルートに昇格する方法について質問していますか? setuid
シェルコードは、ユーザーを変更するための呼び出しや何かをしていないようです。
* http://www.tenouk.com/Bufferoverflowc/Bufferoverflow5.html
これらの例には、次のようなものがあります。
mov $70, %al #setreuid is syscall 70
setreuid(2)
そのため、プロセスの実際のユーザー ID と有効なユーザー ID の両方を設定する syscallを使用しています。
int setreuid(uid_t ruid, uid_t euid);
シェルコードを実行するには、バッファ オーバーフローのような脆弱性が必要です。シェルコードには、実行中のプロセスとしてのすべての権利があります。そのため、コマンドのように root に設定されているバイナリや、デーモン プロセスpasswd
などのルートとして実行されているバイナリを悪用すると、攻撃者はルート アクセス権を取得します。cupsd
カーネルもバッファ オーバーフローの影響を受ける可能性があり、ルート アクセスもこの方法で取得できます。
まず、プログラムにroot権限を与える必要があります(chownとchmodをrootとして使用します)。ペイロードにはsetreuid()が必要です。他のユーザーがプログラムを悪用できるのであれば、それはあなたにルートを与えるでしょう。