成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談XXE攻擊

安全 應用安全
本文主要討論什么是XML外部實體,這些外部實體是如何被攻擊的。

一、介紹

現在越來越多主要的web程序被發現和報告存在XXE(XML External Entity attack)漏洞,比如說facebook、paypal等等。 舉個例子,我們掃一眼這些網站最近獎勵的漏洞,充分證實了前面的說法。盡管XXE漏洞已經存在了很多年,但是它從來沒有獲得它應得的關注度。很多XML的解析器默認是含有XXE漏洞的,這意味著開發人員有責任確保這些程序不受此漏洞的影響。

[[184002]]

本文主要討論什么是XML外部實體,這些外部實體是如何被攻擊的。

二、什么是XML外部實體?

如果你了解XML,你可以把XML理解為一個用來定義數據的東東。因此,兩個采用不同技術的系統可以通過XML進行通信和交換數據。 比如,下圖就是一個用來描述一個職工的XML文檔樣本,其中的’name’,'salary’,'address’ 被稱為XML的元素。

Image

有些XML文檔包含system標識符定義的“實體”,這些XML文檔會在DOCTYPE頭部標簽中呈現。這些定義的’實體’能夠訪問本地或者遠程的內容。比如,下面的XML文檔樣例就包含了XML ‘實體’。

Image

在上面的代碼中, XML外部實體 ‘entityex’ 被賦予的值為:file://etc/passwd。在解析XML文檔的過程中,實體’entityex’的值會被替換為URI(file://etc/passwd)內容值(也就是passwd文件的內容)。 關鍵字’SYSTEM’會告訴XML解析器,’entityex’實體的值將從其后的URI中讀取。因此,XML實體被使用的次數越多,越有幫助。

三、什么是XML外部實體攻擊?

有了XML實體,關鍵字’SYSTEM’會令XML解析器從URI中讀取內容,并允許它在XML文檔中被替換。因此,攻擊者可以通過實體將他自定義的值發送給應用程序,然后讓應用程序去呈現。 簡單來說,攻擊者強制XML解析器去訪問攻擊者指定的資源內容(可能是系統上本地文件亦或是遠程系統上的文件)。比如,下面的代碼將獲取系統上folder/file的內容并呈獻給用戶。

Image

四、怎么甄別一個XML實體攻擊漏洞?

最直接的回答就是: 甄別那些接受XML作為輸入內容的端點。 但是有時候,這些端點可能并不是那么明顯(比如,一些僅使用JSON去訪問服務的客戶端)。在這種情況下,滲透測試人員就必須嘗試不同的測試方式,比如修改HTTP的請求方法,修改Content-Type頭部字段等等方法,然后看看應用程序的響應,看看程序是否解析了發送的內容,如果解析了,那么則可能有XXE攻擊漏洞。

五、如何確認XXE漏洞?

出于演示的目的,我們將用到一個Acunetix維護的demo站點,這個站點就是: http://testhtml5.vulnweb.com/。這個站點可用于測試Acunetix web掃描器的功能。 訪問 http://testhtml5.vulnweb.com/ 站點,點擊 ‘Login’下面的 ‘Forgot Password’ 鏈接。注意觀察應用程序怎樣使用XML傳輸數據,過程如下圖所示:

請求:

Image

響應:

Image

觀察上面的請求與響應,我們可以看到,應用程序正在解析XML內容,接受特定的輸入,然后將其呈現給用戶。為了測試驗證XML解析器確實正在解析和執行我們自定義的XML內容,我們發送如下的請求

修改后的請求和響應:

myentity、值為’testing’的實體

如上圖所示,我們在上面的請求中定義了一個名為myentity、值為’testing’的實體。 響應報文清晰地展示了解析器已經解析了我們發送的XML實體,然后并將實體內容呈現出來了。 由此,我們可以確認,這個應用程序存在XXE漏洞。

