問題タブ [buffer-overflow]
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++ - このバッファオーバーフローの結果は?
したがって、ここでは、他の誰かのコードを確認したときに見つけた小さなバッファオーバーフローの問題があると思います。それはすぐに私を不正確で潜在的に危険であると感じましたが、確かに、この「間違い」の実際の結果を説明することはできませんでした。
エラーを実証するためにテストアプリを作成しましたが、オーバーフローに関係なく正しく実行されているように見えることがわかりました(残念ながら)。これは偶然だと信じたいのですが、私の考えが間違っているのか、それともテストアプリに頭が表示されていないという問題が本当にあるのかを判断するためのフィードバックが必要でした。
問題のコード(とにかくそうだと思います):
さて、これが私に目立った理由であり、バッファオーバーフローの可能性があるとしてフラグを立てたいのは、最初のが原因ですstrlen
。ポインタ演算のため、の「誤った」配置により、+ 1
ではなくがstrlen
返されます(「彼の文字列は27文字の長さ」の長さを取る)。、私は信じています、そして27文字をバッファに出力し、バッファオーバーフローを引き起こしました。26
27
sprintf
それは正しい評価ですか?
私が見ているコードの人のためにこれを実証するためにテストアプリを作成しましたが、デバッガーでも文字列が正しく出力されることがわかりました。また、このコードの前後に他の変数をスタックとヒープに配置して、メモリの隣接領域に影響を与える可能性があるかどうかを確認しようとしましたが、それでも正しい出力を受け取っていました。新しく割り当てられたヒープメモリが隣接していない可能性があることを認識しています。これは、有用なオーバーフローがないことを説明しますが、これが実際に問題であるかどうかを他の人の意見で確認したかっただけです。
これは非常に単純な「質問」なので、何らかの参照を使用して回答をサポートできれば便利です。私はあなたの意見を尊重し、歓迎しますが、最終的な答えとして「はい、そうです」を受け入れるつもりはありません。よろしくお願いします。
更新:多くの追加の洞察を伴う多くの良い答え。残念ながら、すべてを受け入れることはできません。あなたの知識を共有し、私の「第二の意見」であることに感謝します。私は助けに感謝します。
c++ - ストロングタイプはバッファオーバーフローを防ぎますか?
強い型、この場合はcharはバッファオーバーフローを防ぎますか?
security - バッファオーバーフロー攻撃の防止手法は何ですか?
バッファオーバーフロー攻撃を防ぐためのアイデアは何ですか?Stackguardについて聞いたことがありますが、これまで、この問題は、Stackguardを適用するか、他の手法と組み合わせることで完全に解決されましたか?
ウォームアップ後、経験豊富なプログラマーとして
バッファオーバーフロー攻撃に対して適切な防御を提供することが非常に難しいと思うのはなぜですか?
編集:すべての回答に感謝し、セキュリティタグをアクティブに保ちます:)
buffer - 意図的なバッファオーバーフローエクスプロイトプログラム
私は自分の計算機科学クラスの1つでこの問題を理解しようとしています。私はすべてのリソースを利用しましたが、まだ問題があります。誰かが洞察を提供してくれれば、私はそれを大いに感謝します。
この「ターゲット」があり、バッファオーバーフローエクスプロイトを使用してexecve( "/ bin / sh")を実行する必要があります。buf [128]のオーバーフローでは、安全でないコマンドstrcpyを実行すると、システムがリターンアドレスを見つけることを期待している場所にバッファに戻るポインタが表示されます。
target.c
explore.c
shellcode.h
argv [1]を128バイト以上で埋める必要があることを理解しています。128バイトを超えるバイトはリターンアドレスであり、バッファ内で/ bin/shを実行するためにバッファを指す必要があります。これまでのところ正しいですか?誰かが次のステップを提供できますか?
助けてくれてありがとう。
linux - Linuxディストリビューションはバッファオーバーフローに対して脆弱です
クラスでバッファオーバーフローをデモンストレーションする必要があります。誰かが私に配布とそれをダウンロードできる場所を提案できますか。
DVLを試しましたが、目的の出力が得られません。
c# - ヒープ/バッファ オーバーフロー例外
ちょっと興味があります.C#でヒープ/バッファオーバーフローの例外に遭遇したことはありますか?
assembly - 次のシェルコード エクスプロイトの動作をどのように説明できますか?
これは、bufferoverflow の脆弱性を悪用するためのシェルコードです。を設定し、setuid(0)
を使用してシェルを生成しますexecve()
。以下は私がそれを解釈した方法です:
誰かが全体の手順を明確に説明できますか?
c++ - C++ での文字列オーバーフロー? この絶え間ないビープ音は奇妙です
ジャンクファイルジェネレーターの開発を始めているのですが、なぜか大量に使うとファイルが完成するまでビープ音が鳴り続けてしまい、asciiテーブルのどこかに\aという文字があるのか、オーバーフローしているのかと思いますとなり、エラー ビープが鳴ります。なぜこれが私に向かって叫んでいるのか説明したい人はいますか?
この時点で、最終的に文字は問題なく出力されているように見えますが、テキスト ファイルには文字の 1/4 しか書き込まれていません。理由を知っている人はいますか?
c - Buffer Overflow Problem
I am trying to run a buffer overflow example to run some code, but the problem is that when I try to run the code just to get a buffer overflow, Windows throws a prompt up stating "Program has stopped working, Windows is checking for a solution to the program. So when I try to make sure it just has a overflow by one byte. The program just runs, but doesn't pause the command window in order for me to see the segmentation fault error address. Which to my understanding I would need in order to change it and make it run my desired window as the passed parameter.Here is the simple program.
visual-studio-2010 - wchar_tは、Visual Studioでは2バイトであり、UTF-16を格納します。Unicode対応アプリケーションはU+FFFFより上の文字でどのように機能しますか?
私たちは、アプリケーションをUnicode対応にすることを計画しており、発生する問題を分析しています。
wchar_t
特に、私たちのアプリケーションは、たとえば文字列の長さに大きく依存するため、基本文字クラスとして使用したいと思います。
この問題は、UTF-16で16ビットの2単位で格納する必要のある文字、つまりU+10000を超える文字を処理するときに発生します。
簡単な例:
UTF-8文字列"蟂"(Unicode文字U + 87C2、UTF-8:E8 9F 82)があります
そこで、次のコードを設定します。
さて、これは機能し、16ビットを2回割り当て、のバッファにwchar_t
は{0x87c2、0x0000}が含まれています。それをaの中に保存しstd::wstring
てサイズを計算すると、1になります。
ここで、UTF-8:F0 90 92 A2の入力として文字(U + 104A2)を使用します。
今回は、3つのwchar_tにスペースを割り当て、std :: wstring :: sizeは、文字が1つしかないことを考慮しても、 2を返します。
これには問題があります。UTF-8でデータを受信すると仮定します。に等しいバイトをカウントしないだけで、Unicode文字をカウントできます10xxxxxx
。そのデータを配列にインポートして処理したいと思いwchar_t
ます。文字数に1を足した数を割り当てるだけなら、安全かもしれません...誰かがU+FFFFより上の文字を使用するまで。そして、バッファが短すぎて、アプリケーションがクラッシュします。
それで、同じ文字列で、異なる方法でエンコードされた場合、文字列内の文字をカウントする関数は異なる値を返しますか?
この種の煩わしさを回避するために、Unicode文字列で動作するアプリケーションはどのように設計されていますか?
返信ありがとうございます。