端口和CGI的扫描实现

漏洞扫描器CGI漏洞攻击手册 1.carbo.dll iCat Carbo服务器一个网络购物程序,它被 PC杂评为最好的网络购物软件.安全专家Mikael Johansson发现 iCat Carbo服务器版本 3.0.0.中存在一个漏洞,这个漏洞让我们每个人查看系统中的任何文件在(除文件之外和一些特殊字符). 攻击方法: 提交这样的http请求 : http://host/carbo.dll?icatcommand=fi 阅读详情
 
端口和CGI的扫描实现<首发于2003年黑客防线11期>
WriteBy : LionD8
email:   liond8@eyou.com
Website: http://liond8.126.com
 
一. DIY一个端口扫描器之-高级技术
端口的扫描技术到现在大致分为两种,一种就是低级传统的扫描器,还有就是高级技术的。今天我们就来讲讲高级技术的原理及其实现在基本代码。
    经过测试我们知道正在LISTEN的端口,如果接收在一个SYN包(就是TCP握手的第一次)那么它就会返回一个SYN|ACK(0x12)包,如果一个关闭的端口接收到SYN包就会返回一个PSH|RST|SYN(0x14)的包并且SYN序列号为0。如果远程主机不存在,那么不返回任何数据包。
    根据上面的分析我们就可以构造一个扫描器了。
    如果我们对目标机器发一个SYN包,如果接收到一个SYN|ACK(0x12)的包我们就知道远程端口是存活的。如果接收到PSH|RST|SYN(0x14)那么就确定那个端口没有开放。

    好的那么我们在发包前就需要建立一个侦听线程来接收返回的数据包,

 
1.定义侦听线程:
DWORD   WINAPI  ListeningFunc(LPVOID lpvoid)
{
 
首先就需要建立一个原始套结字。
    SOCKET rawsock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
 
然后取得本机的IP地址,确定一个端口绑定rawsock。
    struct hostent  *pHostent;
    CHAR    name[100]={0};
    gethostname(name, 100);
    pHostent=gethostbyname(name);
 
把本机IP地址复制到addr_in.sin_addr.S_un.S_addr中。
    memcpy(&addr_in.sin_addr.S_un.S_addr, pHostent->h_addr_list[0], pHostent->h_length);
 
绑定。 
    int ret=bind(rawsock, (struct sockaddr *)&addr_in, sizeof(addr_in));
 
设置SIO_RCVALL 接收所有的数据包
    DWORD lpvBuffer = 1;
    DWORD lpcbBytesReturned = 0;
    WSAIoctl(rawsock, SIO_RCVALL, &lpvBuffer, sizeof(lpvBuffer), NULL, 0, &lpcbBytesReturned, NULL, NULL);
 
然后剩下的就是对数据包的捕获分析了。用一个死循环来不断的捕获接收到的数据包,分析如果是存活端口返回的包就打出来,不是的话就放弃,不做任何处理,继续捕获下一个数据包。
while (TRUE)
{
SOCKADDR_IN from={0};
int  size=sizeof(from);
char RecvBuf[256]={0};
//接收数据包
ret=recvfrom(rawsock,RecvBuf,sizeof(RecvBuf),0,(struct sockaddr*)&from,&size);
char* sourceip=inet_ntoa(* (struct in_addr *)&from.sin_addr);
if(ret!=SOCKET_ERROR)
{
   // 分析数据包
   IPHEADER *lpIPheader;
   lpIPheader=(IPHEADER *)RecvBuf;
   if (lpIPheader->proto==IPPROTO_TCP)
   {
    TCPHEADER *lpTCPheader=(TCPHEADER*)(RecvBuf+sizeof(IPHEADER));
    //判断是不是远程开放端口返回的数据包
    if (lpTCPheader->th_seq != 0 && lpTCPheader->th_flag==0x12)  
    {
        //如果是,就从TCP头中提出端口源端口信息,打印出来。
        printf("===%s:%d/n",sourceip,ntohs(lpTCPheader->th_sport));
    }
    }
}
}     // end while
 
}  一上就是我们要建立的侦听分析线程。
 
