- ベストアンサー
ヌル攻撃とは?インターネットでの攻撃手法について
- ヌル攻撃とはWebアプリケーションのセキュリティーチェックをくぐり抜ける攻撃手法です。
- ヌル攻撃は、リクエストされた文字列に%00(ヌルバイト)を含めることで実行されます。
- ファイルにアクセスする際に%00を入力すると、セキュリティーチェックを回避できる可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
勘違いされて居る様なのですが、NULL(NUL)は、それは一つの文字です。 たとえば、改行コード、TABコードの様な制御するための記号の一つです。 なので、あなたが書いた「%00」と言うのは、「%」と言う1文字と「0」と言う文字が2つ。合計三つの文字と言うものになります。 わかりにくいかもしれませんが、コンピューター上で、そこには何もない。と言うことを表す1つの記号なんです。 スペースは、スペースという記号がある。と解釈されますので、スペースとNULLの何もない。は別のものとして扱われます。 なので、そもそもWebアドレスバーに、キーボードからNULL文字を直接入れることは通常できません。 テキストエディターなどを使って、コード表からNULL記号を呼び出して、その記号部分をコピーして貼り付ける。と言う様なことをしないと、そもそもできないです。 >「400 Bad Request」と表示されました。 そんなものはないから、そのリクエストは間違ってる。と出されただけの話です。
その他の回答 (1)
- bardfish
- ベストアンサー率28% (5029/17766)
Bad Requestと返ってきたんだから正常に処理されたという事です。 ここで言う「正常」とは、HTTPD(デーモン、バックグラウンドプロセス)が正しく解釈し、存在しないファイルもしくはパラメーターへのリクエストを処理できたから表示されたモノ。 「%00」というのは16進数のバイナリーデータをASCII文字しか扱えない仕組みの為に16進コードの前に「このあとにバイナリーコードのテキストが続きますよ」という合図でしか無い。 C言語を昔からやっている人ならわかると思うが、テキストエディタなどで入力することが出来ない、画面に表示できない・キーボードから直接入力できない(エスケープシーケンスが代表かな)もじを扱うときに使うもの。プログラミングでは&Hとか付けることもあるし関数などで「CHR(0)」とすることもある。 ちなみに、16進数で20というのは半角スペース。だったはず・・・ だからURLの後ろに%20とあったらそれはスペースのことです。プログラムを含むURLではスペースというのは単語の区切りとして扱われる為こういう仕組みが編み出されました。 で、NULLというのは0x00のこと。 テクストファイルなどではファイルの一番後ろに「ここで最後ですよ」という意味合いで付加されることが多い。バイナリダンプでテキストファイルなどを表示すると改行は「CR+LF(0D0A)」となる。OSによってはCRだけのケースもある。 では、なぜNULL攻撃というモノが成立するかというと、パラメータやファイルの終端処理をNULLに頼っているといつまでも読み込もうとしてCPUリソースをそれだけで食い潰す可能性があり、NULL処理が不完全だとパラメータの区切りが曖昧になって間違ったデータを処理してしまう可能性があるから。 コンパイラレベルでそういうモノが存在するから古い開発ツールを使っていると簡単にクラッシュすることがある。
お礼
ありがとうございました。
補足
<補足> 今回のケースはリクエスト文字列ではなくパス名の場合です。(phpではなくhtml) 〜. com/x/y.php?q= 〜%00.txt のようなパターンでは無く、 上記の通り 〜 .com/file/1%00 のような形です。 仮に攻撃が成功した場合、サイト内で一部の操作は出来なくなるものでしょうか。 safariでホームページを閲覧する時、 「スクリプトを実行できません Java Scriptはこの方法で使用することが許されていません」 とエラーが出たのですが、 これも攻撃されたのでしょうか? (400 Bad request が出たのもその一つか?)
お礼
詳しい解説、ありがとうございます。
補足
"Java Scriptはこの方法で使用することが許されていません" のエラーメッセージが表示されたこともありましたが、 ヌルバイト攻撃されたものなのでしょうか。