域内令牌窃取伪造

内网渗透(七十二)之域权限维持之伪造域控 2022年1月10日,国外安全研究员Kaido发文称发现了一种新的伪造域控方式,安全研究员只需要新建一个机器账户,然后修改机器账户的UserAccountControl属性为8192。活动目录就会认为这个机器账户就是域控,然后就可以使用这个新建的机器账户进行DCSync操作了。由于修改机器账户的UserAccountControl属性需要域内高权限,因此这种方式可以用来进行域权限维持。这种权限维持方式与DCShadow类似,都是在域内伪造域控。 阅读详情

一、域内令牌窃取伪造

1、令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个账户的。获得了令牌,就可以在不提供密码或者其他凭证的情况下访问网络和系统资源。令牌会持续存在于系统内部,除非操作系统重新启动。

2、令牌最大的特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌(Access Token)代表访问控制操作主题的系统对象。密保令牌(Security Token)也叫作认证令牌或硬件令牌,是一种用于实现计算机身份校验的物理设备。会话令牌(Session Token)是交互会话的唯一身份标识符。

3、令牌的种类有两种:

  • Delegation Tokens(授权令牌):支持交互式登录
  • Impersonation Tokens(模拟令牌):支持非交互式登录

4、令牌的数量取决于我们获取到的Shell的权限级别,权限越高,获取到的令牌数量就越多。如果攻击者伪造管理员的令牌,便可以拥有与它同等的权限。

5、在普通域用户下进行提权,获取SYSTEM权限后,窃取域管的token,我们就可以获取域控权限。

二、本地测试

1、在本地搭建的域模拟环境,用于测试:pc1域控、pc2域主机。

2、在pc2上执行命令,查看进程及对应的用户名

tasklist /v

user2是域普通用户

3、使用runas 模拟域管运行某个程序,cmd下执行如下命令

runas /noprofile /user:test.lab\administrator cmd

 

 4、此时,我们再查看进程,存在用户为域管的进程,达到我们的测试条件

 5、窃取域管票据,这里我们使用mimikatz。以管理员权限运行

 我们使用如下命令查看令牌

#mimikatz
token::list

 这里,有一点需要注意,我们使用本地管理员权限或者System权限,则可以查看其他用户令牌,若只使用普通权限执行,则只能看到当前用户令牌,如下图

 查看当前身份

#mimikatz
token::whoami

 模拟域管权限

#mimikatz
token::Elevate /domainadmin

 使用dcsync,此时已成功获取域管权限

使用如下命令恢复令牌到初始状态

#mimikatz
token::revert

 恢复之后,再次使用dcsync发现已经无法成功获取hash

三、防御策略

对令牌的时效性进行限制,以防止散列值被破解后泄露有效的令牌信息。越敏感的数据,其令牌的实效性应该越短。对于令牌,应该采取加密存储及多重验证保护。使用加密链路SSL/TLS传输令牌,以防止中间人窃听。


本文原理及防御部分为根据课程整理,在此用于学习记录。如有错误,还多批评。

红队内网攻防渗透:内网渗透之内网对抗:Windows权限提升篇&计算机用户&进程注入&令牌窃取&服务启动&远程管理 这里如果把shell注入到system的进程中就是system权限,但是中途如果要迁移shell到别的进程,需要看用户名权限,如果system迁移到administrator就是降权,如果administrator迁移到system就是提权。获取的权限是administrator,然后用一下所讲的技术进行提权和降权,如果是users的权限,以下技术是用不到的。这里是降权,选择权限是amdinistrator的权限进行注入,就会产生新的admin的权限shell回来。服务启动后上线的是system权限。 阅读详情

相关推荐

获取域管理员权限的几种方式

在不考虑直接攻击域控的情况下,如何快速获取域管理员权限呢?在大多数情况下,攻击者可以通过定位域管理员所登录的服务器,利用漏洞获取服务器system权限,找到域管理的账号、进程或是身份验证令...

1万+

05-令牌窃取和伪造

在前几篇文章中给大家介绍了如何从零开始搭建一个属于自己的内网环境以及当我们进入到一个内网环境中,该怎么样判断当前机器所属的环境是工作组还是域?我们需要收集哪些信息?该通过什么方式进行信息收集?从本篇文章开始,我将开始为大家介绍域渗透的思路及方法,本篇文章主要是介绍令牌伪造在各个工具中的应用。**令牌(token)**是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。

liuhyusb的博客 677

06-esp32-idf开发调试方法(内置JTAG,OpenOCD调试)

使用VS Code和ESP-IDF进行ESP32开发和调试 在我们搭建 **IDF** 框架后,**OpenOCD** 已经自动下载好了, 我们通过 **JTAG** 接口连接使用 **OpenOCD** 进行调试。而**ESP32**芯片中内置 了**JTAG** 电路,无需额外芯片即可调试,更加方便,所以这里我们讲解使用模块自带的usb-jtag接口进行调试。

