問題タブ [shellcode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
8215 参照

c - 違い - バッファ オーバーフローと libc 攻撃への復帰

この 2 種類の攻撃の正確な違いを理解したいと思います。私が読んだことから:

バッファ オーバーフロー: スタック上の ret アドレスを上書きして、悪意のあるコードが挿入されているコードの別のセクションを指します。つまり、実際に攻撃を実行するには、プログラムのソース コードを変更する必要があります。

Libc に戻ります。ここでは、ソース コードを変更する代わりに、C ライブラリによって提供されるランタイム関数呼び出しが使用されます (つまり、シェルを開きます)。ここで、関数呼び出しに使用されるパラメーターも上書きバッファーに渡され、スタックの ret 部分の後に終わります。

上記は正確な説明ですか?

関連するもう 1 つの質問 - 元のプログラムのソース コードを実際に変更することなく、バッファ オーバーフロー攻撃を実行することは可能でしょうか? おそらく、新しいプログラムを作成し、メモリの特定のセクション (元のプログラムの破損したスタック内の新しい ret アドレス) を変更できるようにする場合です。繰り返しになりますが、カーネル内のプロセス間で提供されるメモリ保護のために、これは不可能かもしれないと思います。

0 投票する
6 に答える
9167 参照

shell - プログラムへの引数として\x00を渡す方法は?

シェルコードを引数として渡したい小さなプログラムがあります。シェルコードでは、\x00を渡す必要があります。次のコマンドを試しました。

しかし、\ x00はまったく登録されません!プログラムに渡される引数は「\x01\ x9c \ xff\xbf」です。

Pythonの問題ではなく、引数を渡すシェルの問題だと思います。私はbashシェルを使用しています。

では、シェルに引数'\ x00'を強制的に渡すにはどうすればよいですか?

よろしくお願い
いたします。HrishikeshMurali

0 投票する
2 に答える
1682 参照

linux-kernel - シェルコード実行に対する Linux のセキュリティ対策

私はコンピュータ セキュリティの基礎を学んでおり、私が書いたシェルコードを実行しようとしています。ここに記載されている手順に従いました

http://dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf

http://webcache.googleusercontent.com/search?q=cache:O3uJcNhsksAJ:dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf+own+shellcode&cd=1&hl=nl&ct=clnk&gl=nl

一時停止プログラムが機能するようになったので、objdump の出力を ac ファイルにコピーしました。

test.c:

しかし、これはセグメンテーション違反を引き起こします。現在、これは Arch Linux のセキュリティ対策 (?) によるものにすぎません。では、どうすればこれを機能させることができますか?

0 投票する
6 に答える
4068 参照

security - シェルコード nop スレッドの NOP の代替

NOP オペコードに代わる命令を提供するオンライン ソースを知っている人はいますか?

「xchg axe、ax」など。そのためのツールもあると確信しています。誰かが私にその方向を教えてもらえますか?

0 投票する
1 に答える
2081 参照

assembly - バッファオーバーフローを利用する必要があります。エクスプロイトコードを実行した後、スタックの破損を防ぐ方法がわかりませんか?

基本的に私が利用している機能はこれです:

メインプログラムを実行すると、関数は5回実行され、bufの場所が変わるたびに、%ebpの場所も変わります。私がすることになっているのは、特定の16進値(たとえば0xFFFFFFFF)を変数に配置することです。メインプログラムは、その変数が存在するかどうかを毎回チェックします。そうである場合は、5回すべてが完了し、プログラムが静かに終了するまで、再度実行されます。

私が抱えている問題は、16進値のチェックの直前に、定数である別の値、たとえば0x12345678のチェックがあることです。0x12345678が破損していて、そこにない場合、プログラムが爆発します。

0x12345678が-0x10(%ebp)に格納されていることがわかったので、%ebpに基づいており、毎回%ebpのアドレスを知っていますが、エクスプロイトを機能させることができるのは初めてです。これを行うには、基本的に496バイトをnopsledし、このマシンコードをバイト形式にします。

これは最終的に5ワードになり、リターンロングのバイトになります。これを0x313131で埋めて、6ワードの長さにします。この時点で、私のエクスプロイト文字列は520バイトの長さであり、これはバッファが%ebpを下回っている正確な量です。したがって、古いebpのアドレスと、nopsled内のどこかにアドレスを追加して、%ebpの現在の値とリターンを上書きします。 getbufnのアドレス。

問題は、プログラムが2回目に実行されるときに、%ebpが前のアドレスよりも0x10低いアドレスにあるため、%ebpを破損しない方法が機能せず、mainが0x12345678が-0x10(%ebp)にないことを検出することです。%ebpを破損しないようにするにはどうすればよいですか?

0 投票する
1 に答える
1886 参照

security - return-to-libc エクスプロイト : system() 呼び出しの引数をどこに提供しますか?

system()libc エクスプロイトへの復帰を作成しようとしていますが、呼び出しの引数をスタックのどこに配置すればよいかわかりません。

脆弱な機能は

この関数のスタックは次のようになります。

戻りアドレスをsystem()呼び出しのアドレスで上書きする必要があることは理解していますが、その引数のアドレスをどこに配置すればよいのでしょうか?またその理由は?

ありがとう。

0 投票する
4 に答える
4750 参照

c++ - シェルコード + vs2010 の実行

シェルコードのテスト目的で、次のコード スニペットを試してみました。

コンパイル時にビルドエラーが発生します:-

私が間違っていることは明らかですか?

0 投票する
1 に答える
2474 参照

c - 学校の実験室シェルコード BufferOverflow のセグメンテーション エラー

教授の指示に従って、FedoraCore6を実行しています。ラボの指示で提供されているこのシェルコードを単純に実行しようとしているのですが、セグメンテーション エラーが発生し続けています.gcc-fno-stack-protector call_shellcode コマンドを使用して、スタック ガードをオフにしてコンパイルできると言われています。 .c どちらの方法でも、gcc -o shell call_callshellcode.c を使用してコードをコンパイルするか、-fno-stack-protector コマンドを使用して、シェルが呼び出される代わりにコードを起動するときにセグメンテーション エラーが発生します。したがって、このラボのコードは次のように提供されます。

0 投票する
2 に答える
1119 参照

macos - Hacking: The Art of Exploitation による問題に対処する

私は最近この本を購入しました: Hacking: The Art of Exploitation (第 2 版)というタイトルで、最近とても悩まされています。とにかく、例の 1 つである firstprog.c :

gcc(明らかに :3 )でコンパイルしてから、objdumpを使用します(これには、gobjdumpを使用しただけで、OS Xのobjdumpが見つかりませんでした)出力をmain.:でgrepにパイプし、正規表現として最初の20を表示します行。次に、gdb でデバッグし、main で中断します。これが私の主な問題です。すべてのメモリアドレスが異なります!! たとえば、本の eip は0x804837aです。しかし、リップ付きの私のコンピューターでは: 0x100000ee8 64ビットOSを使用しているからだと思っていましたが、32ビットバージョンのDarwinで起動すると同じ結果が得られました. 誰かがこの問題が何であるかを知っていれば、私はそれを大いに感謝します. それが本当に愚かなことなら、私に休憩を与えてください、私はちょうど14歳になりました:)

0 投票する
1 に答える
329 参照

linux - アセンブリシェルコードの2つのバリアントが同じように機能しないのはなぜですか?

私は最近、Aleph Oneが楽しみと利益のためにスタックを壊しているのを読み、「TheShellcoder'sHanbook」を見てきました。私は次のアセンブリコードをいじっていました:

GDBを使用してウォークスルーすると、次のアドレスに書き込もうとするたびにセグメンテーション違反が発生します。

ただし、これを実行すると、segfaultを実行せずにルートシェルをポップできます。

基本的に、彼らは同じことをしています(はい、実際にはそうではないことはわかっていますが、両方でルートシェルをポップしようとしています)。私はOpenSuse11.4で実行しており、学習目的でスタックランダム化(ASLR)をオフにしています。何か案は?