内容简介:Apache Log4j socket receiver deserialization vulnerability(CVE-2017-5645)
Log4j TCP socket server or UDP socket server在真正开发环境使用的不多,所以漏洞影响有限,利用思路跟之前的反序列化漏洞方式没有什么不同。
漏洞分析
根据漏洞描述,可知漏洞存在 TcpSocketServer类中。进入TcpSocketServer类的run方法,run方法中创建SocketHandler对象并调用了start()方法。 SocketHandler是TcpSocketServer的内部类,并且继承自Log4jThread,Log4jThread继承自Thread。 SocketHandle的start()方法调用会执行run方法,run方法主要逻辑是启动一个循环不断的接收序列化的日志流,问题就存在这里。 logEvents是一个泛型方法
public interface LogEventBridge<T extends InputStream> { void logEvents(T var1, LogEventListener var2) throws IOException; T wrapStream(InputStream var1) throws IOException; }
实例化对化TcpSocketServer对象时传递的是ObjectInputStreamLogEventBridge实例
public static TcpSocketServer<ObjectInputStream> createSerializedSocketServer(int port) throws IOException { LOGGER.entry(new Object[]{Integer.valueOf(port)}); TcpSocketServer<ObjectInputStream> socketServer = new TcpSocketServer(port, new ObjectInputStreamLogEventBridge()); return (TcpSocketServer)LOGGER.exit(socketServer); }
跟进ObjectInputStreamLogEventBridge的logEvents方法,可以看到问题的原因了
漏洞测试
pom.xml配置
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.1</version> </dependency>
public static void main(String argv[]) { try { TcpSocketServer socketServer = TcpSocketServer.createSerializedSocketServer(1234); socketServer.run(); } catch (Exception e) { } }
最后给一个利用截图
修复方法
Log4j升级到2.8.2版本,已经加了白名单校验
漏洞检测
sudo -u admin lsof -X | grep log4j | grep jar | grep -v 2.8.2
参考
[1]: http://seclists.org/oss-sec/2017/q2/78
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
谁说菜鸟不会数据分析
张文霖、刘夏璐、狄松 编著 / 电子工业出版社 / 2011-7 / 59.00元
《谁说菜鸟不会数据分析(全彩)》内容简介:很多人看到数据分析就望而却步,担心门槛高,无法迈入数据分析的门槛。《谁说菜鸟不会数据分析(全彩)》在降低学习难度方面做了大量的尝试:基于通用的Excel工具,加上必知必会的数据分析概念,并且采用通俗易懂的讲解方式。《谁说菜鸟不会数据分析(全彩)》努力将数据分析写成像小说一样通俗易懂,使读者可以在无形之中学会数据分析。《谁说菜鸟不会数据分析(全彩)》按照数据......一起来看看 《谁说菜鸟不会数据分析》 这本书的介绍吧!