乌市泽哥 发表于 2025-1-22 18:25:23

渗透测试之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]
查看完整版本: 渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法