分享一个人工审计代码时的小Tips 在审计一个复杂的Web应用时,可能会有几百个WebAPI,如果没有一个API list,要想不漏掉的审计完还是非常费脑筋的 0x00 原理 通过JavaParse解析Java文件,解析出WebAPI list,简单实现效果如下 关于JavaParse Analyse, transform and generate your Java code base. In its simplest form, the JavaParser library allows you to interact with Java source code a

Github发布CodeQL后,一直保持着关注,从17年就有类似的想法在尝试,在CodeQL中有很多不谋而合的点,查询语句刚上手虽然有些别扭,稍微适应了下感觉还好,值得好好学习一下 接下来看一下如何发现Java Deserialization Vulnerabilities。 攻击者在Java应用 deserialization时注入不可信数据进而可以执行任意代码。 java.io.ObjectInputStream中的 readObject是个危险方法。常见的用法如下: ObjectInputStream ois = new ObjectInputStream(input);

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-3253 影响版本(1.7.0~2.4.3) 调用链分析 MethodClosure public class MethodClosure extends Closure { private String method; public MethodClosure(Object owner, String method) { super(owner); this.method = method; Class c

这里和CVE-2018-1270的修复方案类似,StandardEvaluationContext替换为SimpleEvaluationContext,又看到Expression expression = PARSER.parseExpression(propertyName);,基本可以确定是SpEL注入了 补丁分析 https://github.com/spring-projects/spring-data-commons/commit/ae1dd2741ce06d44a0966ecbd6f47beabde2b653 这里和CVE-2018-1270的修复方案类似,St

SpEL(Spring Expression Language)是Spring提供的一种表达式语言 0x00 简介 SpEL(Spring Expression Language)是Spring提供的一种表达式语言 能在运行时构建复杂表达式、存取对象图属性、对象方法调用等,并且能与Spring功能完美整合,如能用来配置Bean定义 表达式语言给静态Java语言增加了动态功能 0x01 表达式执行步骤 SpEL求表达式值时的步骤 1、构造一个解析器 SpEL使用ExpressionParser接口表示解析器,提供SpelExpressionParser默认实现 2、解析

STOMP是一个简单的可互操作的协议, 被用于通过中间服务器在客户端之间进行异步消息传递。它定义了一种在客户端与服务端进行消息传递的文本格式. CVE-2018-1270 STOMP协议 STOMP是一个简单的可互操作的协议, 被用于通过中间服务器在客户端之间进行异步消息传递。它定义了一种在客户端与服务端进行消息传递的文本格式. STOMP协议与HTTP协议很相似,它基于TCP协议,使用了以下命令: CONNECT SEND SUBSCRIBE UNSUBSCRIBE BEGIN COMMIT ABORT ACK NACK DISCONNECT STOMP的

0x01 前言 这段时间反思了下,以前分析的那些框架级别漏洞,跟进一遍后就没有然后了,对漏洞的理解还是太浅,达不到举一反三的作用,再看一次fastjson 0x02 跟进调用链 JSON.parseObject JSON是一个抽象类,JSON中有一个静态方法parseObject(String text),将text解析为一个JSONObject对象并返回 fastjson支持注册ObjectDeserializer实现自定义反序列化。要自定义序列化,首先需要实现一个ObjectDeserializer,然后注册到ParserConfig中 key是@t

0x00 框架基础 0x0a 常见框架 0x0b Servlet 0x0c SpringMVC 0x0d Spring Boot 0x0e 其它 0x01 面对单个应用 0x0a 明确需求 0x0b 确定框架 0x0c 文件结构 0x0d 运行流程 0x0e 关键代码审计 0x0f checklist + 黑盒 0x03 权限控制风险 0x04 其它常规漏洞 0x05 面对十几万行代码更新 0x0a 文件过滤 0x0b 风险打标 0x0c 逻辑挖掘 0x0d 黑盒验证 0x05 总结

漏洞公告:https://github.com/alibaba/fastjson/wiki/security_update_20170315 0x00 关于漏洞 漏洞公告:https://github.com/alibaba/fastjson/wiki/security_update_20170315 0x01 POC分析 参考的网上的POC POC public class FastJsonPoc extends AbstractTranslet { public FastJsonPocCls() throws IOException { Runt

序列化 是指把 Java 对象转换为字节序列的过程 便于保存在内存、文件、数据库中 ObjectOutputStream类的 writeObject() 方法可以实现序列化 反序列化 是指把字节序列恢复为 Java 对象的过程 ObjectInputStream 类的 readObject() 方法用于反序列化 0x00 Serialize and Unserialize 序列化 是指把 Java 对象转换为字节序列的过程 便于保存在内存、文件、数据库中 ObjectOutputStream类的 writeObject() 方法可以实现序列化 反序列化 是指把字节