六、如何進行XXE攻擊?

  1. Code 1: 
  2.  
  3.      
  4.  
  5.     1. To read files on same server: 
  6.  
  7.      
  8.  
  9.      <?xml version="1.0" encoding="ISO-8859-1"?> 
  10.  
  11.      
  12.  
  13.      <!DOCTYPE foo [  
  14.  
  15.      
  16.  
  17.      <!ENTITY myentity SYSTEM "file:///location/anyfile" >]> 
  18.  
  19.      
  20.  
  21.      <abc>&myentity;</abc> 
  22.  
  23.      
  24.  
  25.     2. To crash the server / Cause denial of service: 
  26.  
  27.      
  28.  
  29.      <?xml version="1.0"?> 
  30.  
  31.      
  32.  
  33.      <!DOCTYPE lolz [ 
  34.  
  35.      
  36.  
  37.      <!ENTITY lol "lol"> 
  38.  
  39.      
  40.  
  41.      <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> 
  42.  
  43.      
  44.  
  45.      <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> 
  46.  
  47.      
  48.  
  49.      <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> 
  50.  
  51.      
  52.  
  53.      <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;"> 
  54.  
  55.      
  56.  
  57.      <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;"> 
  58.  
  59.      
  60.  
  61.      <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;"> 
  62.  
  63.      
  64.  
  65.      <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;"> 
  66.  
  67.      
  68.  
  69.      <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;"> 
  70.  
  71.      
  72.  
  73.      ]> 
  74.  
  75.      
  76.  
  77.      <lolz>&lol9;</lolz> 

