3

シェルコードではヌルバイトは許可されていないと思いました。いくつかのシェルコードを理解しているときに、nullを含み、完全に機能するコードに出くわしたようですが、これはなぜですか?

http://pastie.org/private/feg8du0e9kfagng4rrg

4

2 に答える 2

4

シェルコードの null バイトの問題は、C 標準文字列ライブラリでの文字列処理でオーバーフローを使用して挿入された場合にのみ発生します。null バイトは文字列の終わりを意味するため、コピーは停止します。C スタイルの文字列を使用したバッファ オーバーフローの悪用は、90 年代半ばに最も一般的なシェルコード インジェクションのアプローチでした。現在、ほとんどの C コードは別の関数 (OpenBSD の strlcpy/strlcat セット、*_s() セット、または自家製の関数) を使用して (AFAIK) 保護されており、C++ は null バイトのない文字列ライブラリを既に取得しているため、古い環境ではありません。終了。現在、ほとんどのエクスプロイトは、バッファが小さすぎる、または受信値が境界内にある場合にミスチェックを行うなどのプログラミング エラーを使用します。

リンクしたコードを分析しませんでしたが、バイナリ データの TLV の処理が正しくないようです。いずれにせよ、バイナリ データ処理により null セーフです (ただし、別の方法で悪用可能です)。

于 2012-03-24T18:54:39.780 に答える
1

これらは環境変数でヌルポインターを使用します....探索!!!

于 2012-03-22T17:55:38.837 に答える