目录
原理
XML语言解释
什么是xml语言:
以PHP举例xml外部实体注入
XML语言结构
口试题目
如何探求xxe漏洞
XEE漏洞修复域防御
提高版本
代码修复
php
java
python
手动黑名单过滤(不推荐)
一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区
原理
- XXE:XML External Entity 即外部实体 简称XXE漏洞
- 从安全角度理解成XML External Entity attack 外部实体注入攻击。
- 由于步伐在剖析输入的XML数据时,剖析了攻击者伪造的外部实体而产生的。
XML语言解释
什么是xml语言:
- XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、界说数据范例,是一种允许用户对本身的标记语言举行界说的源语言。
- XML文档结构包罗
- 实在XML是一门语言,类似于html,但是厥后主要用xml的文档格式来传输数据,但是现在比较新的系统,各人之前传输数据用的是json了。
- 现在很多语言里面对应的剖析xml的函数默认是
- 克制剖析外部实体内容的,从而也就直接制止了这个漏洞。
以PHP举例xml外部实体注入
- 以PHP为例,在PHP里面剖析xml用的是libxml,其在≥2.9.0的版本中
- 默认是克制剖析xml外部实体内容的
- 如果你测试用的php中剖析xml用的libxml的版本大于了2.9.1
- 为了模仿漏洞,那么可以通过手动指定LIBXML_NOENT选项开启xml外部实体剖析功能。
- 修改 libxml 版本 PHP版本
-
XML语言结构
文档结构包罗以下三个部分:
- Json xml 数据 xml攻击数据格式
- 外部实体注入攻击
- Xml外部实体攻击
- 内部声明DTD
- <!DOCTYPE 根元素 [元素声明]>
- 引用外部DTD文档
- <!DOCTYPE 根元素 SYSTEM "文件名">
- <!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">
- 内部声明实体
- <!ENTITY 实体名称 "实体的值">
- 引用外部实体
- <!ENTITY 实体名称 SYSTEM "URI">
- <!ENTITY 实体名称 PUBLIC "public_ID" "URI">
- 调用方式:&实体名称;
复制代码
DTD 也就是攻击代码
我们在做渗透测试 做一个读取文件 证明存在这个漏洞就行了
- payload如下:
--------------------------------------------------------------------------------------------
- <?xml version = "1.0"?>
- <!DOCTYPE note [
- <!ENTITY hacker "lady_killer9">
- ]>
- <name>&hacker;</name>
复制代码
如何探求xxe漏洞
- 抓包查看accept的头是否接收xml
- 抓包修改数据范例把json改成xml来传输数据
XEE漏洞修复域防御
php
- libxml_disable_entity_loader(true);
复制代码 java
- DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
- dbf.setExpandEntityReferences(false);
- setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
- setFeature("http://xml.org/sax/features/external-general-entities",false)
- setFeature("http://xml.org/sax/features/external-parameter-entities",false);
复制代码 python
- from lxml import etree
- xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
复制代码
- 过滤关键词: <!DOCTYPE 、 <!ENTITY SYSTEM 、 PUBLIC
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |