問題タブ [stack-smash]
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.
c - *** スタック破壊が検出されました *** 中止されました (コアダンプされました)
Abort (core dumped) というエラーが発生するプログラムをデバッグしようとしています。Valgrind はスタックの破壊を検出し、1 つのブロックがまだ到達可能な状態で LEAK SUMMARY を提供します。これは、関数 downloadAndOpen の 12 行目に信号を送ります。そこでは、メインの最後で閉じられたと思っていた fopen がありますが、そうではないようです。このバグについて助けていただければ幸いです。valgrind の出力は次のとおりです。
編集: 最初の問題を修正した後、プログラムが 18 ページまで正しく動作した後、同様の問題が発生しました。Valgrind レポートは次のとおりです。
問題を特定しましたが、何が問題なのかまだわかりません。
メイン関数のコードは次のとおりです。
そして、これは Valgrind が不平を言う関数です:
プログラムの残りの部分は次のとおりです。
そしてメイクファイル:
c++ - スタックスマッシング/バックトレース
char 配列を取り、コンピューターがテキストを入力しているように見せる小さなコードを書きました。簡単ですよね?しかし、私がそれを実行したとき、ターミナルは私にこれを教えてくれました:
私は C++ を初めて使用し (C のバックグラウンドがあります)、スタック スマッシュやバックトレースが何であるかわかりません。あなたが私を助けることができれば、それは大いに役立ちます!コードは次のとおりです。
c - C - スタック破壊が検出されました
行列 A の非常に簡単なインプレース LU 分解を実装する必要があります。ガウス消去法を使用しており、3x3 行列でテストしたいと考えています。問題は、stack smashing
エラーが発生し続け、その理由がわかりません。これを実行できるコードに問題はありません。何か考えはありますか?
問題はおそらく因数分解ブロックにあります。
c - シェルコードでヌル文字をエスケープする
overflow1.c
Aleph One による Smashing the Stack for Fun and Profit の論文から実行しようとしています。
オリジナルのoverflow1.cコード:
このコードは、32 ビット システムで正常に動作します。
64 ビット システムで動作するようにコードを変更しました。
プログラムはシェルコードのみをロードし、リターン アドレスを のアドレスで上書きしますbuffer
。コードは想定どおりに機能します。
ただし、ここで問題が発生します。
buffer
64 ビット システムの のアドレスが であるとしましょう。0x7fffffffdc10
それlong int
を にキャストし0x00007fffffffdc10
ます。これが に書き込まれるlarge_string
と、00
は null として機能し、文字列を終了します。どうすればこれを克服できますか?
64 ビット システムには 4 バイト アドレスではなく 8 バイト アドレスがあるため、アドレスを整数だけに型キャストすることはできません。「0x00」ヌル文字をエスケープするにはどうすればよいですか?
assembly - ROP ガジェットの変更
私はこのようなROPガジェットを持っています-
ご想像のとおり、「/bin//sh」が生成されるだけです。コマンドが次のリモートシェルを生成したい:
リモートシェルを実行するためのガジェットを作成するのを手伝ってくれる人はいますか? このリンクを見てみましたが、よくわかりませんでした。
c - バッファの脆弱性を悪用する場合の別の関数からのリターン アドレス
一連のシェル op コードを使用して、以下のコードのバッファの脆弱性を悪用する必要があります。私は Google が提案したほとんどすべてを見てきましたが、この特定の問題は、機能が分離されているために私を混乱させています。
異なるスタックを使用しているためreadIn()
、ステートメントの戻りアドレスでバッファーをオーバーフローさせる方法に興味があります。printThis()
直観は、印刷の呼び出しへのジャンプが機能すると言いますが、私はそれを機能させることができませんでした.
GDB のペイロードに必要な情報を取得するための提案はありますか? ご協力いただきありがとうございます!
c++ - セグメンテーション違反を一時的に無効にする Ubuntu 14.04
私は大学の宿題をしていて、私が取り組んでいる本 (Robert Seacord による C および C++ でのセキュアなコーディング) には次の例があります。
簡単なパスワード入力プログラムを作成し、プログラムでスタックスマッシュを実行して、端末にカレンダーのスナップショットを表示させます。スタックスマッシングの例としては、非常に単純明快です。私たちが取り組む必要のある本は、セグメンテーション違反がこの種のアクティビティをカバーする前に、ずっと前に書かれたと思います.
多くのサイトを検索しました (g++ コンパイラに -fno-stach-protector を追加し、kernel.randomize_va_space=0 も設定しましたが、これらのいずれもエクスプロイト コードの実行を許可されていませんでした。
パスワードの C++ コードは次のとおりです。
これがエクスプロイト コード (exploit.bin) です。
パスワード コードがコンパイルされたら、./a.out < explore.bin と入力して実行します。
実行すると、ターミナルは「Segmentation fault (core dumped)」を返します。表示されるのは、「111/usr/bin/cal」にあるカレンダーのスナップショットです。
私の質問は、このセグメンテーション違反を一時的に無効にして、エクスプロイト コードを実行できるようにする方法はありますか? 現時点では少し困惑しているので、これにより、セクションを続行できます。
ありがとう、ジョン
編集: 残念ながら、私は新しいので、まだ画像をアップロードできませんが、exploit.bin コードの内訳へのリンクを次に示します。http://imgur.com/lpz9eY4
c - 「スタック破壊が検出されました」というメッセージが出力されるストリームはどれですか?
次の非常に基本的なプログラムを考えてみましょう。これは、ここで他の質問にさまざまな形で登場しています。
私のシステムでは、これを というファイルに入れ、Classic.c
特別なフラグなしでコンパイルして実行すると、次の出力が得られます。
通常、プログラムの出力はstderr
またはstdout
に行くので、次の場合は何も出力されないだろうと予想しました。
ただし、出力はまったく同じであるため、このシナリオについて 3 つの質問があります。
- ここに出力されているストリームは何ですか?
- この特別なストリームに出力するコードをどのように書くことができますか (故意にスタックを壊すことなく)。
- このストリームの出力をリダイレクトするにはどうすればよいですか?
Linux システムで実行していることに注意してください。具体的には、Ubuntu 14.04.