XXE漏洞

2023-11-16

何为XXE

简单来说,XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

典型攻击手法:

XML又是什么呢?

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

XML有什么特点

XML仅仅是纯文本,他不会做任何事情。
XML可以自己发明标签(允许定义自己的标签和文档结构)
XML 无所不在。XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。

既然XML是纯文本为什么还会产生注入呢

原本xml本身是没有任何作用,但是在PHP里有一个函数叫做simplexml_load_string,他的作用是把xml转化为对象。注:其他语言也有类似函数

XMLHTML是什么关系

XML被设计用来传输和存储数据。

HTML被设计用来显示数据。

为什么使用 DTD?

通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

您还可以使用 DTD 来验证您自身的数据。

DTD实体

DTD实体是用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。

内部实体声明:<!ENTITY 实体名称 "实体的值"> ex:<!ENTITY eviltest "eviltest">

外部实体声明:<!ENTITY 实体名称 SYSTEM "URI">

怎么构造外部实体注入?

  1. 直接通过DTD外部实体声明
  2. 通过DTD文档引入外部DTD文档,再引入外部实体声明
  3. 通过DTD外部实体声明引入外部实体声明

XML外部实体攻击又是什么

XML 外部实体注入简称XXE有了XML实体,关键字SYSTEM会令XML解析器从URI中读取内容,并允许它在XML文档中被替换。因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现。 简单来说,攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件)。

XXE在php中除了靶场用到的file协议还支持那些协议呢

file:可用 file://文件地址,来读取文件
http:可以访问 HTTP(S) 网址
FTP:访问 FTP
PHP:访问各个 输入/输出 流
zlib:压缩流
data:数据
glob:查找匹配的文件格式路径
expect:处理交互式的流,可用来执行命令,但需要先安装相应插件

为什么要进行base64编码

为了防止一些特殊字符对我们产生影响

我们炮台在xxe中具体起到什么作用呢

很多时候语言解析执行了XML后并不会给你输出,我们这个是时候可以使用一个类似与于接受的平台,然后去平台查看就可以获取到数据。

如何防御XXE

  1. 使用开发语言提供的禁用外部实体的方法
  2. 过滤用户提交的XML数据

XXE的真实案例

在2018年7月4日微信SDK爆出XXE漏洞,通过该漏洞,攻击者可以获取服务器中目录结构、文件内容,如代码、各种私钥等。获取这些信息以后,攻击者便可以为所欲为。

他是由于微信支付SDK的XXE漏洞产生原因都是因为使用了DocumentBuilderFactory没有限制外部查询而导致XXE

XXE如何寻找

当同学遇到传参的地方出现了XML代码格式的东西,不妨传参一些XML代码去尝试看看传参后是否有报错,页面是否显示了实体中的东西

XXE-防御

来来来,让我们进入靶场吧!!!

搭建好是这个样子,我感觉这个用的CMS是真不错

现在把靶场逛一逛,搜集搜集有用的信息

 首先发现这是闪灵建站系统

还无意间搜到了长安大学的信息安全检测预警平台

但是是SQL注入和这次要求的XXE无关

发现了能在线留言的地方,尝试了一下,XSS没效果

好了回归正题,要看XXE漏洞,先要进行代码审计

有两个思路:

1.使用搭建网站的文件直接上工具审

2.要是靶场是试用的在线的话,那去找同CMS的源码,也是可以试试的

我这里是有源码,所以直接用seay去审

最后总算打开了,软件也是有小脾气的~

z不等不说建网站越好,代码越多

 对源代码进行代码审计

发现一个可疑的函数、全局搜索simplexml_load_string()函数,发现/api/notify.php中存在该函

 

 

基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。(这段文字是从国外技术人员的描述中翻译过来的)

从网站上查该页面是否存在

 没有报错,应该是存在着的

尝试获取服务器所在路径

使用burp进行抓包查看

强制性修改传参方式,目的是要以报错的方式把路径报出来

手动将get方法改为post方法,让服务器强制报错,获取服务器路径C:/phpStudy/scms/

  1. 因为无法正常的使用xxe输出,所以就要尝试去用没有输出的xxe攻击方法。靶场服务器上留下了1.xml,以及2.php还有3.txt
  2. 那么只需要读取文件然后引用1.xml,1.xml会将读取文件的内容发送给2.php。2.php会储存到3.txt,因此我们直接访问3.txt就能获得想要的内容了。
  3. 访问**/3.php,获得编码后的conn.php页面内容

按顺序访问http://5aeg8017.ia.aqlab.cn/1.xml 、 http://5aeg8017.ia.aqlab.cn/2.php 、 http://5aeg8017.ia.aqlab.cn/3.txt 最后可以得到base64码 进行解码可以得到数据库的账户名和密码、数据库名:xxe、teiwo!8#7ERe1DPC、scms

登录后台数据库http://etrh8207.ia.aqlab.cn/adminer.php ,获得加密的密码:e99d2e51cbefe75251f1d40821e07a32 进行解密得到密码admintestv1

1ae837a723b9586e72376a4fe69a3b54.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XXE漏洞 的相关文章

