SQL注入的原理分析

四、注入(1)SQL注入原理分析 一、本质 用户输入的数据当做代码执行 条件: 用户能控制输入 原本程序要执行的代码,拼接了用户输入的数据后执行 应用场景:任何和数据库交互的传参 二、分析 1、判断 (1)and and 1=1 正确 and 1=2 错误 有几率有SQL注入 (2)加减乘除符号 但输入id=2-1,返回id=1的页面的时候,类似,加减乘除运算生效,一定存在SQL注入漏洞 ps:url栏里内容经过url编码,会把空格编码成+,所以要输入+,则需要转编码为%2b,在站长工具URL编码中转换 (.. 阅读详情

一、SQL注入本质

注入攻击的本质,是把用户输入的数据当做代码执行。

这里有两个关键条件:

第一个是用户能够控制输入

第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行

显错注入靶场的做法:

判断注入点

最古老的方法: and 1=1 页面正常 and 1=2 页面不正常

最简单的方法: 页面后面加',看是否报错 ' and 1=1# ('把前面的语句给闭合,#把后面的语句给省略掉,只留中间的语句执行)

的方法: 如果是数字型传参,可以尝试-1

例如: http://www.xxx.com/new.php?id=1 页面显示id=1的新闻 http://www.xxx.com/new.php?id=2-1 页面显示id=1的新闻

and 1=1 and 1=2 被拦截的可能性太高了可以尝试 and -1=-1 and -1=-2 and 1>0 or 1=1 或者直接 or sleep(5)

二、分析显错注入

显错注入-联合查询(Mysql数据库)的基本流程

新知识点: 通过系统自带库查询数据

Mysql在5.0以上版本加入了 information_schema 这个系统自带库 其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等

information_schema.tables 存放表名和库名的对应

information_schema.columns 存放字段名和表名的对应

[注: information_schema.tables 实际上是选中information_schema库中的tables表]

可以通过查询数据来确定系统自带表

(在前提已经知道输出点是2的情况下) id=1.1 union select 1,table_name from information_schema.tables where table_schema=maoshe/database() 就能得到表,在后面加limit 1,1 2,1 3,1 4,1最终找到admin表

然后找字段,select 1,column_name from information_schema.columns where table_name=’admin’找到字段id.在后面加上limit1,1 2,1,3,1等找到password,username等字段,

解析:and 1=1 正常 and1=2不正常,说明添加的语句被执行了,说明存在sql注入

或者在id后输入id=2-1后显示的是id=1的内容,也说明存在注入,因为数据库进行了运算

有时候1=1容易被拦截,可以变成-1=-1,1>100,也可以用or,但or要求前后只要有一个正确就行,所以要把前面的id改成不存在的,如id=1.1 or 1=1显示正常说明存在sql注入

或者id=1.1 or sleep(5)

但在news表里是找不到想要的管理员密码的,所以需要用到联合查询:将两个语句查询到的数据输出在一起。但联合查询的前提要求是字段数必须相同,这要求知道当前表的字段数,需要用到order by 排序 ,如果只有四个字段,order by 5是没法排序的,会报错就是会显示一些不一样的,

Select 1,2 union select 4,5 则会先输出 1 2 再输出4 5 。这是因为联合查询默认将前面语句得出的结果放在前面输出,

Union select 1,2 表示会输出 数字1,2,但页面并没显示1,2

    url栏中+的意义是空格,所以不能1+1来用,用+的话需要先用url编码转化。
    在判断可以注入之后,就开始判断表的字段数了,通过查看源代码可以得知"SELECT * FROM `news` WHERE `id`=".$_REQUEST["id"].";")
    可以得知当前是在news表中查询,在原网址后输入 order by 1没反应,order by 2 没反应 order by 3 时页面出现问题,这说明news表中的字段数为2
    Union 联和语句,前后sql语句列数必须相同,这样就能知道后面的语句可以用几个字段,于是在原网址后输入 union select 1,2 页面没问题,加个,3就变了,实际上,数据库输出的都是有意义的, 
    在实际中,联合查询前面的语句显示在第一行,后面的语句显示在第二行,而sql语句一般只显示第一行,所以如何显示联合查询的后面语句呢?第一个方法是,让前面的语句出错,在前面的语句后加入and 1 = 2,或者把前面的id=1 改成  id =1.111 因为id都是正整数 这样网址页面就只会显示后面的语句了。第二种方法是,通过limit排序,limit是mysql特有语句,limit 0,1 [从第一行数据取一个] limit 1,1 [从第二行数据取一个] ,在后面语句加入limit 1,2就行
    这样就能找到2为输出点 ….and 1 = 2 union select 1,2 from admin 然后修改为….and 1 = 2 union select 1,passwordfrom admin这样页面就能显示密码。但如果不知道输出点是2,变成…and 1 = 2 union select password,2 from admin 是不会出现密码的、
    接着,在查询数据库时,要知道库名,表名,字段名,先查询库名 ….id = 1 union select 1,database() limit 1,1
    其中database() 是用来查询当前库名,页面显示库名为maoshe 接下来是表名,mysql5.0以上版本会自带系统自带库 information_schema 这里面储存的有两张表。一个是tables表,里面存着所有表和库的关系,语句为select*from information_schema.tables where table_schema='maoshe' 一般数据库里不只两个字段,但  此次只能有两个字段,因此需要只输出Table表 …id= 1 union select 1,table_name from information_schema.tables where table_schema='maoshe' limit 1,1
    显示为 admin表。把limit 1.1 改成 limit 2,1 输出为dirs表 limit 3,1 输出为 news 就这样一行一行输出 如果嫌麻烦 可以用group_concat() 作用是将多行数据合并一行输出,以逗号分隔。id=9.99 union select 1,group_concat()table_name from information_schema.tables where table_schema='maoshe' 就可以全部输出,缺陷是有七八十条数据,长度限制,禁用等等
    接下来是字段名,有一个表叫columns.里面都是字段名,…id=9.99 union select 1,column _name from information_schema.columns where table_schema='maoshe' and table_name='admin' 其中admin一般代表密码,输出显示为id 然后在后面加 limit 1,1 出现username limit 2,1 出现 password 由此可以得知至少有三个字段,id(没啥用),username(用户名),password(密码) 这样的话 …id=9.99 union select 1,password  from admin 即可显示密码

