問題タブ [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.
assembly - RETレジスタで直接ジャンプを使用する
バッファオーバーフローの問題に取り組んでいます。この問題では、入力文字列がRETを(明らかに)入力文字列にも含まれているシェルコードのアドレスで上書きする必要があります。
調べてみたところ、実行時にそのようなバッファのメモリアドレスを特定するのは簡単ではありません。
相対ジャンプについても学びました。シェルコードが始まるスタックの前の部分(および私の文字列)への相対ジャンプでRETを上書きすることは可能ですか?それがうまくいくかどうかはわかりません。
基本的には次のようになります:./ program 90909090909090 / bin / sh / 00RELATIVE_JUMP_HERE
明らかに、それはすべてマシンコードに含まれます。これは、私が達成しようとしていることを理解するためだけのものです。
ありがとう
security - シェルコードが機能しないのはなぜですか?
バッファ フロー エクスプロイトのデモを実行しようとしています。シェル コードを使用してスタックをオーバーフローさせ、sh セッションを取得したいと考えています。ここhttp://www.shell-storm.org/papers/files/432.pdfのチュートリアルに従って、まったく同じシェルコードを生成することさえできます。shellcode3.c
しかし、チュートリアルのように使用してシェルコードを実行することはできません。私が得たのは常に「セグメンテーション違反」です。
「Red Hat Enterprise Linux AS release 4 (Nahant Update 4)」を使用しています。
同様の方法を使用して機能させる人はいますか?他のシステムに変更する必要がありますか?
linux - シェルを生成するシェルコードに引数を追加する
私はいくつかの基本的なシェルコードを持っています:
しかし、シェルの引数としていくつかのコマンドを追加したいとしましょう。たとえば、新しいファイルを作成するには、 /bin/sh -c 'touch "filepath" のようにしますが、これを行うためにシェルコードを変更する方法にちょっと行き詰まっています。
ありがとう、セバ
c - シェルコードへの関数ポインタの実行
mainのリターンアドレスを上書きして、exit(0)呼び出しのこの単純なオペコードを実行しようとしています。問題は、セグメンテーション違反が発生していることです。
実行結果はセグメンテーションエラーになります。
これはshellcode.aのObjdumpです。
私が使用しているシステム
c - シェルコードをchar[]配列として宣言することとchar*を宣言することの違いは?
こんにちは、みんな、
私は基本的なシェルコーディングを学ぼうとしていますが、誰かが私に説明してくれることを願っている何か不思議なことに出くわしました。次のコードを2つの方法でコンパイルしました。シェルコードを配列として宣言する方法とchar*として宣言する方法です。シェルコードを配列として宣言すると、Linuxはデータを実行しようとしていることを検出し、最初の命令でセグメンテーション違反が発生します。ただし、シェルコードをchar *として宣言すると、すべてのシェルコードが実行され、「Helloworld!」が表示されます。コンパイラはこれら2つの宣言をどのように異なる方法で処理し、一方が保護されていないメモリに存在するシェルコードで終わるのはなぜですか?前もって感謝します。
security - Art of Exploitation book のバッファ オーバーフローの例
私はこの本 Art of Exploitation を読んでいましたが、これはちょっと良い本で、exploit_notesearch.c ファイルからその例に出くわしました。
簡単に言うと、作者は notesearch.c からプログラムをオーバーフローさせようとします。
メイン関数の引数は検索文字列配列にコピーされ、引数が 100 バイトより大きい場合、メイン関数からの戻りアドレスがオーバーフローします。
作成者は、exploit_notesearch.c にシェルコードを用意し、脆弱な notesearch.c を呼び出します。
シェルコードが NOP スレッドと、その NOP スレッドを指すリターン アドレスと組み合わされていることがわかります。作成者はローカル変数 i のアドレスを参照点として使用し、270 バイトを減算して、NOP スレッドのおおよその位置を把握しようとします。
私が理解しているように、著者は、脆弱な notesearch.c のメイン関数のスタックフレームが、exploit_notesearch.c のメイン関数のスタックフレームと同じスタック セグメントにあると想定しています。これは、ローカル変数 i のアドレスを使用したこの操作のみが機能するためだと思います。
しかし、著者は、この system(command) のように system() を使用して、脆弱な notesearch.c を呼び出します。私のポイントは、この関数 system() が内部のどこかで fork() を使用して子プロセスを生成し、その後 exec() 関数を使用してプロセスのイメージを変更することです。しかし、画像が変更された場合、スタック セグメントが新しくなり、exploit_notesearch.c のメイン関数のローカル変数 i のアドレスを使用したすべての操作が役に立たなくなりますが、どういうわけかこのエクスプロイトが機能するため、完全に混乱します。
c - 脆弱なプログラムの ret アドレスを上書きすると、「現在の関数の境界が見つかりません」というメッセージが表示されるのはなぜですか?
教育目的で、スタック ベースのバッファ オーバーフローを利用したいと考えています。
プログラムからの入力として、パラメーターが保存されるローカル バッファーが与えられる、main からのパラメーターで呼び出される典型的な関数があります。のような入力が与えられた場合nops+shellcode+address_shellcode
、それを利用します。
strcpy
gdb でデバッグした後、パラメーターとして渡されるシェル コードのアドレスを見つけました。スタックを調べた直後に$ebp+8
、戻りアドレスである がシェル コードのアドレスで正常に上書きされました。だから私は欲しいものを持っています。しかし、実行を進めると、次のようになりました。
その後
リターンアドレスには、私が望む値があります。何が起こっているのですか?
また、それを実行すると、セグメンテーション違反が発生し、 でコンパイルしました-g -fno-stack-protector
。なんで?
glibc - Glibc 2.12.1 によるヒープの活用
良い結果が得られずに検索してきました。
Malloc Maleficarum や Malloc Des-Malleficarum としてテキストで説明されている手法は、glibc バージョン 2.12.1 で有効かどうか疑問に思います。
2 番目のテキストでは、手法は glibc バージョン 2.7 および 2.8 でテストされていると書かれているため、私の glibc バージョンで機能するかどうかはわかりません。もちろん、テストすることはできますが、最初に、それらだけでは非常に難しいテクニックであり、一方で、それらが機能しない場合、それが glibc のバージョンによるものなのか、それとも私のせいなのかはわかりません。 .
さらに、実際のヒープエクスプロイトは見つかりませんでした。また、これらの glibc バージョンで実装された変更を見つけることができませんでした。
前もって感謝します。
c - スタックでのcコードの実行を理解する(Macハッカーハンドブックコード)
私はスタックでコードを実行するこの例を見ていました:
これにより、セグメンテーション違反が発生します。私の理解では、xのサイズは4バイトしかないため、シェルコードは残りのバイトのメモリを使い果たします。そして、これにより、スタックメモリにコピーする書き込み操作が作成され、セグメントが発生します。スタックメモリが読み取り専用であるため、障害が発生します。私の理解は正しいですか?