日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談XXE攻擊

一、介紹

創(chuàng)新互聯(lián)建站是一家以成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、品牌設(shè)計、軟件運維、營銷推廣、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計為成都玻璃隔斷等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。

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

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

二、什么是XML外部實體?

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

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

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

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

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

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

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

五、如何確認XXE漏洞?

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

請求:

響應(yīng):

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

修改后的請求和響應(yīng):

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

六、如何進行XXE攻擊?

 
 
 
 
  1. Code 1:
  2.     
  3.     1. To read files on same server:
  4.     
  5.      
  6.     
  7.      
  8.     
  9.      ]>
  10.     
  11.      &myentity;
  12.     
  13.     2. To crash the server / Cause denial of service:
  14.     
  15.      
  16.     
  17.      
  18.     
  19.      
  20.     
  21.      
  22.     
  23.      
  24.     
  25.      
  26.     
  27.      
  28.     
  29.      
  30.     
  31.      
  32.     
  33.      
  34.     
  35.      
  36.     
  37.      ]>
  38.     
  39.      &lol9;

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

影響:

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

補救措施:

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

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

以下是代碼的第二段

 
 
 
 
  1. import javax.xml.parsers.DocumentBuilderFactory;
  2.     
  3.     import javax.xml.parsers.ParserConfigurationException; // catching unsupported features
  4.     
  5.     ...
  6.     
  7.      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  8.     
  9.      try {
  10.     
  11.      // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-general-entities
  12.     
  13.      // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-general-entities
  14.     
  15.      String FEATURE = "http://xml.org/sax/features/external-general-entities";
  16.     
  17.      dbf.setFeature(FEATURE, false);
  18.     
  19.      // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-parameter-entities
  20.     
  21.      // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-parameter-entities
  22.     
  23.      FEATURE = "http://xml.org/sax/features/external-parameter-entities";
  24.     
  25.      dbf.setFeature(FEATURE, false);
  26.     
  27.      // Xerces 2 only - http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl
  28.     
  29.      FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
  30.     
  31.      dbf.setFeature(FEATURE, true);
  32.     
  33.      // remaining parser logic
  34.     
  35.      ...
  36.     
  37.      catch (ParserConfigurationException e) {
  38.     
  39.      // This should catch a failed setFeature feature
  40.     
  41.      logger.info("ParserConfigurationException was thrown. The feature '" +
  42.     
  43.      FEATURE +
  44.     
  45.      "' is probably not supported by your XML processor.");
  46.     
  47.      ...
  48.     
  49.      }
  50.     
  51.      catch (SAXException e) {
  52.     
  53.      // On Apache, this should be thrown when disallowing DOCTYPE
  54.     
  55.      logger.warning("A DOCTYPE was passed into the XML document");
  56.     
  57.      ...
  58.     
  59.      }
  60.     
  61.      catch (IOException e) {
  62.     
  63.      // XXE that points to a file that doesn't exist
  64.     
  65.      logger.error("IOException occurred, XXE may still possible: " + e.getMessage());.. }

當前標題:淺談XXE攻擊
轉(zhuǎn)載注明:http://www.5511xx.com/article/cdepdgg.html