問題タブ [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 - 次のシェルコード エクスプロイトの動作をどのように説明できますか?
これは、bufferoverflow の脆弱性を悪用するためのシェルコードです。を設定し、setuid(0)
を使用してシェルを生成しますexecve()
。以下は私がそれを解釈した方法です:
誰かが全体の手順を明確に説明できますか?
assembly - 機械語コードから NULL (00) を削除するには?
マシンコードから null (00) を削除する方法を知る必要があります。私はアセンブリ言語でコードを書きました。正常に実行されています。NULL なしの出力が必要です
次の出力は
00 を削除する方法、私は変更のようeax
にal
をbx
bl blahahahahahaha に変更しました......しかし、動作しません。
windows - Windows 用の単純な「Hello-World」、null のないシェルコードが必要
「Hello World」をコンソールに書き込んで (Windows XP 32 ビットを使用して) バッファ オーバーフローをテストしたいと考えています。シェルコードは、「scanf」によってオーバーフローしたいプログラムに渡されるために、ヌルフリーである必要があります。Linux 用のアセンブリ チュートリアルはたくさんありますが、Windows 用はありません。誰かがNASMを使用してこれを教えてもらえますか? どすけべ!
c - 「extern puts」を関数ポインタ「(void(*)(char*))&puts」にキャストするのはなぜですか?
Insecure Programmingのabo3.cの例を見ていますが、以下の例のキャストを理解していません。誰かが私を啓発できますか?
それで、システムとプットのキャスティングとは何ですか?どちらも を返すint
ので、なぜそれを void にキャストするのですか?
プログラム全体を視野に入れて説明していただければ幸いです。
[編集]
ご意見ありがとうございます。
Jonathan Leffler さん、実際にはコードが「悪い」のには理由があります。これは、バッファや関数ポインタのオーバーフローなどで悪用可能であると考えられています。mishou.orgには、上記のコードを悪用する方法に関するブログ投稿があります。その多くはまだ私の頭の上にあります。
bta、私は上記のブログ投稿から、キャスト システムが何らかの形でリンカによる削除を妨げていることを収集しました。
すぐにはっきりしないことの 1 つは、システムとプットのアドレスが両方とも同じ場所に書き込まれていることです。これは、gera が「リンカがそれを削除しないように」と話していることかもしれません。
関数ポインターの話題ですが、構文がより明確になったので、フォローアップの質問をしたいと思います。関数ポインターを使用したより高度な例をいくつか見ていたところ、シェルコードをホストしているサイトから取得したこの忌まわしきものに出くわしました。
void
それで、配列は、参照され、呼び出されて返される関数にキャストされていますか? それは見栄えが悪いだけです。では、上記のコードの目的は何でしょうか?
[/編集]
linux - フォーマット文字列のバグ-悪用
このプログラムにあるフォーマット文字列のバグを悪用しようとしています。
スタックは次のようになります。
したがって、基本的な考え方は、%x、%n、...のシーケンスを記述し、それをプログラムにフィードすることです。入力文字列を作成するために使用しているプログラムは次のとおりです。
アドレスを上書きしたことがわかります:0xbffff048、0xbffff049、0xbffff04a、0xbffff04b、次の16進数:0x68、0xf0、0xff、0x1bf、これによりアドレス:0xbffff068(メモリ内のシェルコードのアドレス) 。したがって、0x08048528(EIP)をこのアドレスで上書きするという考え方であるため、関数が戻ると、そのアドレスにジャンプします。
私はこれをすべて行い、デバッガーでこれがすべて問題ないことを確認しました。しかし、それでも/lib/libc.so.6からvfprintf()でセグメンテーション違反が発生します。
誰かが何が起こっているのか考えていますか?私は何かを台無しにしましたか?
ありがとう
python - Pythonでシェルコードを評価する方法は?
Cプログラムを使用してシェルコードのサンプルを評価することは複雑ではありません。これには、シェルコードを文字配列に格納し、関数ポインターを作成し、ポインターを型キャストして配列を指すようにし、関数(ポインター)を呼び出すことが含まれます。
これは、次の場所でメモリを実行できると仮定した場合の動作ですnastycode[]
。
Pythonコードを使用して同じことを行う方法はありますか?それとも、Pythonコードがバイトコードに変換されるという事実は、そのような努力を不可能にしますか?
c - Cプログラムからの生コードのロード
私はファイルからコードをロードして実行するプログラムを書いています。しかし、問題が発生しました。「書き込み」システムコールが機能しません。コードは正常に読み込まれて実行されますが、画面にテキストが表示されません。
コードをロードするプログラム:
このプログラム(test.s)で実行しようとしているコード:
これが私がそれをコンパイルする方法です:
解決しました、@Christophに感謝します
動作するコードがあります:
c - これはバッファオーバーフローの仕組みですか?
同様の質問といくつかのデータがウェブ上にあると思います...しかし、すべてのオンラインチュートリアルは長すぎてエクスプロイトなどに焦点を当てているため、概念を正しく理解していることを確認したいと思います. したがって、単純なバッファオーバーフローは次のようになります。
///////////////////////////////////////////////
次のような引数/入力の文字列を送信します: nop 命令 (x90) + シェルコード + 何らかのテキスト + nop 命令のアドレス。
文字列の長さが正しい場合は、戻りアドレス ebp が nop 命令のアドレスでオーバーライドされます。そこにジャンプすると、シェルコードに到達するまでスキップします....残りは歴史です。
//////////////////////////////////////////////////////////////////////////
私はどちらかというと c++/php/c# のタイプの男であり、アセンブリであり、c は私の精神的能力を超えています....笑...とても真剣に...または冗談で..上記の説明は線に沿った何かですか? さらに、私が理解している限りでは、バッファ ovs に対する保護がいくつかありますが、まだ理解していません。ファイアウォールはこれをどのようにキャッチしますか?
10倍!
c - バッファオーバーフロー攻撃フォーマット
通常、私たちは皆、次のような基本的なバッファオーバーフロー形式を目にします:-
NOPs + shellcode + return_address
NOPs + return_address + shellcode?
リターンアドレスがシェルコードの先頭を指すようにする場合、なぜ使用し
ないのですか?
これは、脆弱性がmain()にある場合、スタックセグメントの外部にデータを書き込もうとしている可能性があるためだと推測しています。私は正しいですか?私がそうなら、それが唯一の理由ですか?
そうそう、return-to-libcやptraceなどを使用する他の種類の攻撃については言及していません。最も基本的なバッファオーバーフロー攻撃が最初の方法で示され、2番目の方法では示されない理由を知りたいだけです。
c - Windowsでのバッファオーバーフロー攻撃により、アクセス違反が発生する
バッファオーバーフロー攻撃がどのように機能するかを調べ始め、Visual C2010を使用してWindows7での攻撃をシミュレートしようとしました。バッファオーバーフロー攻撃は非常に工夫されており、リターンアドレスを「バッファ」ローカル変数のアドレスに上書きするだけです。バッファはシェルコードの文字列を保持します。
Visual Studio 2010デバッグでプログラムを実行するかどうかに関係なく、プログラムはシェルコードにジャンプして実行を開始しますが、アクセス違反エラーが発生し、プログラムはシェルコードの実行を続行しません。
なぜこのエラーが発生するのですか?これは、Windowsのバッファオーバーフローに対するある種の保護ですか?
プログラムにバッファ内のシェルコードを実行させるにはどうすればよいですか?
編集:
ハンス(答え)は正しいです。これについては、Windows Internals 5thのセキュリティの章で説明されています。エラーの原因は、MicrosoftによるExecutableSpaceProtectionの実装です。
この質問が誰かを助けたなら、どんな賛成票もいただければ幸いです。