随机推荐

  • js获取元素的距离父元素、窗口的距离offsetTop,offsetHeight,clientHeight

    前言 相信很多项目中都会有这样一个小需求 PC端 移动端则是点击 鼠标移上某个菜单或者某个位置 显示一个弹出框 移开则隐藏弹出框 就是css中hover效果 这种通常做法是每个子菜单下都有一个弹框 父元素相对定位 子元素绝对定位 只需要控制
  • 14、Qt 捕捉鼠标事件

    0 需求 在鼠标进入窗口实时捕捉所在位置 以及进行的操作 1 方法 我们主要使用QWidget中的几个方法 鼠标进入 void enterEvent QEvent event 鼠标离开 void leaveEvent QEvent even
  • 管理一年,领悟一生:迷茫、洞见与成长

    领导力跟你做了多少年管理 管过多少人 没有直接的关系 你开悟了 一年就能管得井井有条 不开悟 十年也是一塌糊涂 1 引言 大家好 我是苍何 相信作为技术人的成长路线大家都有了解吧 大家普遍所了解的就是两个路线 技术管理和架构师 而成为架构师
  • ue4大气纹理

    UE4的大气纹理 在 class FAtmosphereTextures public FRenderResource 成员变量上涉及到了辐射 投射 和散射 分三个部分 首先放入一个commandlist 然后分别就各参数创建RTT 传参数
  • python 中关于推导式生成器的一些总结

    推导式 可以理解为是数据生成方式或者是处理方式 类型 列表 元组 字符串 字典 集合 外部包装的括号决定了返回值类型的 定义 列表推导式 表达式 for循环 if语句 1 对列表中的每项元素进行立方运算 变换功能 a 1 2 3 4 5 6
  • 动态规划(1)

    动态规划 Dynamic Programming 是一种具有分治思想的迭代技术 它用于求解某些复杂的不包含决策过程的最优化问题 其基本思路是将原问题分解为子问题 并保存子问题的求解结果 从而避免不必要的重复计算 动态规划的主要思想就是将复杂
  • Java类、构造方法、对象

    public class Lader 定义类 float above 成员变量 类中有效 float bottom float height float area float area 4 合法 area 4 非法 在方法体中赋值 floa
  • 11月8日 改良射线,蓝图 UE4斯坦福 学习笔记

    修改射线类型 更改了昨天的射线类型 void USInteractionComponent PrimaryInteract 射线 FHitResult FHit 碰撞体 FCollisionObjectQueryParams ObjectQ
  • 为什么TCP建立连接需要三次握手

    TCP 协议是我们几乎每天都会接触到的网络协议 绝大多数网络连接的建立都是基于 TCP 协议的 学过计算机网络或者对 TCP 协议稍有了解的人都知道 使用 TCP 协议建立连接需要经过三次握手 three way handshake 如果让
  • 生鲜电商迎巨变?美菜撤出县城,有菜被集团关停

    生鲜B2B电商是个大生意 但也是个苦生意 随着生鲜从风口摔落 对 大 的渴望逐渐让位于对 苦 的体验 据 财经 报道 知名生鲜B2B平台美菜最近密集业务调整 半年来退出数百个县城和10个中心城市 急剧向平台模式转型 疫情带来的线下餐饮行业变
  • JAVA zip 压缩包 导出

    JAVA 导出 zip压缩文件 代码如下 public void downloading String orderId List
  • SSM之一步一坑:返回JSON格式 中文乱码问号 解决方案

    在使用SSM框架写代码时 偶然间在console控制台发现一个 text plain charset ISO 8859 1 这种数据格式 如下图 当时就感觉有点问题 因为我的项目中使用UTF 8的编码格式 并且在web xml 中也采用了u
  • ubuntu安装高版本python

    ubuntu安装高版本python 以python3 7为例 安装其他版本python更改安装包即可 使用wget拉取安装包的方式 单纯命令行容易报错 1 下载python安装包并解压 wget https www python org f
  • 空值的处理

    1 取空值的时机 1 1不知道取什么值 比如学生登记表 某个学生的年龄忘记填了 1 2不能取值 比如选了课 缺考了 所以成绩表的成绩填空 1 3由于某种原因不便填写 比如一个人的手机号码不便填写 2 空值的产生 2 1没有给属性列赋值 2
  • 数据结构学习(一)数据结构基础

    文章目录 算法与数据结构学习 一 数据结构基础 1 数据结构 1 1 什么是数据结构 1 2 学习数据结构的必要性 2 算法 2 1 怎么衡量算法的好坏 2 1 1 时间复杂度 2 1 2 空间复杂度 2 2 时间复杂度的计算 2 3 常见
  • 【unity】【jit】【游戏开发】讲解ios系统不支持JIT的来龙去脉,以及unity在IOS上需要使用反射时候的替代方案

    标题有点长啊 很彪 所以我们叫彪题 咋地 东北地 你瞅啥 1 带有增高垫IL的c c 语言作为一种高级语言 是不能直接在我们的CPU上来直接运行的 需要编译成IL语言 Intermediate Language 即中间层语言 就是这么高冷
  • 《机器学习实战》第六章 Python3代码-(亲自修改测试可成功运行)

    由于Peter Harrington所著的这本 机器学习实战 中的官方代码是Python2版本的且有一些勘误 使用Python3的朋友运行起来会有很多问题 所以我将自己在学习过程中修改好的Python3版本代码分享给大家 以供大家交流学习
  • STM32 bool

    STM32中基于库V3 5的头文件中 去掉了对bool类型变量的定义 而将它放在了文件stdbool h中 d Keil v5 ARM ARMCC include stdbool h stdbool文件内容如下 stdbool h ISO
  • C++将字符串中包含指定字符串范围内的字符串全部替换

    概述 将指定字符串所在的范围之内的字符串全部替换为指定的字符串 如 源字符串 START dfh待到花开月圆时 两首相顾心相连 END dhussd2434xhuhu是别人十大海归 转换后的字符串 dfh待到花开月圆时 两首相顾心相连 dh
  • XXE漏洞

    何为XXE 简单来说 XXE就是XML外部实体注入 当允许引用外部实体时 通过构造恶意内容 就可能导致任意文件读取 系统命令执行 内网端口探测 攻击内网网站等危害 典型攻击手法 XML又是什么呢 XML用于标记电子文件使其具有结构性的标记语