这一类漏洞的特点和前面几类不一样:代码本身往往是"对"的,错的是覆盖范围。 一个接口写了权限校验,另一个接口没写;一个路径被过滤器保护,另一个写法相同的路径没被保护。单看每一处代码都合理,问题出在"整体上漏了哪一块"。 所以审计方法也不同——不是逐个函数看,是先把范围画出来,再找缺口。 0x01 三个层次 认…
反序列化是 Java 审计里被讲得最多的一类,但大部分文章在讲链子怎么构造。审计场景下不需要那个——审计只需要判断三件事: 1. 有没有入口:外部数据进去了,且真的调用了反序列化 2. 有没有弹药:类路径里有没有可用的 gadget 链 3. 有没有限制:JDK 版本、filter、白名单、加密密钥 三个条件同时成立才是漏洞。缺任何一个,这个点就只…
文件类漏洞是企业项目里出现频率最高的一类,也是最容易出成果的一类。 原因很简单:这类漏洞不需要读懂业务。 只要看到一个可控的字符串被拼进了文件路径,基本就能定性。而权限绕过、逻辑漏洞那些,你得先理解这个系统在干什么。 所有文件类漏洞最终都归结为两个问题: 1. 路径 / 文件名 / 文件内容,从哪来,可控到什么程度 2. 有没有校验,校验的是&qu…
SQL 注入、命令执行、表达式注入,这三类经常被分开讲。但审计的时候我把它们放在一起看,因为本质是同一件事: 一段可控的字符串,被当成指令交给了某个解释器执行。 解释器可能是 SQL 引擎、是 shell、是表达式引擎、是模板引擎、是反射机制。判断方法也统一:找到"字符串进入解释器"的那一行,然后确认字符串里有多少是外部能控制的…
上一篇拿到了一张重点清单。这一篇讲怎么顺着清单往代码深处走。 追踪数据流本身不难,难的是两件事:跟到一半丢了,和看到一个过滤器但判断不出它到底挡不挡得住。这一篇主要解决这两个。 0x01 两个方向,用途不同 从危险函数往上追。 先列出所有 Sink——能执行命令、能拼 SQL、能读写文件的函数——然后逐个往上找调用方,一直找到能被外部控制的入口。 …
上一篇把依赖和配置过完了,产出是一张"重点跟进清单"。这一篇进代码。 进代码第一件事不是看业务,是把接口全找出来。 原因很直接:审计本质是逐条检查"外部输入能不能变成危险操作"。如果连外部输入有多少个入口都不清楚,就只能靠运气翻代码。一套若依二开系统的业务接口在 200 到 400 个之间,翻是翻不完的,只能…
拿到一套 Java 源码,不要先翻 Controller。 一套中型系统的 Controller 加 Service 有几百个类,读懂业务逻辑才能判断有没有洞。但依赖版本和配置项不用懂业务——版本号就写在那里,配置项就摆在那里,对照漏洞库和默认值清单就能得出结论。 所以前 30 分钟我只看三个文件:pom.xml、application.yml、w…