【网络安全】upload-labs Pass-13 解题详析

【upload-labs】图片马绕过pass13~16 【upload-labs】图片马绕过pass13~16 【pass-13】文件头检查绕过 1、源码分析 function getReailFileType($filename){ $file = fopen($filename, "rb"); //以字节流的形式打开上传的文件 $bin = fread($file, 2); //只读2字节 fclose($file); $strInfo = @unpack("C2chars", $bin); //unpack()解包 阅读详情

【精选优质专栏推荐】


每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。

读者可参考、订阅专栏:【Upload-Labs靶场攻防实战】

Antsword蚁剑

该题涉及蚁剑工具的利用,操作可参考:

【网络安全】AntSword(蚁剑)实战解题详析(入门)

【网络安全】DVWA之File Upload—AntSword(蚁剑)攻击姿势及解题详析合集

解题过程

后端逻辑代码:

在这里插入图片描述

该题同Pass-12考察00截断,但为POST传参型。

00截断原理参考:【00截断 | upload-labs Pass-12】

抓包:

在这里插入图片描述

改包:

在这里插入图片描述

接着将%00进行URL编码

在这里插入图片描述

如图,变为空字符串:

在这里插入图片描述

放包:

在这里插入图片描述

获得上传路径:

在这里插入图片描述

之后即可进行shell操作,本文不再赘述。

[网络安全]upload-labs Pass-20 解题详析(1) } ?>上传一个到服务器。请选择要上传的图片: 保存名称: 阅读详情

相关推荐

实战技巧:如何用CMD命令5分钟制作高效图片马(附Upload-Labs靶场测试)

本文详细解析了如何利用CMD命令快速制作图片马,以绕过Web应用的白名单过滤机制。通过实战演示在Upload-Labs靶场中测试文件上传漏洞,深入探讨了图片马执行原理、多种制作方法(包括CMD拼接、十六进制编辑)及对应的防御策略,帮助安全人员与开发者理解并防范此类攻击。

agile9scrum的博客 895

文件上传漏洞-upload靶场13-16关 (图片木马-文件包含与文件上次漏洞)

文件包含漏洞存在于许多服务器端编程语言和框架中。这种漏洞允许攻击者通过利用应用程序未经正确验证的文件包含代码,将恶意文件或远程文件包含到目标应用程序的执行环境中。文件包含漏洞的主要原因在于应用程序在包含文件时未对用户输入进行充分的验证和过滤,或者将用户可控的输入直接用于文件路径或文件名。攻击者可以利用这个漏洞来执行恶意代码、读取敏感文件、绕过访问控制或进行其他非法操作。文件包含漏洞可以分为两种类型:本地文件包含漏洞:攻击者通过指定包含的本地文件路径,从同一服务器上读取和执行文件。

diaobusi的博客 1577

PHPStudy 2018快速搭建Upload-Labs靶场:文件上传漏洞实战环境部署指南

文件上传漏洞是Web安全中常见的高危攻击面,其原理在于服务器对用户上传的文件未进行充分的安全校验,导致恶意文件被上传并执行。理解其技术价值在于,攻击者可借此获取服务器控制权,危害极大。在应用场景上,无论是电商、社交还是内容管理平台,凡涉及用户文件上传功能,均需防范此类风险。本文聚焦于使用PHPStudy 2018这一经典集成环境,在Windows系统上快速部署Upload-Labs靶场,为学习文件上传漏洞的绕过手法提供稳定、易用的实验平台。通过图形化界面管理Apache、PHP和MySQL,学习者可抛开复杂

weixin_33970449的博客 388

upload-labs第13关~20关详细解析

二次渲染是这一关的最大特点,将上传的文件重新生成为新的文件,这很容易出现“图片马被打乱,重新生成一张普通的jpg文件”四个文件:一句话木马php文件+一张jgp格式照片+包含一句话木马的jpg照片shell_jpg+.py文件。后面,我尝试直接用图片马上传,发现没有二次渲染~~ ,直接用AntSword连接图片马,成功了。后面了解到了,直接将php代码段插入到一个图片里,对于jpg不太显示,jpg不稳定。我发现用普通的图片马+自带的文件包含,就可以实现文件上传漏洞。不行,直接被拦截了,这里会显示一片空白。

Lucky小小吴的小屋 2330

WhatsApp协议算法

我想其实有很多人还不太了WhatsApp群控,简单来说,它和我们常使用的微信聊天软件是类似的,只不过它是基于通讯录的,操作起来比较简单便捷,所以现在有很多国家都喜欢用WhatsApp。一般情况下,筛号不会造成账号被封的情况,但是呢,如果筛号的频率太快,就会被系统限制筛号能力,不再返回筛号结果,所以,筛号数量和速度一定要控制好。前天逛街突然灵光一现,为什么不试试多路访问呢,简单来说就是信道复用技术,马上跑回家,调取接口,接入通道,导入已经转换成协议的账号,成功登录!

