【Java代码审计 | 第十六篇】项目审计思路:第三方组件、配置文件、正逆向排查

【Java代码审计】代码审计的方法及常用工具 Eclipse 是 Java 开发者非常喜欢的工具之一,它具有强大的编辑、调试功能,允许开发人员安装不同的插件,从而拓展不同的功能。Burp Suite 是渗透测试工作者必备的一款工具,同时对于代码审计者和安全研究人员来说,这也是一款比较重要的测试工具,其跨平台、便捷、强大的功能以及丰富的插件,深受信息安全从业者的喜爱。Ysoserial 是一款开源的 Java 反序列化测试工具,内部集成有多种利用链,可以快速生成用于攻击的代码,也可以将新公开的反序列化漏洞利用方式自行加入 Ysoserial 中。 阅读详情

未经许可,不得转载。

在这里插入图片描述

项目审计思路

1.审计第三方组件

如果该 Java 项目使用 Maven 进行依赖管理,则可以通过 pom.xml 文件分析其引用的第三方组件及版本信息。借助专业工具,可自动扫描并整理项目依赖,同时检测组件是否存在已知安全漏洞,从而提高代码审计的效率。

审计工具图文教程:【Java代码审计 | 第十七篇】组件漏洞识别工具PomEye安装使用详细教程

在这里插入图片描述

2.审计配置文件

在 Java 代码审计过程中,配置文件是一个关键的审计对象,攻击者可能会通过配置文件获取敏感信息或利用不安全的配置方式进行绕过实现攻击。

故需要对项目的配置文件、过滤器、拦截器等进行详细审计,以发现潜在的安全风险。

2.1审计过滤器(Filter)

过滤器 (Filter) 在 Java Web 应用中用于拦截和处理 HTTP 请求和响应,常用于身份验证、日志记录、权限控制等。审计重点包括:

1、敏感数据泄露:过滤器是否对用户输入进行了适当的清理?是否可能泄露敏感信息?
2、绕过身份验证:过滤器是否正确配置?是否可能被绕过?
3、不安全的请求参数处理:是否直接信任用户输入的数据并传递给后端处理?

审计步骤:在 web.xml 中搜索doFilter

存在 XSS 漏洞的 Filter 示例:

@WebFilter("/*")
public class XSSFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        String username = req.getParameter("username"); // 直接获取用户输入
        
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>Welcome, " + username + "</h1>"); // 未进行 XSS 过滤
        out.println("</body></html>");

        chain.doFilter(request, response);
    }
}

问题: 代码直接将 username 参数的值拼接到 HTML 响应中,没有进行任何转义或过滤。

2.2审计配置文件(application.properties、application.yml)

Spring Boot 项目的核心配置通常存储在 application.properties 或 application.yml 文件中,审计重点包括:

1、数据库信息泄露:是否存储了明文数据库密码?是否启用了 spring.datasource.hikari.allowPoolSuspension=true 可能导致 DoS 攻击?
2、开放不安全的端口:是否对外暴露了管理接口?
3、调试模式开启:spring.devtools.restart.enabled=true 可能导致远程代码执行(RCE)。
4、日志信息泄露:日志级别是否为 DEBUG 或 TRACE,可能导致敏感信息泄露。

审计步骤:查看 application.properties 或 application.yml 文件

不安全的 application.properties 示例:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456

问题: 数据库密码以明文存储,可能被攻击者获取。应使用环境变量或加密存储(如 Jasypt)保护敏感信息。

2.3审计Config类

Spring Boot 中的 @Configuration 类通常用于定义 Bean 和应用程序配置,审计重点包括:

1、是否对外暴露了不安全的 Bean(如 DataSource、RestTemplate)?
2、是否存在 @Value 注解直接读取了敏感配置?
3、是否存在 @Bean 方法创建的对象可能被攻击者利用?

审计步骤:搜索WebMvcConfigurer

不安全的 Config 类示例:

@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate(); // 未限制 URL 访问范围,可能被 SSRF 利用
    }
}

问题: RestTemplate 未进行 URL 访问控制,可能导致 SSRF(服务器端请求伪造) 攻击。

2.4审计拦截器(Interceptor)

注意:
1、过滤器(Filter) 需要在 web.xml 中进行配置,适用于所有 Java Web 应用,可用于请求过滤、编码处理、安全检查等。
2、拦截器(Interceptor) 需要在 springmvc.xml 配置文件中定义,仅适用于 Spring MVC,通常用于权限控制、日志记录、全局数据处理等。

拦截器(HandlerInterceptor)用于在请求到达 Controller 之前进行处理,审计重点包括:

1、是否正确验证身份和权限?
2、是否对用户输入进行了必要的安全检查?
3、是否存储了用户的敏感信息?