上面樣例代碼1中的XXE漏洞攻擊就是著名的’billion laughs’(https://en.wikipedia.org/wiki/Billion_laughs)攻擊,該攻擊通過創建一項遞歸的 XML 定義,在內存中生成十億個”Ha!”字符串,從而導致 DDoS 攻擊。原理為:構造惡意的XML實體文件耗盡可用內存,因為許多XML解析器在解析XML文檔時傾向于將它的整個結構保留在內存中,解析非常慢,造成了拒絕服務器攻擊。除了這些,攻擊者還可以讀取服務器上的敏感數據,還能通過端口掃描,獲取后端系統的開放端口。

影響:

此漏洞非常危險, 因為此漏洞會造成服務器上敏感數據的泄露,和潛在的服務器拒絕服務攻擊。

補救措施:

上面討論的主要問題就是XML解析器解析了用戶發送的不可信數據。然而,要去校驗DTD(document type definition)中SYSTEM標識符定義的數據,并不容易,也不大可能。大部分的XML解析器默認對于XXE攻擊是脆弱的。因此,最好的解決辦法就是配置XML處理器去使用本地靜態的DTD,不允許XML中含有任何自己聲明的DTD。

比如下面的Java代碼,通過設置相應的屬性值為false,XML外部實體攻擊就能夠被阻止。因此,可將外部實體、參數實體和內聯DTD 都被設置為false,從而避免基于XXE漏洞的攻擊。

以下是代碼的第二段

  1. import javax.xml.parsers.DocumentBuilderFactory; 
  2.  
  3.      
  4.  
  5.     import javax.xml.parsers.ParserConfigurationException; // catching unsupported features 
  6.  
  7.      
  8.  
  9.     ... 
  10.  
  11.      
  12.  
  13.      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
  14.  
  15.      
  16.  
  17.      try { 
  18.  
  19.      
  20.  
  21.      // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-general-entities 
  22.  
  23.      
  24.  
  25.      // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-general-entities 
  26.  
  27.      
  28.  
  29.      String FEATURE = "http://xml.org/sax/features/external-general-entities"
  30.  
  31.      
  32.  
  33.      dbf.setFeature(FEATURE, false); 
  34.  
  35.      
  36.  
  37.      // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-parameter-entities 
  38.  
  39.      
  40.  
  41.      // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-parameter-entities 
  42.  
  43.      
  44.  
  45.      FEATURE = "http://xml.org/sax/features/external-parameter-entities"
  46.  
  47.      
  48.  
  49.      dbf.setFeature(FEATURE, false); 
  50.  
  51.      
  52.  
  53.      // Xerces 2 only - http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl 
  54.  
  55.      
  56.  
  57.      FEATURE = "http://apache.org/xml/features/disallow-doctype-decl"
  58.  
  59.      
  60.  
  61.      dbf.setFeature(FEATURE, true); 
  62.  
  63.      
  64.  
  65.      // remaining parser logic 
  66.  
  67.      
  68.  
  69.      ... 
  70.  
  71.      
  72.  
  73.      catch (ParserConfigurationException e) { 
  74.  
  75.      
  76.  
  77.      // This should catch a failed setFeature feature 
  78.  
  79.      
  80.  
  81.      logger.info("ParserConfigurationException was thrown. The feature '" + 
  82.  
  83.      
  84.  
  85.      FEATURE + 
  86.  
  87.      
  88.  
  89.      "' is probably not supported by your XML processor."); 
  90.  
  91.      
  92.  
  93.      ... 
  94.  
  95.      
  96.  
  97.      } 
  98.  
  99.      
  100.  
  101.      catch (SAXException e) { 
  102.  
  103.      
  104.  
  105.      // On Apache, this should be thrown when disallowing DOCTYPE 
  106.  
  107.      
  108.  
  109.      logger.warning("A DOCTYPE was passed into the XML document"); 
  110.  
  111.      
  112.  
  113.      ... 
  114.  
  115.      
  116.  
  117.      } 
  118.  
  119.      
  120.  
  121.      catch (IOException e) { 
  122.  
  123.      
  124.  
  125.      // XXE that points to a file that doesn't exist 
  126.  
  127.      
  128.  
  129.      logger.error("IOException occurred, XXE may still possible: " + e.getMessage());.. } 
責任編輯:趙寧寧 來源: FreeBuf
相關推薦

2014-07-09 15:41:51

2012-11-30 14:54:48

2010-09-13 10:14:30

2012-11-30 14:35:17

2012-02-14 09:43:08

2011-10-14 09:23:14

2015-05-06 10:02:26

2010-09-17 10:35:10

2013-11-12 14:11:10

2020-10-15 14:00:20

網絡攻擊溯源

2020-10-15 14:10:51

網絡攻擊溯源

2015-05-18 13:51:08

2010-07-22 11:18:14

2013-07-27 20:19:14

2011-01-26 11:09:07

2016-09-30 15:59:41

2017-01-09 14:54:46

2013-07-08 14:45:52

2010-10-08 13:14:35

2009-10-29 17:30:08

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区回区在观看免费视频 | 久草在线影| 亚洲黄色片免费观看 | 99精品热视频 | 免费精品 | 亚洲精品99 | 男人的天堂一级片 | 天天色天天 | 欧美日韩福利 | 欧美成人免费 | 国产高清久久久 | 久久国产综合 | 欧美三级在线 | 狠狠干网站 | 欧美在线视频观看 | 国产精品久久7777777 | 91视频精选 | 欧美激情精品久久久久久 | 成人av网站在线观看 | 成人网在线 | 伊人伊人伊人 | 久久精品亚洲 | 精品国产欧美一区二区 | 华人黄网站大全 | 亚洲最大福利网 | av黄色在线观看 | 婷婷中文在线 | 涩涩导航 | 成人精品鲁一区一区二区 | 日韩av一区在线观看 | 亚洲成人精品久久久 | 麻豆毛片| 国产成人在线一区 | 动漫www.被爆羞羞av44 | www国产成人免费观看视频,深夜成人网 | 日韩欧美在线观看一区 | аⅴ资源新版在线天堂 | 日韩视频一区 | 国产一区视频在线 | 欧美精品在线免费观看 | 国产精品久久久久aaaa樱花 |