一、XML介紹
不同于HTML,XML用來傳輸和存盤資料,一種樹形結構,從“根”到“葉”,
允許創作者定義自己的標簽和自己的檔案結構,
二、XXE漏洞
全稱:xml external entity injection,即xml外部物體注入,
xxe漏洞發生在應用程式決議XML輸入時,沒有禁止外部物體的加載,導致可加載惡意外部檔案,造成檔案讀取、命令執行、內網埠掃描、攻擊內網網站、發起DOS攻擊等危害,xxe漏洞觸發的點往往是可以上傳XML檔案的位置,沒有對上傳的xml檔案進行過濾,導致可上傳惡意xml檔案,
三、相關函式及內容
1.file_get_content()函式把整個檔案讀入一個字串中,

2. php://input
可以訪問請求的原始資料的只讀流,file_get_contents("php://input")可以讀取POST提交的資料,
3.simplexml_load_string函式將xml格式字串轉換為對應的SimpleXMLElement,
4.XML注入回顯 輸出函式,使用 print_r()、echo 輸出想要輸出的內容,
完整的存在XXE漏洞代碼:
<?php
$xml=file_get_contents("php://input");
$data=simplexml_load_string($xml);
echo"</pre>";
print_r($data);
?>
用BP抓包,修改提交方式為POST,在下邊粘貼payload內容,提交即可實作利用,
四、XXE漏洞利用
以下內容提交到POST下面作為payload(測驗POC),
file://path/to/file.ext
http://url/file.ext
php://filter/read=convert.base64-encode/resource=conf.php
五、XXE漏洞防御
XXE漏洞已經逐漸消亡,原因是libxml2.9.0以后,默認不決議外部物體,
1.使用開發語言提供的禁用外部物體方法,
2.過濾用戶提交的XML資料,
六、序列化與反序列化
序列化就是把一個物件變成可以傳輸的字串,可以以特定的格式在行程之間跨平臺(像JAVA---PHP)、安全的通信,
可以理解為將類(class)中的物件(object)由記憶體中的抽象資料結構,用序列化的字串保存在硬碟(或資料庫,如redis中),從而緩解記憶體壓力,等到用的時候,再從硬碟反序列化到記憶體呼叫,
序列化:物件轉化為字串,
反序列化:字串轉化為物件,
在反序列化程序中會觸發代碼執行,
七、反序列化漏洞
PHP反序列化漏洞也叫PHP物件注入,屬于常見漏洞,形成原因程式員沒有對用戶輸入的反序列化字串進行檢測,導致反序列化程序可以被惡意控制,進而造成代碼執行、getshell等一些列不可控的后果,反序列化漏洞并不是PHP特有的,也存在JAVA、PYTHON,原理基本相通,
JSON:格式化的字串,輸出健值對的資料形式,類似于Python的字典,
序列化函式:serialize()
反序列化函式:unserialize()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301684.html
標籤:其他