审计步骤:进入 interceptor 目录(一般情况下为此目录)

不安全的 Interceptor 示例:

public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        String userId = request.getHeader("User-ID");
        if (userId != null) {
            User user = userService.getUserById(userId); // 直接信任请求头中的 User-ID
            request.setAttribute("user", user);
        }
        return true;
    }
}

问题: 直接从请求头获取 User-ID,可能导致身份伪造,应使用 JWT或Session进行身份验证。

3.正向排查

审计步骤:

1、搜索 @(.*?)Mapping\( —— 通过正则匹配 @RequestMapping、@GetMapping、@PostMapping 等注解,定位所有 Controller 层的接口。

2、分析外部可控参数 —— 检查 @RequestParam、@PathVariable、@RequestBody 等方式接收的参数,确定哪些参数是外部可控的。

3、跟踪参数流向 —— 确定这些参数是否传递到 危险方法(如 `SQL 执行、文件操作、反序列化、EL 表达式解析等)。

4、检查安全措施 —— 分析代码是否对用户输入进行了 参数校验、过滤或转义,确保没有安全风险。

4.逆向排查

审计步骤:

1、寻找危险函数 —— 从已知的危险操作入手,例如:

  • SQL 注入: executeQuery()、prepareStatement()
  • XSS: response.getWriter().write()
  • 文件上传: FileOutputStream、Files.write()
  • 远程调用: Runtime.exec()、ProcessBuilder
  • 反序列化: ObjectInputStream.readObject()
  • SpEL 表达式解析: ExpressionParser.parseExpression()

2、跟踪参数来源 —— 追踪传入危险函数的参数,检查它是否来源于外部可控输入(如 request.getParameter()、JSON 解析 等)。

3、验证安全措施 —— 判断是否对输入进行了 严格的参数校验和过滤,如:

  • SQL 注入:是否使用 预编译 SQL 语句(PreparedStatement)?
  • XSS 攻击:是否进行 HTML 转义(StringEscapeUtils.escapeHtml4())?
  • 文件操作:是否限制 文件路径,防止目录遍历?
  • 反序列化:是否使用 安全反序列化(如 ObjectInputStreamFilter)?
JAVA代码审计常用漏洞总结 主要代码审计方法是跟踪用户输入数据和敏感函数参数回溯: 跟踪用户的输入数据,判断数据进入的每一个代码逻辑是否有可利用的点,此处的代码逻辑 可以是一个函数,或者是条小小的条件判断语句。 敏感函数参数回溯,根据敏感函数,逆向追踪参数传递的过程。这个方法是最高效,最常用 的方法。大多数漏洞的产生是因为函数的使用不当导致的,只要找到这些函数,就能够快速挖掘想要的漏洞。 立即下载

相关推荐

全国大学校园网—拓扑图欣赏

全国大学网络拓扑图(一百张) 典型十张 1、 中央财经大学 2、国防科技大学 3、济南大学 4、西安石油大学 5、南通大学IPV6网络 6、中国矿业大学 7、青海师范大学 8、内蒙古科技大学 9、三峡大学 10、中共江苏省党校 剩余90张 点赞、评论获取 ...

LiBai'S BLOG 5万+

【代码审计-JAVA】javaweb代码审计思路

【代码审计-JAVA】javaweb代码审计思路

3806

关于笔记本测试的面试准备 2021-10-11

** 关于笔记本测试的面试准备 ** 一、根据JD分析,工作内容以软测为主,硬件知识需要了解一点。 以下几个问题为主要: 1.了解VGA、audio、wlan、bt、TP 、camera等driver,BIOS和image测试。 2.了解性能测试工具?压力测试相关设置? 3.了解preload流程? 二、解决 VGA: video graphics array ——笔记本上外接显示器的接口。 【VGA接口兼容性更强,但是不支持高分辨率。 支持高分辨率:HDMI、DIV、TP】 bt【Bluetooth

xw_009的博客 1866

java代码审计常见思路

找到外部传入的参数并对它进行追踪,查看有没有因为校验不严然后传入了一些高危方法,或者查看有没有代码逻辑漏洞给。代码审计以白盒测试为主,但可以通过黑盒测试快速定位接口和方法,更全面的分析。4.第三方组件,中间件审计,查看组件中间件版本,搜寻是否有历史漏洞的影响。查看敏感方法的参数,排查参数的传递与处理,判断变量是否可控并且严格过滤。使用静态工具可以显著提高效率,比如Fortify,昆仑镜,seay等。根据经验判断哪个部分更容易出现漏洞,直接对功能点代码进行审计。5.补丁对比,通过补丁逆推漏洞。

qq_63144807的博客 447

数据库系统概论课后习题答案(第五版 王珊、萨师煊)

第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表

早知晓的博客 11万+

dummy机械臂代码学习(六)

CLI-Tool文件夹下又包含四个子文件夹,以及一个gitignore文件、一个run_shell.py的python文件、一个run.bat文件和一个zadig exe文件。库解析命令行参数,并根据不同的命令执行相应的操作。Zadig是一个用于Windows操作系统的开源工具,它的主要功能是安装和配置USB驱动程序。的目的呢就是确保在版本控制过程中,不必要的或自动生成的文件被忽略掉,来保持代码仓库的干净和整洁。,DummyStudio的软件作者已放在GitHub,我们主要看CLI-Tool文件夹就行。

jumaohhh的博客 1432

代码审计之思路详解,(非常详细)从零基础入门到精通,收藏这一篇就够了

1. 什么是代码审计 (代码审计)代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。它是防御性编程范例的一个组成部分,它试图在软件发布之前减少错误。说白了:代码审计检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。

Python_0011的博客 2613

kettle多表数据迁移

点击 文件——新建——作业,在左侧的 核心对象 标签下选择 通用,双击添加一个 start ,一个 转换 ,一个 作业 和一个 成功 到右侧的作业面板,这些作业项都可以改名字。点击文件—新建—转换,在左侧的 核心对象 标签下选择 输入 下的 表输入,双击添加到右侧的转换面板,再选择 作业 下的 复制记录到结果 ,双击添加到右侧的转换面板。新建转换,在左侧的 核心对象 标签下选择 作业 下的 从结果获取记录,双击添加到右侧的转换面板,再选择 作业 下的 设置变量 ,双击添加到右侧的转换面板。

u014061745的博客 1341

java代码审计(入门级)—基础漏洞合集

介绍简单的java代码审计,识别程序中存在的经典漏洞

weixin_49349476的博客 3472

YOLO11 Backbone改进:二值化、三值化权重实战(一)

本文介绍了二值化/三值化神经网络的基本概念、优势挑战及应用场景。二值化网络将权重限制为±1,三值化则增加0值,显著减少模型存储需求和计算复杂度。虽然存在精度下降等挑战,但通过技术改进已能在移动设备、自动驾驶等领域应用。文章分析了YOLO11中适合量化的层,并详细阐述了二值化权重原理及Straight-Through Estimator等关键技术。二值化/三值化神经网络为资源受限设备提供了高效的深度学习解决方案。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 298

Python爬虫技术应用:体育赛事直播数据抓取与分析

Web爬虫(Web Crawling)是一种通过模拟浏览器行为从网站获取数据的技术。发送请求:发送HTTP请求(通常是GET或POST请求)获取目标网页的HTML内容。解析网页:使用解析工具(如lxml)从HTML中提取出所需要的信息。存储数据:将抓取到的数据存储到数据库、文件或数据结构中,供后续分析和使用。数据分析与展示:使用数据分析工具(如PandasMatplotlib)对数据进行处理、清洗和可视化,生成有价值的报告和图表。Requests:用于发送静态网页的HTTP请求并获取响应。

2201_76125261的博客 1309

零基础快速上手JAVA代码审计

网安面试指南》《Java代码审计》《Web安全》《应急响应》《护网资料库》

liguangyao213的博客 1292

新手必看:C#调用YOLO模型完成图片/视频目标检测(上位机版)

新手学习C#调用YOLO模型,核心是先把基础流程跑通,再逐步优化。图片检测是基础,视频检测就是在图片的基础上加循环和线程,而上位机的实际项目,就是在这个基础上适配工业硬件和业务需求。本文的代码都是新手能直接复制运行的,如果你运行时遇到问题,先检查前期准备是否到位,再看避坑指南。记住,新手别追求一步到位,先实现功能,再慢慢优化性能和界面。等你能熟练调用YOLO模型后,再去研究模型训练、量化优化等进阶内容,会轻松很多。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 987

Java代码审计XXE

获取参数data,通过inputSource进行提取的信息,进行外部实体解析。2、审计思路,全局搜索关键字,打开相关对应的文件。3.创建xml解析工厂。

qq_34012951的博客 210

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java代码审计:从入门到实战,全方位保障应用安全

Java代码审计是一种系统性地检查和分析Java应用程序源代码的过程,目的是发现潜在的安全漏洞、代码质量问题以及不符合最佳实践的代码片段。它不仅关注代码的功能性,更侧重于代码的安全性和健壮性。通过代码审计,开发团队可以提前发现并修复安全漏洞,避免因代码缺陷导致的安全事件,从而保护应用程序免受攻击。

1124

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java代码审计中不能忽略的思路-持续更新

  1.反射和动态加载 1.在java反序列化中,反射被频繁使用,使用反射修改,提取 2.动态代理的特性非常强大,java框架的过滤器就使用了动态加载这个特性 动态代理:https://juejin.cn/post/6844903591501627405 不仅在开发上,在安全领域,也广泛受用。 动态代理它的特点就是:被代理的类,调用任意方法,都会调用代理类的invoke方法。 利用这个tr...

玲珑安全的博客 194

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JAVA代码审计(函数定位)

java代码审计-函数定位

红队是青春 1093

Java代码审计之不安全的Java代码

一般来说,验证码是与Session绑定的,Session生成时,也伴随着验证码的生成和绑定,在访问页面时,接口的请求和验证码的生成通常是异步进行的,这使得两个功能变得相对独立。​ SQLI(SQL Injection), SQL注入是因为程序未能正确对用户的输入进行检查,将用户的输入以拼接的方式带入SQL语句,导致了SQL注入的产生。​ 反序列化漏洞,当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码(多见于第三方组件产生的漏洞)

xixixi7777的博客 1660

JAVA代码审计

小迪 2020-6 第55天 如果去分析代码:工具 加 手工 相结合的方法进行分析 Java代码审计,主要从代码层面分析: 主要分为三大类:1、常规性代码 2、框架性代码 ( 各种各样的开发框架) (最常见的 框架漏洞是 struts2 框架漏洞 ) ...

gjgj的博客 1万+

JAVAWEB代码审计技巧方法

JAVA代码审计技巧方法 在JAVA WEB代码审计中,首先要做的就是确定项目的依赖库组织形式,其次就是确定项目所使用的框架。 1.依赖库组织形式确定。组织形式一般有两类,maven与lib文件夹的依赖形式。maven组织形式必然存在pom.xml配置文件,该配置文件中标识了项目中所使用到的各类框架以及工具集,名称与版本。lib组织形式一般在src\main\webapp\WEB-INF\lib下存在大量jar包,其命名方式未库名+版本号形式。 **2.**项目所使用的框架确定。 如果是maven组织形式,

weixin_41872749的博客 1337

web.xml 中的listener、 filter、servlet 加载顺序及其详解

网上查询了下web.xml中配置的加载优先级:         首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:listener -> filter -> servlet         同时还存在着这样一种配置节:context-param,它用于向 ServletC

敲键盘的猫 612

Java代码审计(6)XSS审计思路

0、前言 0.1 XSS的审计思路 0.2 补充一些知识 1、反射型XSS审计 2、存储型XSS审计 2.1、搭建项目: 2.2、审计 3、存在过滤的XSS项目 4、XSS的修复 4.1、XSS的修复的主要分为两点:

划水的小白白 1311

Java代码审计怎么做?

Java代码审计怎么做?

半夏_2021的博客 3347

java代码审计_Java代码审计| Spring框架思路篇

Java的WEB框架是Java进阶课程,当要进行Spring的漏洞分析,要有一定的Java代码知识储备。Java后端标准的学习路线:JavaSE->JavaEE->Java Web框架Spring是Java最核心,最重要的框架。0X01 审计环境准备当进行Spring的代码审计(Spring某一个组件包进行分析)时,首先要有相应Spring项目源码,要让没有编写代码经验的朋友从头编写一...

weixin_42365234的博客 1045

代码审计系列篇一之代码审计学习思路

学习代码审计要熟悉三种技术,分四部分走 一:编程语言   1:前端语言 html/javascript/dom元素使用 主要是为了挖掘xss漏洞 jquery 主要写一些涉及到CSRF脚本使用的或者DOM型XSS,JSON劫持等 2:后端语言 基础语法要知道例如 变量类型,常量,数组(python 是列表,元组,字典),对象,类的调用,引用等, MVC设计模式要清楚,因为大部分目标程序都是基于MV...

xiaoi123的博客 1184

代码审计的思路

seay 代码审计中总结: 常见的代码审计思路有以下四种:  1) 根据敏感关键字回溯参数传递过程 2) 查找可控变量,正向追踪变量传递过程 3) 寻找敏感功能点,通读功能点代码 4) 直接通读全文代码     一:根据敏感关键字回溯参数传递过程 根据敏感函数来逆向追踪参数的传递过程,是目前使用得最多的一种方式,因为大多数漏洞是由于函数的使用不当造成的。另外非函数使用不当的漏

duangduang2020的博客 1393
上一篇: 【Java代码审计 | 第十七篇】组件漏洞识别工具PomEye安装使用详细教程
下一篇: 宝塔面板结合内网穿透打造你的专属云端FTP服务器远程在线传输文件
秋说
秋说 优质创作者: 编程框架、信息安全技术领域 优质创作者: 编程框架、信息安全技术领域
博客等级 码龄4年 3万+粉丝 1906原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值