三、显错注入的做法

判断当前页面字段总数

• and 1=1 order by 1,2,3,4,5……

判断显示位

• and 1=2 union select 1,2,3,4,5,6,7……

查当前数据库

• and 1=2 union select 1,2,database()

查表名

• and 1=2 union select 1,2,table_name from information_schema.tables where TABLE_SCHEMA=数据库名 limit 0,1

查列名

• and 1=2 Union select 1,2,columns_name from information_schema.COLUMNS where TABLE_NAME=表名 limit 0,1

查字段内容

• and 1=2 union select 1,用户名段,密码段 from 表名 limit 0,1

• 介绍一个函数:GROUP_CONCAT 将多行数据进行整合在一行输出

Limit 0,1 指的是从第一行数据取1行

Mysql低于5.0就只能爆破了

1.sql注入本质是什么

把用户输入当做代码执行

2.sql注入的条件

用户可控输入和原本程序要执行代码,拼接用户输入且当作SQL语句去执行

3.order by的作用及含义

order by 用于判断显示位,order by 原有的作用是对字段进行一个排序,在sql注入中用order by 来判断排序,order by 1就是对一个字段进行排序,如果一共四个字段,你order by 5 数据库不知道怎么排序,于是乎就错误了无返回值

4.union select如何发挥作用

union为联合查询,a联合b进行了查询,为查询了前面的sql语句(原有的)后再进行后面的sq查询(我们添加的),但两张表联合查询的字段数必须相同。

5.输出位是什么

SQL查询出来的数据不一定全部会输出,页面上只会输出几个字段的信息,那几个会输出的字段就是输出位

6.information_schema是什么

information_schema是mysql的系统自带表,用于查询数据,在mysql5.0以上版本中存在

7.加单引号和加 and 1=2有什么区别

有区别,单引号是为了闭合语句,而and 1=2是为了让union前面的语句无查询结果无输出,然后直接输出拼接进去union后面的那个语句的查询结果

8.and 是什么意思

and 为和的意思,一个语句中,当前一个正确,后一个错误时,如果是and连接整个语句返回是False

9.or是什么意思

Or 为和的意思,一个语句中,当前一个正确,后一个错误时,如果是or连接整个语句返回是True

10.and 和 or 选择使用有什么讲究?

And 语句执行时,如果and 前的语句返回False,那么and后面的语句根本不执行

11.除了单引号外还有其他的符号可以闭合吗?

实际上还是要看源码,常见的是单引号和双引号还有括号

12.limit的作用

limit 在注入中用于排序然后输出,limit a,b a代表了从哪个位置(从0开始) b代表从那位开始显示几条数据

13.可以查讯多个字段内容吗

可以,可以使用语句Group_concat()函数进行输出

14.%23有什么作用

%23编码为#,用于注释后面的语句,防止SQL注入点后原本的SQL语句对SQL注入进行干扰