IPHEADER 和 TCPHEADER的定义分别如下。
typedef struct ip_head      //定义IP首部
{
unsigned char h_verlen;    //4位首部长度,4位IP版本号
unsigned char tos;         //8位服务类型TOS
unsigned short total_len;  //16位总长度(字节)
unsigned short ident;      //16位标识
unsigned short frag_and_flags; //3位标志位(如SYN,ACK,等)
unsigned char ttl;         //8位生存时间 TTL
unsigned char proto;       //8位协议 (如ICMP,TCP等)
unsigned short checksum;   //16位IP首部校验和
unsigned int sourceIP;     //32位源IP地址
unsigned int destIP;       //32位目的IP地址
}IPHEADER;
 
typedef struct tcp_head //定义TCP首部
{
USHORT th_sport;        //16位源端口
USHORT th_dport;        //16位目的端口
unsigned int th_seq;    //32位序列号
unsigned int th_ack;    //32位确认号
unsigned char th_lenres;    //4位首部长度/6位保留字
unsigned char th_flag;  //6位标志位
USHORT th_win;      //16位窗口大小
USHORT th_sum;     //16位校验和
USHORT th_urp;     //16位紧急数据偏移量
}TCPHEADER;
 
侦听搞定了,剩下的问题就是怎么构造SYN 包发送了。一般SYN包的发送都是自己构造IP头和TCP头部,然后用一个TCP伪头来计算效验和,一般情况下这样打造的。这样自己造SYN也是可以的,但是我们的程序效率就会大大降低,我们用另外一个高效率方法。怎么才可以发出一个SYN包而不用自己构造呢?知道有个connect()API吗?本来那是用来建立联接用的。它里面就隐藏了TCP的三次握手,如果我们在发出一个SYN包后就关闭套结字,是不是就能起到发一个SYN包的功效了啊?所以就必须设置套结字为非阻塞的。
 
