GHCTF-WEB-EZ ReadFile实战:从XXE到敏感文件读取的完整路径解析

GHCTF 2025 web 萌新初探wp GHCTF WP 阅读详情

GHCTF-WEB-EZ ReadFile实战:从XXE到敏感文件读取的完整路径解析

最近在复盘一些CTF的Web题目,发现很多初学者在面对文件读取类漏洞时,思路容易卡在“读到了/etc/passwd,然后呢?”这一步。GHCTF中的这道“EZ ReadFile”就是一个非常典型的案例,它表面上是一个简单的XXE(XML外部实体注入)漏洞,但真正的挑战在于如何利用这个初始的“读文件”能力,像剥洋葱一样层层深入,最终在复杂的容器化环境中定位到那个被精心隐藏的flag。这过程远比单纯执行一个payload要曲折,也更贴近真实渗透测试中“信息收集-线索关联-路径突破”的实战逻辑。今天,我们就抛开官方预期解,聚焦于这条更通用、更锻炼基本功的“敏感信息读取”路径,完整拆解每一步的思考与操作。

1. 漏洞入口与初步信息收集

题目通常会给一个简单的Web界面,可能是一个文件上传点、一个数据提交表单,或者像本题一样,直接给出部分源代码。第一步永远是代码审计。即使代码很短,也要逐行分析其逻辑。

假设我们审计发现,后端处理逻辑大致如下:

<?php
if (isset($_POST['a']) && isset($_POST['b'])) {
    if ($_POST['a'] !== $_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
        $file = $_GET['file'];
        include($file);
    } else {
        echo "条件不满足";
    }
}
?>

这段代码揭示了两个关键点:

  1. 漏洞触发条件:需要传递两个不同的参数 a 和 b,但它们的MD5值必须严格相等(===)。这是一个典型的MD5强碰撞挑战。
  2. 漏洞本身:在条件满足后,程序会通过 include() 函数包含 file 参数指定的文件。这里存在**本地文件包含(LFI)**漏洞,如果配合特定配置(如allow_url_include=On),也可能演变为远程文件包含(RFI)。

提示:MD5强碰撞的绕过通常不是考察密码学知识,而是利用已知的“魔术”字符串。在CTF中,直接搜索现成的payload是最高效的做法。

构造请求并成功触发漏洞后,我们获得了第一个关键能力:任意文件读取。此时,不要急于去寻找flag,而应系统性地收集服务器环境信息。一个结构化的信息收集清单能帮你避免遗漏。

初期关键文件读取清单:

文件路径预期获取的信息目的与分析
/etc/passwd系统用户列表确认操作系统类型(Linux),了解现有用户。
/proc/self/environ当前进程的环境变量可能包含Web路径、数据库密码等关键配置。
/proc/self/cmdline启动当前进程的命令确定Web服务器软件(如apache2, nginx)。
/proc/version内核版本信息确定系统具体版本,为后续寻找系统漏洞做准备。
/etc/hostname, /etc/issue主机名、系统发行版信息进一步确认系统环境。
Web应用配置文件(如config.php, .env)数据库连接字符串、API密钥尝试通过路径穿越(../../../)读取Web目录下的配置文件。

通过读取 /proc/self/cmdline,我们很可能看到 apache2,从而确定服务器类型。读取 /proc/version 则能确认是Ubuntu还是CentOS等具体发行版。这些信息构成了我们对目标环境的基础画像。

2. 常规路径受阻与思维转换