15.报错注入的原理

利用sql注入拼接sql语句,将报错信息输出时同时将我们想要的信息输出

16.闭合是什么

在sql查询中,代码比较严谨,括号和引号都得成双成对,引号内的默认是字符串不会当作SQL语句执行,所以必须闭合然后才能注入,当然有些SQL语句直接拼接,也就不用什么闭合了

17.SQL注入有数据库限制吗?

没有,常见的数据库都可以

18.SQL注入有动态脚本语言限制吗?

没有限制

19.SQL注入如果没系统自带表怎么办

只能通过猜,不断的尝试,一般而言数据库的表也不会乱起名字

20.系统自带库管理员不会修改吗?

一般而言并不会

21.union all 和 union 区别

如果输出的数据有相同的,Union只会输出一次,而union all都会输出

22.为什么用and 1=1正常 and 1=2报错来判断是否存在SQL注入

因为如果存在SQL注入,那么and就是和的意思,1=1是一个恒等式,然后因为原本能够查出数据,那么两个真就是True,但是1=2肯定是不可能的,这里就会返回一个False,然后因为和必须两个真才返回True,所以这里拼接就不成立返回False.

诚邀有兴趣的师傅一起来加入网安大家庭:safe2082

VirtualBox虚拟机拖放文件总失败?手把手教你配置双向拖放与共享文件夹(Ubuntu版) 本文详细指导如何在VirtualBox的Ubuntu虚拟机中配置高效的数据交换方案。核心是安装VirtualBox Guest Additions,并在此基础上开启双向拖放与共享粘贴板功能,同时建立稳定的共享文件夹,彻底解决主机与虚拟机间文件传输失败的问题,构建无缝的跨系统工作环境。 阅读详情

相关推荐

【ESP32 S3 开发】基于I2S协议驱动INMP441数字麦克风 实现语音采集

注意INMP441的 L/R接地之后才稳定输出数据 否则一直都是0WAV格式说明这里主要是想说wav文件重要的就是生成一个wavhead来标识它是一个wave文件,wave文件的data chunk 中的data部分还是PCM编码格式的数据,直接从I2S读进去就可以,不需要压缩。wav文件的头一般由4个chunk组成。 以16bit深度为例,代码如下。其他深度可以根据注释自行计算。 I2S -> DAC i2s_read()函数,向flash中划分的一个buff当中读入byte数组。以16bit深度为例,一

m0_43395703的博客 1万+

SQL注入原理

一、SQL注入原理 SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。 它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图的SQL语句。 产生原因: 产生原因是程序没有细致过滤用户输入的数据,从而导致非法数据进入系统。 二、相关技术原理: SQL注入可以分为平台层注入和代码注入。前者是由不安全...

qq_44754481的博客 1万+

Isaac Gym摄像头数据获取全攻略:从CPU到GPU,教你实时显示RGB与深度图

本文详细介绍了在Isaac Gym中获取摄像头数据的两种高效方案:CPU模式与GPU张量模式。通过实战代码示例,展示了从摄像头配置、数据获取到实时可视化RGB与深度图的全流程,帮助开发者优化机器人仿真与计算机视觉应用的性能。特别强调了GPU模式下的零拷贝访问与张量运算优势,适用于需要低延迟处理的场景。

weixin_29056701的博客 388

Sql注入详解(原理篇)

SQL 注入漏洞非常复杂,区分各种数据库类型,提交方法,数据类型等注入,同样此类漏洞是WEB安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。SQL 注入就是指 Web 应用程序对用户输入的数据合法性没有过滤或者是判断,攻击者可以在Web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

Naive的博客 2万+

5V转±12V无变压器双boost电路

最近有个新项目,需要±10V范围的模拟量输出(非隔离),对于5V以下供电的控制板而言单端输出绝对没问题,可现在需要有正负输出,是少不了正负电源的,因此准备设计一个5V转±12V的电源,然后选择一个双向供电的运放,来实现单端模拟量信号向双向模拟量信号转换。 本文就来分享一下5V转±12V电源的设计。对于有类似双向电源需求的场合,大多使用变压器通过增加多个绕组来实现,而对于体积空间有要求的场合来讲,变压器实在是太大了,另外对于一些成熟的项目,变压器如果是已经设计好的,再额外增加绕组需要重新设计,费时费力。于是,

qq_30388337的博客 1万+

IDEA集成selenium自动化测试(Java+Selenuim+testNG+Maven)

文章目录写在前面01 | 新建Maven项目02 | idea集成Selenium03 | 写在前面 因为软件测试的需求和博主比较经常使用Java,于是,想在Idea中集成selenuim,用Java编写测试代码,因此有了这篇文章来记录一下过程。 资源指路: java使用selenium实现模拟浏览器操作API大全 模拟登录 TestNG入门教程 感谢上面博客的大佬。 01 | 新建Maven项目 不使用骨架创建,直接点击左侧Maven,然后一路next即可。 02 | idea集成Sele

aLinxi的博客 8279

sql注入攻击详解(原理理解)

前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误。其实sql注入漏洞就是一个。作为一个菜鸟小程序员,我对sql注入的东西了解的也不深入,所以抽出时间专门学习了一下。现在把学习成果分享给大家,希望可以帮助大家学习。下面我们就来看一下。 一、什么是sql注入呢?    

~ Caesar's wish书屋 ~ 3万+

SAP(ERP)工艺路线(Routing)业务视角解析

工艺路线(Routing)也是PP模块,即生产制造模块中最重要核心主数据之一,也是ERP(SAP)顾问,必需从业务与系统深入掌握的重要主数据,它也是整个生产计划与生产流程的重要基础。因为执行步骤只是操作层面的认知,业务顾问需要从业务本质上去理解它,要真正从业务视角理解工艺路线的业务价值,而不仅仅是操作层面的认知。因此将工艺路线理解为“有以上业务本质的理解,然后进到SAP系统中,就容易理解工艺路线(Routing)的每一组成部分结构与功能了,本质就是理解制造企业如何将设计意图转化为物理现实的编码规则。

m0_45197968的博客 1503

sql注入攻击的原理(非常详细),零基础入门到精通,看这一篇就够了

sql注入攻击的原理(非常详细),零基础入门到精通,看这一篇就够了

分享Python知识 5619

Ubuntu虚拟机IP卡在127.0.0.1?别慌,试试这条万能命令 `sudo dhclient`

本文详细解析了Ubuntu虚拟机IP卡在127.0.0.1的常见原因及解决方案,重点介绍了`sudo dhclient`命令的使用方法及其变体,帮助用户快速恢复网络连接。同时提供了网络诊断工具和预防措施,适用于开发者和系统管理员应对网络故障。

weixin_29251131的博客 285

Genesis物理引擎实战指南:轻量级确定性刚体仿真核心

刚体物理仿真作为机器人控制、嵌入式运动学验证和确定性游戏开发的基础技术,其核心在于数值稳定性、跨平台可复现性与约束求解精度。本文围绕线性互补问题(LCP)求解、半隐式欧拉积分和零依赖C++实现三大关键技术展开,解析如何在无GUI、低算力环境下构建可单步调试、帧级可控的确定性仿真系统。重点覆盖碰撞检测数学建模、关节局部坐标系绑定、质量-惯性张量一致性校验等工程落地关键点,适用于STM32、树莓派及教育实验场景。内容深度结合Genesis Physics Engine的源码实践,直击‘穿模’‘NaN’‘关节发软

ciya3282的博客 1591

sql注入攻击原理

应用程序在未正确过滤或者验证用户输入数据的情况下,将恶意的 SQL 查询与应用程序原本的查询逻辑组合在一起,并发送到后端数据库服务器执行。SQL 注入攻击是一种常见的网络安全攻击,利用了应用程序对用户输入数据的不正确处理,导致恶意用户能够在 SQL 查询中插入恶意的 SQL 代码,以执行未经授权的数据库操作。总是为真,因此查询语句的条件总是为真,无论密码是什么,都将返回一个用户记录,从而绕过了身份验证,使攻击者成功登录到系统中。:定期监控应用程序的数据库活动,并记录潜在的 SQL 注入攻击尝试。

完颜振江 2613

基于FPGA的以太网设计(1)----大白话解释什么是以太网

基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网

孤独的单刀 3872

mybatis-plus SQL注入原理分析

前言 掌握 spring mybatis 知识,再来看本文。 我这里有一个EmployeeMapper接口,根据id进行删除,打上断点,一起来探索吧! 从断点里面可以看到 com.baomidou.mybatisplus.core.override.MybatisMapperProxy@650c405c 是Employeeapper接口的代理对象。 我们用idea双击shift 键盘进行搜索:MybatisMapperProxy 映入眼帘的第一句话是: 从 {@link MapperProxy}

大佬味的小男孩的博客https://www.yuque.com/dalaoweidexiaonanhai 464

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SQL注入:floor报错注入的形成原理分析

进行SQL注入时,相信很多同学在遇到前端不回显时,会尝试SQL报错注入。常见的报错注入有:floor报错注入、updatexml报错注入和extractvalue报错注入等,不同于后两者利用Xpath解析错误,floor报错注入的成因更加复杂。本文将详细地分析floor报错注入的成因,希望能对您有所帮助。