2. 发SYN包的实现如下。
DWORD  WINAPI  scan(LPVOID lp)
{
//lp为自己定义的一个结构地址,用来传递扫描目标的IP地址和端口信息。
//  如下:
//  typedef struct        //定义一个传递IP和端口,信息的结构
//  {
//  ULONG   IP;
//  USHORT  port;
//   }INFOR;
 
SOCKET sock=NULL;
SOCKADDR_IN addr_in={0};
TCHAR      SendBuf[256]={0};
INFOR*     lpInfor=(INFOR*)lp;
int    iErr;
ULONG     ul=1; 
USHORT port=lpInfor->port;
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(port);
addr_in.sin_addr.S_un.S_addr=lpInfor->IP;
if ((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
printf("Socket Setup Error!/n");
iErr=ioctlsocket(sock,FIONBIO,(unsigned long*)&ul); //设置sock为非阻塞
connect(sock,(struct sockaddr *)&addr_in,sizeof(addr_in));  //发送SYN包
closesocket(sock);
return 0;
}
 
最主要的侦听和发送线程都完成了,剩下的就只是,怎么提取IP地址和端口然后传给发送函数了
int main(int argc, char* argv[])
{
WSADATA WSAData;
INFOR   infor={0};
ULONG StartIP=0, EndIP=0;
int   number=0;
if ( WSAStartup(MAKEWORD(2,2), &WSAData)!=0 )
{
    printf("InitWSAStartup Error!/n");
    return 0;
}
 //创建一个嗅包的线程分析接收到的包。
CreateThread(NULL,0,ListeningFunc,&tempnum,NULL,NULL);
Sleep(500); //等待线程的初始化完成
ULONG StartIP=0, EndIP=0;
StartIP=ntohl(inet_addr(argv[1]));
EndIP  =ntohl(inet_addr(argv[2]));
for ( ; StartIP <= EndIP ; StartIP++)   //从第一个IP到最后一个IP
{
   infor.IP=htonl(StartIP);    
   int   Num=ListNum;       //ListNum为定义的端口列表的长度
   while ( Num-- )
   {        
    infor.port=PortList[Num];  //从列表中取得端口值,准备传递给发包函数
    scan(&infor);              //对目标IP,端口发送SYN包.
 
    }
   
 } //end for
Sleep(2000);  //最后等待2s,等最后发出的包返回。
printf("Scan completely.");
return 1;
} //主线程返回  程序结束。
 
以上全部代码基本上就是一个扫描器了。根据实际测试上面的这种扫描方法速度是相当快的。
 
二. CGI的扫描器
CGI 的扫描前提是开放了80(Web服务)才可以利用的。首先我们必须和远程的80端口建立联接。然后通过提交GET请求,再根据返回的信息加以判断的。例如返回的200代表成功,一切正常。404代表无法找到指定位置的资源。403代表资源不可用等。然后我们侦听返回的数据是不是有"HTTP/1.1 200"这样的子串。有代表请求成功,否则请求失败。
大致的实现如下:
int main(int argc, char* argv[])
{
WSADATA WSAData;
FILE* fp=NULL;
fp= fopen("cgi.lst","r");
//cgi.lst是个CGI漏洞的列表里面的全部是类似"GET /_vti_bin/shtml.exe"这样的。
WSAStartup(MAKEWORD(2,2), &WSAData);
INFOR  infor={0};
// INFOR  结构用来传递CGI信息和IP信息
// 定义如下:
// typedef  struct
// {
//  char sendbuf[100];
//  char IP[20];
// }INFOR;
 
if (argc !=2 ) return 0;
memcpy (infor.IP,argv[1],strlen(argv[1]));
printf("Scan start......./n");
// 从文件中读取要扫描的CGI信息
while ( fgets(infor.sendbuf,100,fp) !=NULL )
{
    HANDLE h=0;
    h=CreateThread(NULL,0,scan,&infor,NULL,NULL);  //创建一个线程扫描
    if ( h == NULL )
    printf("CreateThread false/n");
    WaitForSingleObject(h,INFINITE);  //等待一次扫描结束
    memset(infor.sendbuf,0,100);
}  
printf("Scan completely./n");
} // end main
scan线程定义如下:
DWORD  WINAPI  scan(LPVOID lp)
{
    SOCKET      sock=NULL;
    SOCKADDR_IN  target={0};
    int   error=0;
    char  buf[256]={0};
    char* p=NULL;
    INFOR* lpInfor =(INFOR*)lp;
    if ( (sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
    {
        printf("Socket Setup Error!/n");
        return false;
    }
    target.sin_family=AF_INET;
    target.sin_port=htons(80);
    target.sin_addr.S_un.S_addr=inet_addr(lpInfor->IP);
    error=connect (sock, (struct sockaddr* )&target, sizeof(target)); //连接
    if (error == SOCKET_ERROR)
    {
        printf("Connect false!/n");
        return 0;
    }
    send(sock,lpInfor->sendbuf,100,0);  //发送GET请求
    recv(sock,buf,256,0);       //接收返回的信息
    p=strstr(buf,"HTTP/1.1 200");  //查找返回的信息中有有没有HTTP/1.1 200子串。

    if ( p!=NULL)   //200的意思是一切正常,

    {
        printf("%s",lpInfor->sendbuf);  //把扫描到的漏洞打出来
    }
    closesocket(sock);
    return 1;
}
如转载:请说明作者信息,表明首发刊物。

对GET和POST请求的应答文档跟在后面

并加一分析。
 
vulnhub - /symfonos-3 (考点:shellshock & tcpdump /cap & linux修改py提权) https://www.vulnhub.com/entry/symfonos-3,332/ nat网络 arp-scan -l 扫出多的那个IP就是靶机 nmap 21想到ftp进去找文件,pro这个1,3 5 版本有漏洞,这个靶机系列的上一台有,joy靶机也有。之前都讲了 22想到可能ssh登录 80web搜集信息 PORT STATE SERVICE VERSION 21/tcp o... 阅读详情

相关推荐

Wi-Fi摄像头安全渗透实战:从信息收集到漏洞利用的完整攻击链剖析

物联网设备安全是网络安全领域的重要分支,其核心在于理解设备与网络的交互原理及潜在风险。物联网设备通常基于嵌入式系统,通过开放的网络端口和通信协议提供服务,这使其在提供便利的同时,也暴露了攻击面。从技术价值看,对物联网设备进行安全分析,不仅能揭示其固件、通信协议和认证机制中的设计缺陷,更能为构建主动防御体系提供关键洞察。在智能家居、安防监控等应用场景中,Wi-Fi摄像头作为典型的物联网终端,常因弱口令、未授权访问和命令注入等漏洞成为攻击跳板。本文聚焦于Wi-Fi摄像头的渗透测试,详细拆解了从网络扫描、固件逆向

weixin_29324877的博客 277

CGI详解(原理,配置及访问)

进程A再继续往下执行,但进程A所操作的文件依旧是原来文件的就版本,此时进程A的操作结果将覆盖进程B的操作结果。接下来,CGI程序的执行流程是这样的:查询与该CGI程序进程相应的环境变量:第一步是request_method,如果是POST,就从环境变量的len,然后到该进程相应的标准输入取出len长的数据。服务器和客户端之间的通信,是客户端的浏览器和服务器端的http服务器之间的HTTP通信,我们只需要知道浏览器请求执行服务器上哪个CGI程序就可以了,其他不必深究细节,因为这些过程不需要程序员去操作。

redparrot2008的博客 6539

端口扫描(X-scan)

端口扫描(X-scan)实验

weixin_52034407的博客 4711

80端口入侵 CGI扫描器的原理和实现过程(转)

很多网站为了安全起见,在WEB Server懊婕芰朔阑鹎剑 蛘咦隽薚CP/IP过滤,对外只开放TCP 80 端口。从入侵者角度来看,要入侵那么从80上跑的CGI入手是比较可行的,当然也可以用别的办法,例如旁敲侧击,呵呵。从网管角...

cuijianli8434的博客 1980

扫描---实验一:端口扫描(X-scan)

一、实验目的及要求 掌握使用X-scan对目标主机进行综合检测,查看相关漏洞信息。 二、实验原理 计算机通过各个端口与其他设备交换信息,每一个打开的端口都是一个潜在的通信通道,同时也意味着是一个可入侵的通道。对目标计算机进行端口扫描,就能得到许多有用的信息。端口扫描可以通过手工进行扫描,也可以用端口扫描器进行扫描。 扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器可以不留痕迹的发现远程服务器的各种TCP端口的分配及提供的服务和它们的软件版本,可以直观了解到存在的安全问题。X-sca

weixin_70557959的博客 1万+

扫描工具(一)

一些简单的扫描工具的安装及使用

weixin_52766206的博客 2968

Vulnhub--hacksudo(thor)靶场

hacksudo靶机中涉及使用:利用开源源码泄露以及默认管理员信息、路径爬取获得隐藏页面的登录,发现业务逻辑层面的漏洞。破壳漏洞的原理重点关注cgi-bin目录,再利用curl向服务器发起nc 命令进行打点GTFOBins的利用。

leo788的博客 547

防火墙安全工具:日志检查与CGI扫描

本文介绍了几种防火墙安全工具的安装和配置方法,包括logcheck、swatch、IPTraf以及CGI扫描器(如cgichk.pl和whisker)的使用。这些工具能帮助系统管理员监测和分析系统日志,检测系统攻击、安全违规和不寻常活动,以及扫描Web服务器的CGI脚本漏洞,从而提高网络安全防护水平。

weixin_35750953的博客 571

实验一:端口扫描(X-scan)

一、实验目的及要求 掌握使用X-scan对目标主机进行综合检测,查看相关漏洞信息。 二、实验原理 计算机通过各个端口与其他设备交换信息,每一个打开的端口都是一个潜在的通信通道,同时也意味着是一个可入侵的通道。对目标计算机进行端口扫描,就能得到许多有用的信息。端口扫描可以通过手工进行扫描,也可以用端口扫描器进行扫描。 扫描器是一种自动检测远程或本地主机安全性弱点的程序,通过使用扫描器可以不留痕迹的发现远程服务器的各种TCP端口的分配及提供的服务和它们的软件版本,可以直观了解到存在的安全问题。X-sca

weixin_46544151的博客 1万+

CGI扫描器.rar

CGI扫描器.rarCGI扫描器.rarCGI扫描器.rarCGI扫描器.rar

cgiscan,web漏洞扫描企业版

cgiscan,web漏洞扫描企业版

端口扫描防御手段

最近Boss交给我一个任务,从日志中检测端口扫描。对于这样的任务,一开始我是拒绝的❌。但是,Boss只管分发任务,季度末只看完成结果。没办法,硬着皮头开始看论文。首先搜了一些985高校的论文,发现一篇10多年前的清华大学的。哎,说明这个方向真的没得研究了,检测技术都应该已经非常成熟了,但是为毛我不知道检测规则呢?这个问题开始渐渐困扰着我,下班回来开始搜文献,竟然遇到收费的知网,绕道。PortSen...

ailx10 757

搭建Dzzoffice 教程

通过以上步骤,您已经成功配置了WEB环境,安装了DzzOffice,并完成了系统设置和应用安装。1.安装包的设置默认是系统盘之外的第二个盘,没有其他盘符的时候则安装在C盘,当主机盘符只有C盘可用的时候,安装时不要使用U盘,否则可能误装到U盘当中。4.如果之前已经安装,再次安装时请确保上次安装已经卸载或者所有文件可读,否则请备份文件,卸载之后再安装。在其他安装环境中,我没有相关的使用经验。3. 保证安装路径是纯净的,安装路径下不能有已安装的V8版本,若重新安装,请选择其它路径。

小胡的博客 4950

使用X-Scan进行漏洞扫描的基本操作演示

使用X-Scan进行漏洞扫描的基本操作演示 X-Scan简介 X-Scan是中国著名的综合扫描器之一,它是免费的而且不需要安装的绿色软件、界面支持中文和英文两种语言、包括图形界面和命令行方式(X-Scan以后取消命令行方式)。X-Scan主要由国内著名的民间黑客组织“安全焦点”()完成,从2000年的内部测试版X-Scan到目前的最新版本X-Scan都凝聚了国内众多黑客的努力。X-Scan把扫描报告和安全焦点网站相连接,对扫描到的每个漏洞进行“风险等级”评估,并提供漏洞描述、漏洞溢出程序,方便网管测试、

qq_39116519的博客 2万+

Bentley二次开发教程28-交互窗口-案例实战2-EC属性赋值工具

该工具会根据用户输入的路径获取Schema文件的路径,然后通过路径读取对应的Schema文件并在树状图中显示EC类,当用户选择树状图上的节点时,此时会触发事件,根据EC属性添加用户自定义控件用于显示EC属性并可对其进行赋值操作。完成后选取元素,点击界面上的应用,此时元素会被赋予指定EC类,同时修改的EC属性值也会被同步赋予。该工具涉及到的WinForm控件有:TextBox,Button,TreeView,Panel,UserControl(用户自定义控件)。

不见不散的博客 1474

自动化控制软件:Beckhoff TwinCAT二次开发_(7).HMI开发基础

TwinCAT HMI是Beckhoff公司为TwinCAT自动化平台开发的专用HMI软件。Web技术基础:基于Web技术,支持HTML5、CSS3和JavaScript,可以轻松集成第三方库和框架。多平台支持:可以在多种设备上运行,包括PC、平板电脑和智能手机。高效开发:提供丰富的组件库和开发工具,简化开发过程。安全性:支持多种安全机制,确保数据和系统的安全性。可扩展性:支持自定义组件和脚本,满足不同应用场景的需求。Button:按钮组件,用于触发操作。Label:标签组件,用于显示文本信息。

2401_87715305的博客 982

对端口com2的访问被拒绝_端口扫描防御手段

最近Boss交给我一个任务,从日志中检测端口扫描。对于这样的任务,一开始我是拒绝的❌。但是,Boss只管分发任务,季度末只看完成结果。没办法,硬着皮头开始看论文。首先搜了一些985高校的论文,发现一篇10多年前的清华大学的。哎,说明这个方向真的没得研究了,检测技术都应该已经非常成熟了,但是为毛我不知道检测规则呢?这个问题开始渐渐困扰着我,下班回来开始搜文献,竟然遇到收费的知网,绕道。PortSen...

weixin_39589557的博客 1216

OpenStack [ compute_id ] 设计上的小缺陷

而 nova 代码中硬编码(或默认配置)将 compute_id 放在 site-packages 目录,属于 设计上的小缺陷—— 把 “库安装目录” 和 “运行时数据目录” 混在一起了,才导致需要临时调整这个目录的权限。# 配置项说明:node_identity_file 是 nova 用于指定节点标识文件路径的官方配置项,优先级高于代码中的默认路径。自定义 compute_id 路径,指向 /var/lib/nova/ 目录下的 compute_id 文件;

求知若渴,虚心若愚。 491

Web漏洞扫描神器Nikto使用指南

文章目录工具简介工具下载链接nikto安装nikto基础语句指定端口进行扫描指定目录进行扫描多目标扫描其他功能扫描结果输出Nikto扫描交互参数IDS 躲避使用代理扫描后言 工具简介 Nikto是一款开源的(GPL)网页服务器扫描器,它可以对网页服务器进行全面的多种扫描,包含超过3300种有潜在危险的文件/CGIs;超过625种服务器版本;超过230种特定服务器问题。扫描项和插件可以自动更新(如果需要)。但其软件本身并不经常更新,最新和最危险的可能会检测不到。 工具下载链接 官方网站:https://cir

liver100day的博客 3万+

手把手教你学simulink(57.3)--电励磁同步电动机场景示例:基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论需求分析电励磁同步电动机(Electr

MHD0815的博客 504

uniapp - 解决在线预览PDF文件空白打不开的问题,无论是后端下载二进制文件流pdf还是本地插件或JS预览查看打开白屏不显示,详细排查解决(适用于移动端H5网页、安卓/苹果app、微信小程序)

uniapp App端 实现pdf文件预览打开白屏解决,uniapp 在线预览pdf打开一片空白,跨域白屏,uni-app中使用WebView预览PDF文件打开空白,微信小程序(uniapp)预览PDF空白怎么办,下载PDF文件流后打开空白或无法打开的问题,Uniapp H5网页下载二进制pdf文件页面空白以及解决文件损坏打不开的情况,Uniapp app在线预览pdf文件流,PDF加载出来怎么办,服务器后端返回PDF文件流后前端进行下载但打开后一片白屏,解决pdf文件流,预览全是空白页,pdf文件流,下载

🏆 前端领域优质创作者 1万+

使用kali对服务器进行漏洞扫描_Web漏洞扫描神器Nikto使用指南

Kali工具库之Nikto工具简介Nikto是一个开源的WEB扫描评估软件,可以对Web服务器进行多项安全测试,能在230多种服务器上扫描出 2600多种有潜在危险的文件、CGI及其他问题。Nikto可以扫描指定主机的WEB类型、主机名、指定目录、特定CGI漏洞、返回主机允许的 http模式等。说明链接官方网站https://cirt.net/Nikto2Github源码https://githu...

weixin_42519253的博客 1万+

orange软件:入门使用

orange做数据分析契机实验手册目录orange软件部分界面展示小试牛刀:数据导入和展示小试牛刀:散点图绘制总结 契机 今天在上大数据时代实验课,作为一名软件工程专业的大三学生,在上这节公选课之前就决定这节课做完这个学期所有的实验报告,可以说“有亿点”不屑;尤其当老师说Python很麻烦的时候,我更是震惊了,因为我接触过这么多编程语言,Python真的很友好了,很傻瓜,但是当老师打开实验手册的时候,我真香了!!!下面先来看看手册的目录: 实验手册目录 为什么会真香呢,因为目录里这些有好多机器学习算法!

weixin_45880844的博客 1万+
上一篇: perl 第一个建立xml文档
下一篇: 服务器完美设置,支持asp+php+cgi+jsp+asp.net+mysql
wx红杉树
博客等级 码龄21年 383粉丝 296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值