宁子希的博客 1万+

域权限维持之伪造域控

2022年1月10日,国外安全研究员Kaido发文称发现了一种新的伪造域控方式,安全研究员只需要新建一个机器账户,然后修改机器账户的UserAccountControl属性为8192。活动目录就会认为这个机器账户就是域控,然后就可以使用这个新建的机器账户进行DCSync操作了。由于修改机器账户的UserAccountControl属性需要域内高权限,因此这种方式可以用来进行域权限维持。这种权限维持方式与DCShadow类似,都是在域内伪造域控。

白帽子佳奇的博客 1092

eQTL:连接突变与基因表达的桥梁

欢迎关注”生信修炼手册”!在高等生物中,很多的重要性状都为数量形状,比如农作物的产量,人类复杂疾病(高血液,糖尿病)等等。对于这些数量性状而言,往往受到多个基因的调控作用。为了更好的开展...

庐州月光的博客 7071

SAP FICO CK40N批量发布标准价:常见报错排查与实战解决指南

本文详细解析了SAP FICO模块中CK40N批量发布标准价的常见报错及解决方案。从物料选择、成本核算到最终发布的全流程,提供了针对'已有标准成本估算记号'等典型报错的实战处理技巧,并分享了预防性维护与批量处理的高效方法,帮助财务人员提升工作效率。

weixin_29234509的博客 305

内网渗透之Token令牌窃取

本文包括:令牌的基本概念和种类,以及在windows靶场环境下访问令牌的窃取利用。

qq_44029310的博客 3603

【密码学】生成8位26个字母和数字的全排列(密码字典,密钥)c++代码(非递归高效直接)

生成8位26个字母和数字的全排列(密钥)代码(非递归高效直接) 用C语言或C++,生成一个8位的26个字母和数字的全排列的原代码,例如从:00000000到ZZZZZZZZ。 说明:生成的这个字典会非常大,有36^8条记录,估计要3T的硬盘,跑一个晚上看看         这个方法比递归更高效,更直接。                                                ...

Wu_Being 的优快云 博客 1万+

从MSSQL到域控:Kerberos银票攻击与令牌窃取实战剖析

在Windows域环境中,Kerberos协议是身份认证的核心机制,它通过票据(Ticket)系统实现安全的服务访问。理解其工作原理,特别是TGT(票据授予票据)与TGS(服务票据)的签发与验证流程,是掌握内网安全的关键。Kerberos的设计虽然严谨,但若服务账户密码强度不足或配置不当,攻击者便可利用其机制弱点发起攻击,例如通过Kerberoasting破解服务账户哈希,进而实施更具威胁的横向移动。这种攻击方式的价值在于它能绕过部分网络边界防护,直接针对域内信任关系进行利用。在典型的渗透测试场景中,攻击者

culuo8053的博客 516

1.3 重叠因子:希尔伯特变换趋势线(Hilbert Transform - Instantaneous Trendline)概念与Python实战

希尔伯特变换趋势线(Hilbert Transform - Instantaneous Trendline)是一种基于希尔伯特变换的高级技术分析工具。它使用数字信号处理技术来识别价格的主导周期,并生成一条平滑的趋势线。这种方法可以有效过滤市场噪音,提供更准确的趋势信号。

Kewin的博客 2086

PADS VX2.7学习记录06-PADS Router软件功能操作

PADS VX2.7学习记录06-PADS Router软件功能操作

qq_31444421的博客 7862

令牌窃取及防范

令牌窃取什么是令牌伪造令牌原理令牌窃取 什么是令牌 令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个账户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。令牌会持续存在于系统内部,除非操作系统重新启动。 令牌最大的特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌(Access Token)代表访问控制操作主题的系统对象。密保令牌(Security Token)也叫作认证令牌或硬件令牌,是一种用于实现计算

weixin_45007073的博客 1607

【船舶】风浪流模型水面船舶三自由度运动仿真【含Matlab源码 4379期】

风浪流模型水面船舶三自由度运动仿真 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 695

域内潜行之“银色魅影”:深入剖析Silver Ticket攻击原理与防御

本文将从Kerberos协议层面,揭示服务票据的加密和验证机制如何被攻击者利用。最重要的是,本文提供了一套针对性的纵深防御框架,核心在于保护服务账户凭证,包括使用gMSA(组管理服务账户)、实施最小权限原则,以及通过在成员服务器上开启高级安全审计,进行有效的威胁猎捕来检测这种“魅影”般的攻击。

专注于网络安全攻防技术与安全运营(SecOps)实践。 978

Windows远程桌面开发之九-虚拟显示器(Windows 10 Indirect Display 虚拟显示器驱动开发)