Neonline254的博客 1952

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SQL注入原理分析

order by的作用及含义order by 用于判断显示位,order by 原有的作用是对字段进行一个排序,在sql注入中用order by 来判断排序,order by 1就是对一个字段进行排序,如果一共四个字段,你order by 5 数据库不知道怎么排序,就错误了无返回值。union select如何发挥作用union为联合查询,a联合b进行了查询,为查询了前面的sql语句(原有的)后再进行后面的sq查询(我们添加的),但两张表联合查询的字段数必须相同。输出位是什么。

2401_84466359的博客 1443

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

注入全方位利用-SQL注入的原理分析

注入全方位利用-SQL注入的原理分析 一、SQL注入本质 谈到SQL注入前我们先谈谈什么是注入 注入攻击的本质,是把用户输入的数据当做代码执行。 这里有两个关键条件: 第一个是用户能够控制输入 第二个是原本程序要执行的代码,拼接了用户输入的数据 那什么是SQL注入,就是针对SQL语句的注入,也可以理解为用户输入的数据当做SQL语句的代码执行了 SQL注入是1998年一名...

weixin_30469895的博客 106

SQL二次注入原理分析

二次注入在测试的时候比较少见,或者说很难被测出来,因为测的时候首先要去找注入的位置,其次是去判断第一次执行的SQL语句,然后还要去判断第二次进行调用的 SQL 语句。而关键问题就出在第二次的调用上面。其中 addslashes 函数中的数据是用户插入的数据,先不谈这个程序的逻辑有点愚蠢,因为只是为了演示,现实中的程序会将第一次的查询结果用来操作另外的数据表或者进行删改操作。能够发现我们插入语句中的单引号在执行SQL语句的时候是被转义了的,而在数据库中这个单引号却还是被直接存放在数据库没有添加我们的转义符。

aihua002的博客 435

SQL注入报错注入之floor()报错注入原理分析

对于extractValue和updateXML函数来说比较好理解,就不做解释了,这里只对floor函数的报错注入进行讲解。首先我们先要知道floor()报错注入的形式:这个相对固定的语句格式,导致的数据库报错。实际利用中通过 concat 函数,连接注入语句与 floor(rand(0)*2)函数,就实现了注入结果与报错信息回显的注入方式。所以我们如果想要理解floor()报错注入的原理,我们首先需要明白:rand(),floor(),group by, count()这几个的意思。

黄乔国PHP 4776

mysql防注入pdo_PDO防sql注入原理分析

使用pdo的预处理方式可以避免sql注入。在php手册中'PDO--预处理语句与存储过程'下的说明:很多更成熟的数据库都支持预处理语句的概念。什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。预处理语句可以带来两大好处:查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次。当查询准备好后,数据库将分析、编译和优化执行该查询的计划。对于复杂...

weixin_42525582的博客 356

MP 启动注入 SQL 原理分析

MP 启动注入 SQL 原理分析 文章目录一、MybatisPlus需要sql语句吗?解答:需要1.1. 问题:为什么MybatisPlus看不到sql语句,就可以操作数据库了?1.2. 分析:xxxMapper继承了BaseMapper,BaseMapper提供了通用的CRUD方法,1.3. 假设:方法来源于BaseMapper,有方法就必须有SQL,因为Mybatis最终还是需要通过SQL...

Gblfy_Blog 832

SQL注入原理和分析—显错注入

SQL注入本质 谈到SQL注入前我们先谈谈什么是注入 注入攻击的本质,是把用户输入的数据当做代码执行 有两个关键条件: 1.用户输入的数据控制输入 2.原本程序要执行的代码,拼接了用户输入的数据然后进行执行 SQL注入就是针对SQL语句的注入,也可以理解为用户输入的数据当作SQL语句的代码执行。 SQL注入是1998年一名叫做rfp的黑客发表的一篇文章所进入大众实现。 我们今天先介绍显错注入 显错...

weixin_41487522的博客 971

sql报错注入原理分析

研究人员发现,使用group by子句结合rand()函数以及像count(*)这样的聚合函数,在SQL查询时会出现错误,且错误是随机产生的,这就产生了双重查询注入。 到底为什么floor()、rand(0)、count()、group by相结合,会产生这种错误呢?转载以前乌云一位哥的文章: 种子值为0的rand()函数的输出几乎固定为01101 Okay let get is strai...

JacobTsang的博客 1490
上一篇: 信息收集详解
remarkably
博客等级 码龄3年 126粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值