在信息收集之后,很自然地会尝试直接读取常见的flag位置,例如 /flag、/root/flag.txt、/home/*/flag 等。但在这道题目中,这些尝试大概率会失败。

http://target.com/?file=../../../flag

返回的可能是“文件不存在”或空白。这时,新手容易陷入迷茫。关键在于转换思维:当直接目标不可达时,就去寻找关于目标的“线索”。在CTF和真实渗透中,flag或关键数据很少赤裸裸地放在那里,它们通常被重命名、隐藏,或者其位置被记录在某个配置或日志文件中。

我们需要从已读到的敏感文件中寻找“线索”。例如,/etc/passwd 显示了用户,那么flag是否在某个用户的家目录中?/proc/self/environ 中是否包含了项目的路径?如果都没有,那么一个更重要的方向出现了:应用日志。

对于Apache服务器,其访问日志和错误日志是信息宝库:

  • /var/log/apache2/access.log:记录所有HTTP请求,可能包含管理员的访问记录、测试参数等。
  • /var/log/apache2/error.log:记录错误信息,可能暴露文件路径、数据库错误,甚至在某些配置下,我们可以通过User-Agent等方式污染日志,再包含日志文件来实现代码执行。

尝试读取这些日志文件:

# 尝试读取Apache日志
../../../var/log/apache2/access.log
../../../var/log/apache2/error.log

然而,我们可能会发现这些文件不存在。这引出了下一个关键发现:目标可能运行在容器(Docker)内。

3. 容器环境下的路径探索

在 /proc 文件系统下,有几个文件能帮助我们确认容器环境并发现突破点。

  • /proc/self/mounts 或 /proc/1/mounts:这个文件列出了系统所有的挂载点。在Docker容器中,你会看到很多来自宿主机(host)的卷挂载,或者典型的OverlayFS挂载信息。仔细浏览,你可能会发现宿主机的路径被挂载到了容器内的某个位置。

    overlay / overlay rw,relatime,lowerdir=... 0 0
    /dev/sda1 /var/lib/docker/overlay2/xxxx/merged ext4 rw,relatime ...
    

    类似这样的行暗示了容器文件系统的结构。/var/lib/docker/overlay2/ 是Docker存储镜像层和容器可写层(diff)的典型位置。

  • /proc/self/cwd:这是一个符号链接,指向进程的当前工作目录。通过 readlink 命令或直接读取其链接目标(在某些读取方式下可能显示),可以知道应用在容器内的根路径。

  • /proc/self/root:指向进程的根目录。在容器中,这通常是容器内的 /。

当意识到环境是容器后,我们的文件读取策略需要调整。容器内的文件系统是独立的,许多宿主机上的绝对路径(如 /var/log/apache2)在容器内可能不存在,或者路径完全不同。此时,我们需要寻找容器构建或启动时留下的“痕迹”。

在Docker生态中,有两个文件至关重要:

  1. Dockerfile:构建镜像的蓝图,但通常不会留在运行中的容器里。
  2. docker-compose.yml:定义服务、网络、卷的编排文件。它有时会被复制到容器中,特别是当开发图方便时。
  3. docker-entrypoint.sh 或 entrypoint.sh:容器的启动脚本。这个文件在容器内存在的概率极高,它包含了容器启动后要执行的命令,例如初始化数据库、创建用户、设置权限——也包括可能创建flag文件的命令。

那么,如何找到这些文件?它们可能位于:

  • 容器根目录 /
  • /app 或 /var/www/html 的上级目录
  • /usr/local/bin/ 等常用脚本目录

由于路径不确定,我们需要结合“路径穿越”和“字典爆破”的方法。我们可以编写一个简单的Python脚本进行尝试。

import requests

base_url = "http://target.com/"
base_payload = "?file="

# 可能的文件名列表
file_list = [
    "docker-compose.yml",
    "docker-entrypoint.sh",
    "entrypoint.sh",
    "Dockerfile",
    "start.sh",
    "init.sh"
]

# 可能的路径深度(从当前目录向上穿越)
for depth in range(0, 6): # 尝试0到5层 ../
    path_prefix = "../" * depth
    for filename in file_list:
        test_path = path_prefix + filename
        # 构造完整的漏洞利用请求,这里需要包含满足MD5碰撞条件的a和b参数
        # 为简洁,省略具体请求构造,假设我们已经有了一个可以执行文件读取的函数 `do_read`
        content = do_read(test_path)
        if content and "error" not in content.lower() and len(content) > 10:
            print(f"[+] Found: {test_path}")
            print(content[:500]) # 打印前500字符预览
            break

这个脚本会尝试在不同层级目录下寻找关键的Docker相关文件。运气好的话,我们会在根目录(depth=0)或上一层(depth=1)找到 docker-entrypoint.sh。

4. 从启动脚本中定位最终flag

当我们成功读取到 docker-entrypoint.sh 时,就打开了最终的大门。仔细审查这个脚本的每一行。

一个典型的 docker-entrypoint.sh 可能长这样:

#!/bin/bash
set -e

# 初始化数据库等操作
# ...

# 创建flag文件!关键行!
echo $FLAG > /some/very/obscure/path/flag_name

# 启动主进程
exec "$@"

或者,flag可能来自环境变量:

if [ -n "$INSERT_FLAG" ]; then
    echo $INSERT_FLAG > /f1wlxekj1lwjek1lkejzs1lwje1lwesjk1wldejlk1wcejl1kwjelk1wjcle1jklwecj1lkwcjel1kwjel1cwjl1jwlkew1jclkej1wlkcj1lkwej1lkcwjellag
fi

看!这就是我们梦寐以求的线索! 脚本明确指出了flag被写入的完整路径和文件名。在这个例子中,文件名是一串毫无规律的随机字符串,位于根目录。如果没有读到这个脚本,靠爆破猜到这个名字几乎是不可能的。

现在,我们只需要用已经掌握的文件读取漏洞,去读取这个指定路径的文件即可:

http://target.com/?file=../../../f1wlxekj1lwjek1lkejzs1lwje1lwesjk1wldejlk1wcejl1kwjelk1wjcle1jklwecj1lkwcjel1kwjel1cwjl1jwlkew1jclkej1wlkcj1lkwej1lkcwjellag

至此,flag便唾手可得。这条路径的核心逻辑是:利用初始漏洞建立信息读取能力 -> 系统化收集环境信息 -> 通过环境特征(容器)调整搜索方向 -> 定位关键元文件(启动脚本) -> 从元文件中发现最终目标位置。

整个流程就像侦探破案,每一步的发现都为下一步提供了方向。它不依赖于某个特定的、高难度的RCE漏洞,而是扎实地运用了渗透测试中最基础也最重要的能力:信息收集与逻辑推理。掌握这种思路,即使在未来遇到更复杂的题目或真实环境,你也能有一条清晰的路径可循,而不是在尝试几个常见payload失败后就束手无策。

GHCTF-WEB-EZ ReadFile 详解(内含XXE条件下敏感信息的获取思路&失败的CVE-2024-2961脚本漏洞利用) 本题更重要的是在看完本WP后,获得一定的指纹收集、只能XXE情况下的敏感信息获取思路和如何想到从XXE去提升到RCE的逻辑。至于CVE-2024-2961漏洞的脚本改写,需要一定的python代码理解能力与修改能力,新人慎入、慎入啊…… 阅读详情

相关推荐

GHCTF-WEB-EZ ReadFile 实战解析(从XXE到敏感信息泄露与CVE-2024-2961漏洞利用的曲折探索)

本文详细解析了GHCTF-WEB-EZ ReadFile题目的实战过程。首先通过MD5强碰撞绕过实现任意文件读取,进而利用该漏洞进行信息收集,发现目标运行于Docker容器环境,最终通过读取容器启动脚本找到flag。文章还探讨了利用CVE-2024-2961漏洞将文件包含升级为代码执行的预期解法,并分享了自动化工具辅助渗透测试的实战思路。

weixin_28622215的博客 99

[GHCTF 2025]ez_readfile

题目:看起来挺简单,网上搜了个md5绕过就绕成功了,但是我始终找不到flag在哪里最后实在受不了看了wp,我只能说给我八百年我也找不到。

2401_86190146的博客 867

【多媒体处理】基于C++与Qt的短视频智能裁剪系统:FFmpeg驱动的横竖屏转换与预览解决方案 项目介绍 基于C++、Qt与FFmpeg的短视频横竖屏智能裁剪与预览系统设计与实现(含模型描述及部分示例

内容概要:本文介绍了一个基于C++、Qt与FFmpeg的短视频横竖屏智能裁剪与预览系统的设计与实现。系统通过构建完整的视频处理闭环,实现了从视频读取、解码、内容分析、智能裁剪到实时预览和重新编码的全流程处理。核心架构分为五个层次:媒体输入与标准化层利用FFmpeg完成视频解复用与解码,并统一帧格式;视觉重要区域分析层通过显著性检测、边缘强度、颜色差异和运动信息识别画面中的主体区域;时序跟踪与轨迹稳定层采用卡尔曼滤波或指数平滑技术对主体位置进行连续优化,确保裁剪窗口在时间维度上的稳定性;比例约束与裁剪决策层根据目标宽高比和主体位置求解最优裁剪框,兼顾内容保留与画面合规;预览、导出与任务控制层基于Qt实现双画面同步预览、参数配置和导出控制,保障交互流畅性。项目还提供了模拟数据生成功能,可批量生成五万条包含分辨率、主体位置、运动速度、覆盖率等字段的结构化样本,支持算法验证与模型训练。; 适合人群:具备C++编程基础,熟悉Qt图形界面开发和FFmpeg多媒体处理技术的中高级研发人员,尤其适用于从事视频处理、智能编辑、自动化内容生产等相关领域的开发者或科研人员。; 使用场景及目标:①解决短视频在横竖屏转换过程中因固定裁剪导致的主体丢失问题,提升内容保留能力;②实现高效稳定的智能裁剪算法原型开发与性能测试;③构建可扩展的视频处理系统框架,支持后续集成人脸检测、人体识别或深度学习模型;④为算法优化提供标准化数据集,支持回归测试与质量评估。; 阅读建议:此资源不仅包含完整的技术架构设计和核心代码示例,还强调工程实践中对资源管理、线程安全、性能优化和异常处理的关注。建议读者结合代码实现深入理解各模块间的协作机制,并尝试替换分析器或调整平滑策略以验证不同算法效果。同时推荐运行数据生成模块,用于训练模型或开展量化对比实验。

GHCTF2025--Web

替换为空, 使用了bottle库, 查找一些资料, 发现存在ssti模板注入, 本地搭建环境, 把waf去掉, 可以发现使用。前面一直卡在这, 没办法执行一些函数操作啥的, 就没管了, 后面wp出来之后才知道这是Sqlite注⼊ , 怪我见识短浅了。有点奇怪, 我自己本地试了一下这个cookie是可以被反序列化然后执行的, 但是靶机上一直没成功,可能没有权限还是干嘛。可以执行代码, 但是题目是没有回显的, 所以需要反弹shell, 连上自己的vps。php反序列化, 看似代码很多, 其实大都是没有用的。

pwfortune的博客 3047

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?

科技中介服务机构如何通过智能体技术提升服务效率与专业度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

实战分享:如何利用XXE漏洞挖掘敏感信息(附GHCTF-WEB-EZ ReadFile解题思路)

本文从实战角度深度剖析了XXE漏洞的利用过程,重点分享了如何通过系统信息收集、Web应用深度挖掘及路径爆破等策略,将文件读取能力转化为敏感信息获取与权限突破。文章结合GHCTF题目实例,提供了从漏洞发现到目标达成的系统性思维路径与操作指南。

salt9的博客 732

产业园区如何高效对接企业技术需求并推动成果转化?观点作者:科易网-国家科技成果转化(厦门)示范基地.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

光伏板太阳能板尘土灰尘脏污检测数据集VOC+YOLO格式1006张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

政府科技管理者在推动科技成果转化时,如何高效整合区域创新要素资源?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

无功优化电网故障下分布式能源系统多目标优化[并网转换器(GCC)](Matlab代码&Simulink实现)

内容概要:本文详细介绍了基于Plecs或Simulink平台构建的全桥LLC谐振变换器仿真模型,重点研究了变频控制与移相混合控制策略下的闭环系统设计与参数优化方法。内容涵盖全桥LLC谐振变换器的工作原理、小信号建模技术(如扩展描述函数EDF)、PID控制器参数整定过程以及软开关实现条件,并通过仿真验证了系统在稳态输出性能、动态响应特性(如启动过程与负载阶跃)和频率调节平滑性等方面的优良表现。同时提供了完整的仿真模型、参数设计报告及说明文档,有助于读者复现结果并深入理解控制机制与建模细节。; 适合人群:具备电力电子、自动控制等相关专业知识背景,从事高效率电源设计、新能源变换系统研发的工程师及高等院校电力电子与电力传动方向的研究生。; 使用场景及目标:①掌握LLC谐振变换器的小信号建模与闭环控制系统设计方法;②学习并应用变频与移相结合控制策略提升电源转换效率;③支撑科研项目中的电力电子系统仿真验证或学位论文课题开发;④复现高水平学术论文中关于谐振变换器的控制方案与性能分析。; 阅读建议:建议结合所提供的仿真模型与参数设计资料,边运行仿真边对照文章内容理解控制逻辑与建模过程,特别关注小信号模型的建立方法与PID控制器参数整定环节,以增强对实际工程问题的分析与设计能力。

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文围绕两相交错并联Boost电路的Simulink仿真模型展开,旨在通过仿真手段深入研究该电路在电力电子系统中的工作特性与性能优势。文章系统阐述了两相交错并联Boost电路的拓扑结构、工作原理及其在提升系统效率、减小输入电流纹波、均衡电流分配方面的显著优势。通过构建完整的Simulink仿真模型,对电路在不同负载与输入条件下的动态响应、稳态性能及控制策略进行了全面分析与验证。重点设计并实现了电压电流双闭环PI控制策略,详细论述了PI控制器的参数整定方法、占空比调节机制以及交错并联所带来的均流效果。仿真结果表明,所构建的模型能够有效提升系统的动态响应速度与稳定性,显著降低输入电流的谐波含量与纹波幅值,验证了交错并联技术在中高功率DC-DC变换应用中的优越性。; 适合人群:具备电力电子技术基础、熟悉Simulink仿真的电气工程及相关专业本科生、研究生,以及从事电源系统设计、新能源变换器研发的工程技术人员。; 使用场景及目标:①学习和掌握交错并联Boost电路的拓扑结构、工作原理与建模方法;②开展电力电子变换器的仿真分析、控制器设计与参数优化;③为实际工程项目中的高性能DC-DC变换器设计,特别是追求低输入纹波和高功率密度的应用场景,提供理论支撑与仿真验证依据。; 阅读建议:建议读者结合Simulink模型文件同步操作,深入理解主电路各模块、双闭环控制结构及PWM调制环节的参数设置与逻辑实现,重点关注PI控制器的参数整定过程与交错控制的时序配合,并可通过调整输入电压、负载大小及控制参数进行对比实验,以深化对交错并联技术优势及其控制策略的理解。

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

5分钟搞定!用OpenCV实现全景图像柱面展开的保姆级教程(附完整代码)

本文提供了一份使用OpenCV实现全景图像柱面展开的详细教程。通过清晰的数学原理讲解和分步代码演示,指导读者快速掌握从等距柱状投影全景图到平面展开图的核心转换方法,并涵盖性能优化、参数调整及透视视图扩展等实用技巧,适合图像处理爱好者和开发者实践。

sony5的博客 574
上一篇: Ansible避坑指南:这些反模式操作90%的新手都踩过
下一篇: 工业相机SDK二次开发实战:Halcon与C++/C#图像处理全解析
lambda
博客等级 码龄23年 49粉丝 1303原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值