渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法
目录原理
XML语言解释
什么是xml语言:
以PHP举例xml外部实体注入
XML语言结构
口试题目
如何探求xxe漏洞
XEE漏洞修复域防御
提高版本
代码修复
php
java
python
手动黑名单过滤(不推荐)
https://i-blog.csdnimg.cn/direct/9f1f0f93800d4aba8072387cbaa3df23.png
一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区
原理
[*] XXE:XML External Entity 即外部实体 简称XXE漏洞
[*] 从安全角度理解成XML External Entity attack 外部实体注入攻击。
[*] 由于步伐在剖析输入的XML数据时,剖析了攻击者伪造的外部实体而产生的。
XML语言解释
什么是xml语言:
[*] XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、界说数据范例,是一种允许用户对本身的标记语言举行界说的源语言。
[*] XML文档结构包罗
[*] XML声明
[*] DTD文档范例界说(可选)
[*] 文档元素
[*] 实在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版本
[*] https://i-blog.csdnimg.cn/direct/43b3598e10c047309fbe283cd646b45a.png
XML语言结构
文档结构包罗以下三个部分:
[*] Json xml 数据 xml攻击数据格式
[*] 外部实体注入攻击
[*] Xml外部实体攻击
内部声明DTD
<!DOCTYPE 根元素 [元素声明]>
引用外部DTD文档
<!DOCTYPE 根元素 SYSTEM "文件名">
<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">
内部声明实体
<!ENTITY 实体名称 "实体的值">
引用外部实体
<!ENTITY 实体名称 SYSTEM "URI">
<!ENTITY 实体名称 PUBLIC "public_ID" "URI">
调用方式:&实体名称; https://i-blog.csdnimg.cn/direct/c6748813b31c4ff0b42830730ae3c98b.png
DTD 也就是攻击代码
我们在做渗透测试 做一个读取文件 证明存在这个漏洞就行了
[*]payload如下:
[*]而且你需要掌握的代码就这几行,各人最好能够背下来
--------------------------------------------------------------------------------------------
[*] 声明部分
DTD攻击载荷部分
xml部分
[*] <?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY hacker "lady_killer9">
]>
<name>&hacker;</name>
如何探求xxe漏洞
[*]抓包查看accept的头是否接收xml
[*]抓包修改数据范例把json改成xml来传输数据
https://i-blog.csdnimg.cn/direct/b31a56cef6ed474090a72cc719a70c62.png
https://i-blog.csdnimg.cn/direct/bddce866641c4751b85ec7edf9cfdfd4.png
https://i-blog.csdnimg.cn/direct/90736f5428f5434a9ddff2c75653573e.png
https://i-blog.csdnimg.cn/direct/bcfc53ccfd294bb396b4e4f49bf0c5e2.png
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企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]