2

カーネル内からルート シェルを起動する必要があるエクスプロイト プロジェクトに取り組んでいます。さまざまなドキュメントや Web サイトを検索した結果、それを行う唯一の方法は、現在のプロセスをルート権限に昇格させてから、シェルを呼び出す命令を実行することであることがわかりました。これは、カーネルからシステム コールを単純に呼び出すことができないためです。

commit_creds (prepare_kernel_cred (0));同じように、プロセスに root 権限を付与するために使用できるcall に遭遇しました。ただし、Red Hat Enterprise Linux 4.4 Base を使用していますが、上記の呼び出しはありません。

[dmazumd@bn19-62 ~]$ grep commit_cred /proc/kallsyms 
[dmazumd@bn19-62 ~]$ grep _cred /proc/kallsyms 
c0164655 T compute_creds
c01a7cdd t dummy_bprm_apply_creds.....

それで、私の質問は、これをどうやって行うのですか?uidルート権限を付与するプロセスの をゼロに設定する必要があることを理解しています。私の知る限り、今ではなくにuid住んでいます。上記のように、API を使用せずにこれらの構造に直接アクセスできるかどうかはわかりません。同じことを達成するための他の呼び出しはありますか? または、他のアプローチはありますか?struct_credstruct_task

PS: 質問に対する正確な回答を求めているわけではありません。指示や助けをいただければ幸いです。

4

2 に答える 2

1

明確にするために:カーネルには「ルート権限」は必要ありません。実際はそれより上です。必要なのは、特権を持つことができるプロセスです。

execveプロセスを起動してそれを実行するために何をするかを調べ始めることができます。

既にシェルを実行していて、カーネル モードにいる場合はuidtask_struct( shed.h ) を変更するだけです。

また、こちらもご覧ください。

于 2012-09-25T03:04:37.417 に答える
0

カーネル内で最初にプロセスをルート状態に昇格させることで、最終的にルートシェルを実現できました。set_user(0)これは、内部で定義されている call call を使用して実現されました/proc/kallsyms

これが完了すると、プロセスは使用してユーザー空間に戻りiret、シェルを生成します。このシェルにはルート権限があります。

于 2012-09-26T07:02:44.867 に答える