by fanxiushu 2019-06-24 转载或引用请注明原始作者。 这里与远程桌面关系不是太大,但这个部分是xdisp_virt远程控制程序的实现多显示器桌面扩展的子功能,因此也归为远程桌面开发一类。 这篇文章与之前发布的...

fanxiushu的专栏 2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

CSRF攻击原理与防御实战:从令牌验证到SameSite Cookie

跨站请求伪造(CSRF)是一种利用Web应用会话管理机制的安全漏洞,攻击者通过伪造用户身份执行非授权操作。其核心原理在于浏览器会自动携带已认证的Cookie发起跨站请求,而服务器默认信任这些请求。为了有效防御,业界普遍采用同步令牌(CSRF Token)验证技术,为每个会话生成不可预测的随机令牌,要求客户端在敏感请求中携带,服务器进行比对校验。此外,结合校验HTTP Referer/Origin头部、实施双重Cookie验证以及利用浏览器的SameSite Cookie属性,可以构建多层防护体系。这些防御措

weixin_34314962的博客 407

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

内网渗透学习总结

内网渗透学习总结

m0_56171651的博客 1316

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

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

PowerShell渗透--Empire(二)

权限提升 Bypass UAC usemodule powershell/privesc/bypassuac 设置listener execute list查看 usemodule powershell/private/bypassuac_wscript (win7) 当运行完提权模块后,back返回agents查看,多了一个提权成功带(*)号的agents usemodule po...

代码小牛的博客 314

DVWA跨站请求伪造CSRF实战教学指南(Low→Medium→High→Impossible全级别) (源码分析+实操步骤+防御方案)

DVWA跨站请求伪造(CSRF)实战教学指南(Low→Medium→High→Impossible全级别)(源码分析+实操步骤+防御方案)

2501_93868376的博客 563

身份权限欺骗:企业内网隐形威胁与纵深防御体系构建

身份认证与授权是现代信息安全体系的基石,其核心原理在于验证实体身份并授予相应资源访问权限。在零信任架构下,身份已成为新的安全边界,其安全性直接决定了整体防御的有效性。身份权限欺骗作为一种高级威胁,通过窃取、伪造或滥用合法凭证与会话,能够绕过传统基于漏洞的防护,实现隐蔽的横向移动与权限提升,对核心数据资产构成严重风险。其技术价值在于揭示了单纯依赖边界防护的不足,推动安全建设向以身份为中心的动态验证模式演进。在应用场景上,无论是企业内部系统、云环境还是混合IT架构,强化多因素认证、实施最小权限原则、部署用户行为

weixin_30443747的博客 396

【内网渗透】内网渗透学习之域渗透常规方法

初级1、网络安全理论知识(2天)①了解行业相关背景,前景,确定发展方向。②学习网络安全相关法律法规。③网络安全运营的概念。④等保简介、等保规定、流程和规范。(非常重要)2、渗透测试基础(一周)①渗透测试的流程、分类、标准②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等。

h1453586413的博客 143

生成式AI安全威胁深度解析:从深度伪造到自动化攻击的防御实战

生成式人工智能作为当前AI领域的前沿技术,通过深度学习模型实现了文本、图像、音频等内容的高质量生成。其核心原理基于生成对抗网络和大型语言模型,通过海量数据训练获得强大的内容创造能力。这项技术的工程价值在于极大提升了内容生产效率,但也带来了新型安全风险。在应用场景上,生成式AI正被滥用于制作深度伪造内容和自动化攻击脚本,形成了从“造伪”到“攻心”的完整攻击链。针对深度伪造攻击,防御体系需要结合生物信号分析、数字取证和AI对抗检测等多层技术;而应对自动化AI攻击,则需强化邮件安全策略和用户行为监控。本文聚焦于生

weixin_34054931的博客 390

CVE-2023-23397漏洞剖析:Outlook提醒功能如何沦为NTLM哈希窃取通道

NTLM认证是Windows网络中广泛使用的身份验证协议,其挑战-响应机制构成了域环境安全的基础。然而,当应用程序自动发起网络连接时,该协议可能被滥用,导致凭证在用户无感知的情况下泄露。这种技术风险在邮件客户端等日常办公软件中尤为突出,因为它们常以高权限运行并自动处理外部数据。CVE-2023-23397正是此类风险的典型体现:攻击者通过Outlook的提醒功能属性,植入指向恶意SMB服务器的UNC路径,触发系统自动发起NTLM认证,从而窃取用户哈希。该漏洞利用链完全无需用户交互,影响从Office 201

chuchen7021的博客 378
上一篇: AttifyOS v3.0 基本使用
下一篇: 【转】OpenSSL在Win7 64位下的编译与安装
prettyX
博客等级 码龄8年 173粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值