この記事では、ASP の chr(0) ファイル アップロードの脆弱性の原理と解決策を主に紹介します。chr(0) の脆弱性は、ファイルをアップロードするときに、非常に有害な脆弱性です。
ASP を使用してファイルのアップロード機能を開発する場合、ユーザーによるトロイの木馬プログラムのアップロードを防ぐために、アップロードされたファイルの拡張子が規制を満たしているかどうかを判断することが一般的な方法です。アップロードされたファイルを取得するための正しい文字列関数は、ファイル名の最後の 4 桁を簡単に特定できますが、非常に危険な脆弱性が存在します。それは chr(0) の脆弱性です。詳細。
1. まず、chr(0) とは何かについて説明します。
ASP では、chr() 関数を使用して ASCII コードを呼び出すことができます。chr(0) は、簡単に言えば、文字列に chr(0) 文字が含まれる場合、chr の先頭のみが呼び出しであることを意味します。 (0) までの文字は出力可能ですが、chr(0) 以降の文字は出力されません。例を挙げて説明します。
次のようにコードをコピーします。
<%response.write "HTMer.com"&chr(0)&"Welcome"%>
上記のコードを IIS で実行すると、「HTMer.com」のみが出力されますか? chr(0) が読み取られるとステートメントは終了したとみなされるため、次の「ようこそ」は削除されます。
2. Chr(0) 脆弱性アップロード原則:
jpg ファイルのみをアップロードするように ASP プログラムを設定したと仮定します。 chr(0) 脆弱性を利用して ASP トロイの木馬をアップロードする方法は次のとおりです。
ここでは、htmer.asp という名前の ASP トロイの木馬ファイルがあるとします。名前を htmer.asp .jpg に変更しました。真ん中にスペースがあるのがわかりますか?ファイル名を取得するとき、このスペースは chr(0) とみなされます。 right("htmer.asp .jpg",4) を使用してそれを表示すると、実際には .jpg になりますが、実際に htmer.asp を読み取るときは、このスペースは chr(0) とみなされます。ファイルを生成するとき、システムは chr(0) を読み取った時点で終了したと判断するため、アップロードされたファイル名は htmer.asp として自動的に生成されます。知っておくべきだと思います。
3. chr(0) 脆弱性を解決する方法
解決策は、アップロードされたファイル名に chr(0) が含まれているかどうかを確認し、ASP の replace 関数を使用して chr(0) 文字を直接置換することです。