web-dev-qa-db-ja.com

Webアプリケーションが文字列をnullバイトで終了する

私はサイトでいくつかの侵入テストを行っており、検索文字列にnullバイトを入れると実際にそこで文字列が終了することに気づきました(以前は気付いていましたが、今ではそれを表示するのが良いようです)。

Cのような下位レベルの言語では問題ありませんが、それがどのように機能するかは知っていますが、これがWebアプリケーションに当てはまる理由は、PHPとASPXページの両方で発生します。

これは脆弱性ですか、言語の意図された機能ですか、それとも言語のバグですか?

7
DarkMantis

実際にPHP文字列にはnullバイトを含めることができます。NET文字列も含めることができるため(したがってASP.NET)。PHPレベルでは、このバイトは特別なものではありません。文字U + 0000は単なる別のUnicodeコードポイントです。文字列が別のシステムに渡されると問題が発生します。このシステムでは、nullバイトは文字列ターミネーターです。特にファイルアクセスの場合:PHP =コードはファイルを開こうとしますfoo.txt\0.php (どこ \0はnullバイトを表します)、OSはfoo.txt、残りの文字列を無視します。

これは文書化されています。他の言語でも同様です。

あなたの場合、「検索文字列」として受信されたバイトは、unmodifiedが、nullバイトが文字列を終了する特別な意味。これはそれ自体の脆弱性ではありませんが、Webサイトが入力文字をフィルタリングしていないことを示しており、thatは問題を引き起こす可能性があります。

10
Tom Leek