php 7.0.30
libxml 2.8.0
為了演示php環境下的xxe漏洞,本例將libxml2.8.0版本編譯進php中。php 版本並不影響xxe利用。
使用如下命令編譯並啟動環境:
cd vulhub/php/php_xxe
docker-compose up -d
web目錄如下
$ tree .
.├── dom.php # 示例:使用domdocument解析body
├── index.php
├── ******xmlelement.php # 示例:使用******xmlelement類解析body
└── ******xml_load_string.php # 示例:使用******xml_load_string函式解析body
dom.php、******xmlelement.php、******xml_load_string.php均可觸發xxe漏洞,具體輸出點請閱讀這三個檔案的**。
如dom.php**如下
<?php
$data
=file_get_contents
('php://input');
$dom
=new
domdocument()
;$dom
->
loadxml
($data);
print_r
($dom);
?>
其中file_get_contents(「php://input」):
php://input 是可以訪問請求的原始資料的唯讀流。
post 請求的情況下,最好使用 php://input 來代替 $http_raw_post_data,因為它不依賴於特定的 php.ini 指令。
而且,這樣的情況下 $http_raw_post_data 預設沒有填充, 比啟用 always_populate_raw_post_data 潛在需要更少的記憶體。
enctype=「multipart/form-data」 的時候 php://input 是無效的。
1, php://input 可以讀取http entity body中指定長度的值,由content-length指定長度,不管是post方式或者get方法提交過來的資料。但是,一般get方法提交資料 時,http request entity body部分都為空。
2,php://input 與$http_raw_post_data讀取的資料是一樣的,都只讀取content-type不為multipart/form-data的資料。os
t2,p
hp不能
識別的c
onte
nt−t
ype類
型的時候
,會將h
ttp請
求包中相
應的資料
填入變數
_post 2,php不能識別的content-type型別的時候,會將http請求包中相應的資料填入變數
post2
,php
不能識別
的con
tent
−typ
e型別的
時候,會
將htt
p請求包
中相應的
資料填入變數o
st資料
相一致。
5,ph
p://
inpu
t資料總
是跟_post資料相一致。 5,php://input資料總是跟
post數
據相一致
。5,p
hp:/
/inp
ut資料
總是跟http_raw_post_data相同,但是php://input比htt
praw
post
data
更湊效,
且不需要
特殊設定
php.
ini6
,php
會將pa
th欄位
的que
rypa
th部分
,填入全
局變數http_raw_post_data更湊效,且不需要特殊設定php.ini 6,php會將path欄位的query_path部分,填入全域性變數
更湊效,
且不需要
特殊設定
php.
ini6
,php
會將pa
th欄位
的que
ryp
ath部
分,填入
全域性變數
_get。通常情況下,get方法提交的http請求,body為空。
7、file_get_contents(「php://input」)就可以獲取非 enctype="multipart/form-data"提交過來的資料
8、@file_get_contents(「php://input」)加上@是遮蔽對應的錯誤
9、json_decode( @file_get_contents(「php://input」) ,true),由於我們與前端協定的資料是json,所以我們對接收到的資料內容進行json解析,以便抓取對應的資料進行使用。
****** xxe payload:
<?xml version="1.0" encoding="utf-8"?>
]>
&xxe;
抓包後進行修改利用xxe注入獲取任何想要的檔案內容
如圖
PHP環境 XML外部實體注入漏洞(XXE)
好好學習,天天向上 libxml2.9.0以後,預設不解析外部實體,導致xxe漏洞逐漸消亡。為了演示php環境下的xxe漏洞,本例會將libxml2.8.0版本編譯進php中。php版本並不影響xxe利用。libxml2.8.0版本 使用vulhub 使用docker啟動 docker compos...
XML外部實體注入
參考文章 xxe漏洞逐漸走向消亡 libxml 2.9.0 以後 預設不解析外部實體 遂 xxe漏洞逐漸消亡 語法 1.xml元素都必須有關閉標籤。2.xml 標籤對大小寫敏感。3.xml 必須正確地巢狀。4.xml 文件必須有根元素。5.xml 的屬性值須加引號。結構 1.xml 文件宣告,在文件...
OWASP之XXE(XML外部實體注入)
前提條件 libxml2.9.1 及以後,預設不解析外部實體。可使用phpinfo 檢視libxml的版本資訊。後加phpinfo.php xml文件 組成 xml宣告,dtd部分,xml部分 cross domain policy根節點,http dtd引用檔案位置 dtd 文件型別定義 為xml...