あなたの仕事にセキュリティが関係していない限り、私はあなたにこれを聞かれるとは思わない。脆弱性を特定するのは比較的簡単ですが、悪用するのは難しいです。ほとんどの雇用者は、あなたの境界を確認する必要があることを知っていることを完全に幸せに思うでしょう。
billjamesdev explainsオーバーフローによる情報開示。これは基本的にHeartbleedバグの内容です。しかし、有害な結果は非常に悪く、最も有名なのはリモートコード実行です。基本的には、ソフトウェアの脆弱性のためにあなたのプログラムで好きなコードを実行している人です。スタックベースのバッファオーバーフローは、RCEを取得するのに利用しやすくなりますが、ヒープベースのバッファもある程度悪用される可能性があります。
int foo() {
char bar[4];
}
スタック上に住んでいるbar
配列:この小さな機能で
。スタック上に存在する他の興味深いものは、関数の戻りアドレスです。そのアドレスを上書きすると、関数が返ってくると、開発者はそれが戻ってくると思った場所の代わりに、選択した場所にジャンプします。
int main() {
char bar[4];
scanf("Enter no more than 4 characters: %s\n", bar);
}
int bar() {
system("sh"); // starts a shell on Linux
}
と(非常に低いですが、0×41は、「A」のASCIIコードであるため、それが簡単にデモンストレーションを行い)、メモリアドレス0x41414141でそのbar
生活を想定しています。あなたはこれらの二つの機能を持っていると言います。あなたがLinuxと入力これでそのプログラムを実行した場合:x86で
Enter no more than 4 characters: 00001111AAAA
を、これは親のベースフレームポインタと呼ばれる特殊な値を上書きし、ASCIIのゼロで文字バッファをいっぱいになります(それはあなたのプログラムに非常に重要ですハッカーは通常、ASCII文字で気にする必要はありません)、返信先アドレスを0x41414141
で上書きします。main
が返ってくると、プログラムを終了する代わりにシェルが起動します。
攻撃にはさまざまなバリエーションがありますが、基本的な考え方は、バッファオーバーフローによってハッカーがプログラムの実行フローを乗っ取る可能性があるということです。
https://xkcd.com/1354/ – immibis
ここでは間違っていると思います。これらの問題の多くは、貧弱な設計の結果として発生する可能性があります。ジャバは絶縁層を提供するだけです。私は説明することができます:あなたは1アイテムを支払うのに十分なお金があり、あなたは要求されたとおりに提供される10を求めます。あなたは他の9人に支払うことになっていますよね? Cはあなた自身でこれをコード化しますが、JVMはキャッチされない例外のためにアプリケーションを単純に終了します。他にも、Heartbleedが広く配布されている暗号ライブラリのバグであるという事実は、それが大きな問題であった唯一の理由ですが、それは単にCだけでなく、貧弱な設計によるものでした。 –