博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XXE漏洞
阅读量:4346 次
发布时间:2019-06-07

本文共 1278 字,大约阅读时间需要 4 分钟。

原理:XML外部实体注入,简称XXE漏洞,XML数据在传输中数据被修改,服务器执行被恶意插入的代码。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

XML简介:XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明,DTD文档类型定义,文档元素。

DTD(文档类型定义):

1)内部声明:

语法:<!DOCTYPE 根元素[元素声明]>

示例:

]>
John

2)外部声明:

语法:<!DOCTYPE 根元素 SYSTEM "文件名">

示例:

John

note.dtd文件内容:

DTD实体:

1)内部实体声明:

语法:<!ENTITY 实体名称,“实体值”>

示例:

]>
&writer;&copyright;

2)外部实体声明:

语法:<!ENTITY 实体名称 SYSTEM “URI”>

示例:

]>
&writer;

 

漏洞利用方法:

1)直接通过DTD外部实体声明:

]>
&b;

2)通过DTD文档引入外部DTD文档,再引入外部实体声明

&b;
DTD文件内容:

3)通过DTD外部实体声明引入外部实体声明  

%d;]>
&b;
DTD文件内容:
  

 

示例:docker中的php_xxe模块示例

php中的libxml2.9.0以后,就默认不解析外部实体了,docker环境启动后,可以看到phpinfo页面显示的libxml版本。

该环境下www目录下有四个文件

除了index.php外,其他文件我们都可以利用xxe漏洞来读取文件等操作。

打开dom.php

抓包,然后发送到repeater:

1.读取文件:

]>
&xxe;

2.扫描端口

通过返回不同字段来判断是否开启了端口。

 

3.远程代码执行

这种漏洞需要特定的条件才能触发,当PHP expect模块被加载到了有xxe漏洞的系统或者xml的内部应用程序上,我们就可以进行远程代码执行了

]>
&xxe;

  

  

 

 

转载于:https://www.cnblogs.com/xiaoqiyue/p/10165696.html

你可能感兴趣的文章
MFC接收ShellExecute多个参数
查看>>
volatile和synchronized的区别
查看>>
类中的静态函数和非静态函数的区别
查看>>
windows 下安装Apache
查看>>
Fedora14 mount出现错误时解决办法【亲测有效】
查看>>
ruby实现生产者和消费者
查看>>
node.js 之 http 架设
查看>>
MongoDB 备份与还原
查看>>
Oracle启动与关闭数据库实例
查看>>
Spring day01
查看>>
hihocoder-1740-替换函数
查看>>
Codeforce Round #219 Div2
查看>>
option value的值可以有空格 再试试吧
查看>>
.htaccess to httpd.conf
查看>>
node.js 基础学习笔记2
查看>>
hadoop中常见元素的解释
查看>>
BZOJ-1497 最大获利
查看>>
4-4 修改文件
查看>>
并发编程(十):AQS
查看>>
条件注释判断浏览器版本<!--[if lt IE 9]>
查看>>