1

私はカーネルのハッキングについての本を読んでいますが、著者が繰り返し訪れている分野の1つはシェルコードです。カーネルハッキングの多くの試みは、シェルコードを実行する方法を見つけようとしています。誰かがこのトピックについてもっと詳しく説明できますか、特に「シェルコード」を明確にできますか。

シェルコードは、* NIXシステムでsudoを回避する方法、またはWindowsマシンで管理者でないことをどのように回避しますか?OS固有ではないシェルコード攻撃の例はありますか?特定のOSをターゲットにする必要があると思います。

4

4 に答える 4

1

基本的には、rootとして実行されているプロセスに悪意のあるコードを挿入できるようにするバッファオーバーフローまたは同様の手法を見つけることです。

たとえば、固定サイズのバッファを使用していて、そのバッファをオーバーランした場合、基本的にメモリの内容を上書きし、これを使用して悪意のあるペイロードを実行できます。

于 2012-09-17T16:41:17.397 に答える
1

あなたを噛むために戻ってくることができる単純なシェルコードスニペットは次のとおりです。

/bin/sh

またはCプログラム内:

system("/bin/sh");

このようなコード行を実行するようにエクスプロイトに指示できる場合(たとえば、プログラムの意図された制御パスを乗っ取るバッファオーバーフローを介して)、被害者の権限を持つシェルプロンプトが表示されます。

于 2012-09-17T16:43:07.007 に答える
1

シェルコードは、攻撃者がマシンを制御できるコマンドシェルを作成するために使用される脆弱性を悪用するときに使用されるペイロードです。

実行時の一般的なシェルコードは、ネットワーク接続を開き、cmd.exeWindowsマシン(または/bin/shLinux / UNIX)の配管stdinstdoutネットワーク接続を介して生成される場合があります。攻撃者は自分のマシンから接続を完了してコマンドを入力し、侵入先のマシンに座っているかのようにフィードバックを得る可能性があります。

バッファオーバーフローはシェルコードではありません。シェルコードを実行するために悪用されるのは脆弱性です。

バッファオーバーフローは、シェルコードをユーザーのマシンにコピーし、プログラムのスタック上のリターンアドレスを上書きするために利用されます。現在実行中の関数が戻ると、プロセッサはアップロードされたシェルコードにジャンプし、攻撃者のシェルを作成します。

バッファオーバーフローの悪用の詳細については、Smashing the Stack for FunandProfitを参照してください。

-fno-stack-protectorフラグを使用してみることができますがgcc、私はOSXやOSXが使用する可能性のあるスタック保護についてはあまり詳しくありません。

バッファオーバーフローを試してみたい場合は、最新のコンパイラと最新のOSには、これを困難にする保護機能があります。最善の策は、Linuxディストリビューションを入手して、それらをオフにすることです。これらの保護を無効にする方法の詳細については、この質問を参照してください。

シェルコードを実行するためにバッファオーバーフローを行う必要はないことに注意してください。コマンドインジェクションエクスプロイトを使用してリモートシェルを開き、バッチファイルをアップロードして実行する方法を示しました。

于 2012-09-17T16:47:19.203 に答える
1

基本的に、プログラムが実行されると、それに関連するすべて(変数、命令など)がバッファとしてメモリに保存されます。

メモリは本質的にRAM内の非常に多くのビットです。

したがって、この例の目的のために、Nameビット#1-10に格納される変数があるとしましょう。命令の格納にビット11〜30が使用されていると仮定します。プログラマーNameが10ビットの長さを期待していることは明らかです。20ビット長の名前を付けると、バッファが命令を保持する領域にオーバーフローします。だから私はName、命令がいたずらなものによって上書きされるように、私の後半の10ビットを設計するつもりです。

' innocentmeNAUGHTYCOD'

それは攻撃です。

すべてのインスタンスがこれほど明白であるとは限りませんが、ほとんどすべての大きなコードにはいくつかの脆弱性があります。それはあなたがそれをどのように利用するかについてのすべてです。

于 2012-09-17T16:54:17.947 に答える