热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XML实体注入深入理解

这篇文章主要为大家介绍了XML实体注入深入理解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引文

在平常的WEB渗透中,我们经常会遇到SQL注入、文件上传、SSRF、CSRF等一系列的漏洞,但XXE漏洞在座的读者们了解过吗。今天带大家了解一下这个危险程度同样很高的XXE漏洞。

简介

Xml外部实体注入漏洞(XML External Entity Injection)简称XXE,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可以构造加载恶意外部文件,进而通过恶意外部文件对服务器进行攻击。

基础知识

在了解XXE漏洞前,我们先看看什么是XML实体。XML根据简单概括为如下:可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点。

可能单看文字读者们不太好理解,下面给大家简单举个例子:

上图就是一个简单的XML实体,用代码显示可以展示为:

 
     
    
    Giada De Laurentiis 
    2005
    30.00
    
     
     
    J K. Rowling 
    2005 
    29.99
    
     
     
    Erik T. Ray 
    2003
    39.95 
    

其中根的元素是 bookstore,book中 元素有子元素:author、title、year、price。

DTD

DTD(文档类型定义)可以合法的定义xml标签,DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用,接下来带大家详细看一下它的内部结构以更好的去理解。

内部DOCTYPE声明


               
                                   
                             
                     
                             
]>

I
A
M
XINO!

外部DOCTYPE声明

XML实体注入

了解了上面的基础知识后,我们便可以进一步学习XXE漏洞。

我们要想利用,首先要判断服务器会不会解析XML实体,所以开始时我们先上传一个测试文件来判断服务器是否能解析该类型,如果解析了,我们才可以继续利用这个漏洞。



]>
&name;

判断服务器是否解析之后我们可以看看是否支持外部实体调用:



]>
&name;

判断完之后就可以做进一步测试了,比如:

无回显XXE(BLIND XXE)

我们将获取的数据发送到外部的http服务器上,后面查看http服务器即可查看到提取的数据内容。

举一个最简单的例子:

#test.xml

%all;

对应的payload可以写作为:


%remote;
%send;
]>

首先对 remote 引用的目的是将外部文件 test.xml 引入到文中,检测到 send 实体,在节点中引用 send,就可以成功实现数据转发。也就实现了数据的外带。

读取任意文件

这个也是XXE比较常用的方法,我们引入(或编辑)一个DOCTYPE元素,该元素定义一个包含文件路径的外部实体。

探测内网端口

我们利用XXE也可以进行内网探测端口(类似于SSRF),以用来进一步对机器照成攻击:

 

]>

命令执行

这个还是比较少见的,因为命令执行的条件比较苛刻,要求靶机php装有expect扩展,但这个扩展是默认不安装的,所以比较难利用。



]>

&xxe;

dos拒绝服务

这个不是很了解,在网上浏览时注意到的,原理大概是利用迭代参数实体进行拒绝服务,让服务器的解析变得非常非常慢。








]>
&xxe6;

例题

[PHP]XXE

打开是一个登录界面:

在源码处会发现:


可以判断会解析XML文件,尝试构造payload直接读取文件:



]>

&admin;
xino

抓包构造恶意数据然后发包:

结语

今天比较详细的讲了XXE漏洞的原理以及应用方法,有兴趣的小伙伴可以自己去搭建靶机来进行测试,以上就是XML实体注入深入理解的详细内容,更多关于XML实体注入的资料请关注其它相关文章!


推荐阅读
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 【BP靶场portswigger服务端10】XML外部实体注入(XXE注入)9个实验(全)
    前言:介绍:博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。殊荣:CSDN网络安 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
  • http头_http头部注入
    1、http头部注入分析1、原理 ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • 03Spring使用注解方式注入
    基于注解的DI注入1.导包环境搭建:导入aop包(spring-aop-4.1.6.RELEASE.jar)2.创建类3.创建spring.xml配置文件(必须在src目录下)该配 ... [详细]
author-avatar
a126128
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有