問題タブ [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.
gdb - ブレークポイントを設定できません
の開始アドレスを取得しようとしていますbuf
。そこで、次のプログラムをコンパイルして gdb にロードします。
分解すると、次のmain
ようになります。
buf の開始アドレスを見つけるには、ロードされているアドレスを確認する必要がありますeax
。0x080483e5
またはにブレークポイントを設定すると0x080483ee
、次のようになります。
私は何を間違っていますか?プログラムの実行がそのアドレスで一時停止しないのはなぜですか?
gdb - gdb入力ファイルの16進値
gdb内のrun<inputfileを使用して入力を(getsに)リダイレクトすることにより、DVLで特定のエクスプロイトをbofしようとしています
プログラムを正常にオーバーフローさせることはできますが、文字列に16進値を追加するのに問題があります。引用符を試し、mem addrの値をASCIIに変換し、さまざまなエスケープを試みました(\、\、\)。
入力ファイルの例:AAAA \ x42
上記の例では、バックスラッシュがASCII文字(5c)として読み取られており、値42がスタックに残っているように見えます(奇妙なことに?)。
gdb入力ファイル内で16進値を指定するにはどうすればよいですか?
ありがとう
c - libc に戻る - 問題
return-to-libc エクスプロイトに問題があります。問題は、何も起こらないことですが、セグメンテーション違反はありません (そして、実際にスタックがオーバーフローしています)。
これは私のプログラムです:
私のアドレスは0x00で始まり、strcpyはそれが文字列の終わりであると考えているため、strcopyの代わりにgetsを使用しているため、使用できません。
必要なアドレスは次のとおりです。
正しいシーケンスを入力すると、次のことが起こります。
だから何もない。
しかし、520 'A' (0x41) を入力すると、EIP が 'A' でオーバーフローします。516 'A' がある場合、何も起こりませんが、EIP には、/bin/sh ポインターに続く終了アドレスに続くシステム アドレスが含まれます。
なぜ何も起こらなかったのですか?
c - バッファオーバーフローとメモリ破損の場所を見つける方法は?
valgrind は有用なものを見つけることができません。よくわかりません。
症状:
- malloc() 呼び出しによってデータが破損した
- 私の関数の戻りアドレスが何か間違って置き換えられました
PS: コードはセグメンテーション違反をしません
現在、すべての malloc() をmmap()
+で置き換えることで、ある程度の進歩がありますmprotect()
system - C でオーバーフローするファイル記述子を停止する方法
88kb のファイル記述子にメッセージを書き込んでいます。私の Linux システムのファイル記述子は 64kb しか保持できません。データがファイル記述子に配置されると、データが読み取られ、tcp 接続にパイプされます。
ファイル記述子にさらにデータを書き込むことができるかどうか、つまりファイル記述子が空であることをどのように確認できますか? ファイル記述子が空になるまでブロックするか、少なくともファイル記述子にデータを安全に書き込む方法を知らせる値を返すことができる関数が必要です。
c - バッファ オーバーフローに関する C コードの問題
Linux でバッファ オーバーランをテストするための小さな tcp エコー サーバーを作成しています。サーバー コードの 2 つのわずかに異なるバージョンがあります。大きすぎるバッファが最初に送信されると、読み取り関数で期待どおりにオーバーフローし、セグメンテーション フォールトが発生します。コードの 2 番目のバージョンでは、受け入れ、読み取り、および書き込み関数の周りに While (1) ループを追加して、サーバーが通常の使用で終了しないようにしましたが、同じバッファーが 2 番目のサーバーに送信されてもオーバーフローは発生しません。サーバーはまったくクラッシュしません。理由を理解するのに苦労しています。コードはwhileループを除いて同一です。どんな助けでも大歓迎です。:)
サーバー 1
サーバー 2
c++ - LoadLibraryを使用したSTATUS_STACK_BUFFER_OVERRUN
LoadLibraryを使用してiphlpapi.dllをロードすると、スタックバッファがオーバーランします。どうすればこの問題を解決できますか?!
lib関数のロードと実行は正常に機能していますが、ある時点で、プログラムがSTATUS_STACK_BUFFER_OVERRUN例外をスローします。(いくつかのポイント:文字列操作にコメントすると、数行後にエラーが発生します)
LoadLibraryとGetProcAddress(静的バインディング)を使用しない場合->バッファオーバーランはありません!
ありがとう、挨拶、
leon22
android - Androidでバッファを使用してhttpリクエストレスポンスを文字列に変換する - レスポンス全体を取得できない
サイトに投稿するアプリを開発しており、エンティティの応答を文字列として保存しようとしています。ただし、文字列には応答のごく一部 (約 35 行程度) しか含まれていないようです。バッファオーバーフローと関係があるのか 疑問に思っていますが、実際にはわかりません。私のコードは以下の通りです:
isBlankString は、私を悩ませていた応答に空白行がたくさんあるため、行に文字が含まれていないかどうかだけを示します。これの有無にかかわらず、応答全体が得られないという問題があります。何が起こっているのか、またはこれを修正する方法を知っている人はいますか?
ありがとう
c - Cでバッファオーバーフローを行っている行をスキップする方法
私はCの行をスキップしx=1;
たいbufferoverflow
. ただし、 から までの 7 バイトをカウントしているにもかかわらず、アドレス から4002f4
次のアドレスにスキップできない理由がわかりません。4002fb
<main+35>
<main+42>
また、Debian および AMD 環境で randomniZation および execstack 環境のオプションを構成しましたが、まだx=1;
. この手順の何が問題なのですか?
dba を使用して、スタックとメモリ アドレスをデバッグしました。
c - バッファオーバーフロー攻撃フォーマット
通常、私たちは皆、次のような基本的なバッファオーバーフロー形式を目にします:-
NOPs + shellcode + return_address
NOPs + return_address + shellcode?
リターンアドレスがシェルコードの先頭を指すようにする場合、なぜ使用し
ないのですか?
これは、脆弱性がmain()にある場合、スタックセグメントの外部にデータを書き込もうとしている可能性があるためだと推測しています。私は正しいですか?私がそうなら、それが唯一の理由ですか?
そうそう、return-to-libcやptraceなどを使用する他の種類の攻撃については言及していません。最も基本的なバッファオーバーフロー攻撃が最初の方法で示され、2番目の方法では示されない理由を知りたいだけです。