2403_87755661的博客 1943

LabVIEW+数据库应用系列保姆级教程,第一篇数据库连接

目录LabVIEW连接数据库的方法连接MySQL连接Oracle,SQL Server,Access等 LabVIEW连接数据库的方法 1、创建udl(Universal Data Link)是通用数据连接文件。界面操作,简单快捷。 2、编写连接字符串。需要熟悉连接字符串的结构,容易出错。 3、其他… 本教程教你使用第1种方法,也是最简单、最常用的方法。 连接MySQL 1、在MySQL Installer内安装MySQL Connector/ODBC,建议安装32位(X86),如下图: 2、创建ODBC

wwplh5520370的博客 1万+

upload-labs Pass-13

upload-labs pass-12通过方法

qq_62673514的博客 287

ESP32蓝牙广播数据自定义指南:让你的设备更容易被手机发现

本文详细介绍了如何通过自定义ESP32蓝牙广播数据提升设备在手机端的可发现性。从广播数据结构、扫描响应优化到跨平台兼容性设置,提供了全面的技术指南和实战代码示例,帮助开发者解决智能硬件开发中的蓝牙连接难题。

weixin_29172201的博客 271

Upload-labs 1-20关靶场通关攻略(全网最全最完整)

在github上找upload-labs-0.1环境,部署在小皮面板上也可以直接下载他的集成的环境。 Sethandler将该目录及子目录的所有文件均映射为php文件类型。 Addhandler使用 php5-script 处理器来解析所匹配到的文件。 AddType将特定扩展名文件映射为php文件类型。 简单来说就是,可以将我们所的文件都解析成php或者是特定的文件解析为php 当 PHP 在处理文件名或路径时,如果遇到 URL 编码的 %00,它会被解释为一个空字节(ASCII 值为 0)

dragon的博客 2万+

Oracle MCP Server实战:自然语言如何重塑数据库交互体验

本文深入探讨了Oracle MCP Server如何通过自然语言交互技术革新数据库操作体验。作为Oracle数据库的革命性工具,MCP Server集成了先进的Text-to-SQL技术,允许用户使用自然语言直接查询数据库,大幅降低使用门槛。文章详细介绍了从环境搭建、实战案例到企业级部署的全流程,特别强调了中文自然语言处理能力和安全最佳实践,为DBA和开发者提供了从传统SQL到智能交互的转型指南。

u9v0w的博客 283

华为BEM战略解码体系完整版(85页PPT)(文末有下载方式)

在部门层面,战略解码的核心是将公司战略逐层分解到部门,确保部门目标能够有效支撑公司战略。战略解码的关键原则包括:对公司战略和业务目标的支撑、指标选取考虑部门责任特色、对公司业务流程的支撑、战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码体系的核心目标是将公司战略逐层分解,确保战略目标能够通过可衡量的。在公司层面,战略解码的第一步是战略澄清,明确公司的使命、愿景、战略目标及。

AI_data_cloud的博客 2400

文件上传实验(upload-labs靶场实验)

(1)先上传一句话木马(2)发现格式不对,查看源码发现是js的作用,先抓包,在包内改格式外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(3)在服务器上的upload文件夹下查看木马文件外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传发现只有png格式的文件可以上传(1)那就先抓包,改格式(2)将格式改为image/jpeg,发现没报错,查看。

sveewg的博客 1万+

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 706

upload-labs靶场 1-21通关

upload

2302_78449782的博客 1635

SwinTransformer 改进:SSPCAB模块(2024最新改进方法)

SSPCAB(Spatial Pyramid Pooling with Channel Attention Block)是2024年提出的一种新型神经网络架构改进方法,专注于在保持高精度的同时显著降低计算复杂度和参数量。该方法通过创新的空间金字塔池化与通道注意力机制的结合,实现了网络结构的紧凑化和运算效率的大幅提升。核心创新点1. 混合空间金字塔池化(Hybrid Spatial Pyramid Pooling, HSPP)多尺度动态核池化:根据输入特征图尺寸动态调整池化核大小和步长交叉级联结构。

Henry的博客 1309

(论文加源码)基于CNN和LSTM的脑电情绪识别(数据集为DEAP和seed)

论文及源码见个人主页:https://download.youkuaiyun.com/download/qq_45874683/84118637?spm=1001.2014.3001.5503 (论文加源码)基于CNN和LSTM的脑电情绪识别(数据集为DEAP和seed)4D-CRNN 目录 目录: 运行过程: 1. 运行1D文件(没有什么bug): 2. 再运行3D文件(没有出现bug): 3. 最后运行main文件(出现了两个bug)(前提需要配置好tensorflow的框架): 第一个bug是..

qq_45874683的博客 6364

最新upload-labs文件上传漏洞靶场搭建安装,upload-labs Pass01-Pass20 二十关详解,靶场源码详解,upload-labs第一关到第二十关详解,一句话木马详细介绍

在开始打靶场之前,我们先来介绍一下一句话木马。一句话木马(One-liner Trojan 或 Webshell)是一种常见的网络安全攻击工具,通常用于Web服务器的非法控制。它称为“一句话”,因为攻击者只需在目标服务器上的一个可访问的Web页面中植入一小段代码,就可以实现对服务器的远程控制。这种木马通常以PHP、ASP、JSP等服务端脚本语言的形式出现,因为这些语言能够在服务器上执行。一句话木马的代码很简短,但功能却非常强大,能够接收远程命令并在服务器上执行这些命令。?

2302_80946742的博客 8881

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

upload-labs靶场的pass-13~21的解题步骤及原理讲解

本文介绍了upload-labs靶场pass-13至pass-21的文件上传漏洞解题方法。主要内容包括:1. 针对不同关卡的文件校验机制(后缀校验、文件头检测、二次渲染等)进行分析,揭示其安全漏洞;2. 详细讲解图片马制作、竞争条件利用、解析漏洞绕过等攻击技术;3. 提供具体解题步骤,包括使用BurpSuite修改请求、制作特殊图片文件、利用文件包含漏洞等;4. 对每关代码进行安全分析,指出防护薄弱点及加固建议。通过系统性的关卡挑战,帮助读者深入理解文件上传漏洞的多种利用方式及防御措施。

2503_91800161的博客 1182

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Upload-labs 1~15 通关详细教程

upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。

来日可期的博客 2313

深度学习工具包 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")

upload-labs通关攻略

爆破后生成webshell.php即可使用蚁剑连接。burp拦包发送到inturder模块进行爆破。

qq_62486841的博客 739

upload-labs pass-13

这里注意,直接提交是没有作用的,因为POST提交的数据不一致,它还会把我们提交的请求转为十六进制编码提交,我们还需要修改Hex里的内容。我们然后点进旁边的Hex,进行修改。这一关和上一个类似,不过这里是通过POST控制上传路径,我们还是上传一个文件,然后在burp里面改包。找到我们添加的后缀,31,然后在右边的面板中将Code值改为00,然后点击应用就可以了。我们将save_path路径修改一下,后面的1是为了方便定位文件结尾位置。post型00截断,需要再Hex中修改内容。

记录自己学习安全知识的笔记, 沉淀ing 246

Upload-labs 1-21关 靶场通关笔记(含代码审计)

basename— 返回路径中的文件名部分给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。Notebasename()纯粹基于输入字符串操作, 它不会受实际文件系统和类似 “..” 的路径格式影响。php?1) sudoers3) passwd4) etc5) .6)imagecreatefromgif():创建一块画布,并从 GIF 文件或 URL 地址载入一副图像。

m0_59598029的博客 1241

upload-labs-master通关攻略(13~16)

upload-labs-master通关攻略(13~16)

2301_78554096的博客 510

为什么你的 upload-labs 照着攻略就是做不出来:前提条件清单

所有命令均未实测。写作环境无 Docker 与 PHP,无法产出任何运行输出。文中每个代码块上方都保留了⚠️ 代码待验证标记,请在你自己的环境里验证后再依赖它。官方容器(PHP 5.5)能否跑出 Pass-12 / Pass-13 的结果:官方未声明,本文未实测,本文不作结论。这是"读者最想知道、但本文给不了"的一条,也是本文唯一一个无法关闭的缺口。00 截断所依赖的具体 PHP 版本阈值:未从 PHP 官方变更记录或安全公告核到一手出处。本文因此不写这个数字,只保留官方的笼统口径。

2301_80217102的博客 182

upload-labs pass-19

而由于这里作者也没有给予一个文件包含漏洞窗口,即意味着作者设计这关的目的不是让我们上传图片马,这里是可以利用文件包含漏洞上传图片马利用的,因为图片回显在了主页,我们可以获取到文件名,所以这里想其他方法。首先,需要注意,这里的上传路径出现了点问题,这里的上传到了upload同级目录里面,需要修改一下源码,使上传目录在upload里面,可以按照下图修改,两个位置选一个改就可以了,图1为myupload.php文件的第103行,或者修改index.php里的第13行内容,可以看到,留下了我们想要的文件。

记录自己学习安全知识的笔记, 沉淀ing 838

upload-labs练习1-14

以upload-labs靶场为实验环境以下是参考了网上几位大佬写的教程并且在本人电脑上可以实现的通过方法,方法不止一种,如果此方法不可行可以再寻找其他方法进行文件上传。

m0_53223419的博客 153
上一篇: 【网络安全】upload-labs Pass-12 解题详析
下一篇: [网络安全]upload-labs Pass-11 解题详析
秋说
秋说 优质创作者: 编程框架、信息安全技术领域 优质创作者: 编程框架、信息安全技术领域
博客等级 码龄4年 3万+粉丝 1906原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值