[ 代码审计篇 ] Java web 代码审计 详解(一)

简介: 之前写了一篇关于代码审计流程的文章,有小伙伴私聊我说不太好理解,这里开始介绍 Java web 的代码审计,同样的来捋一捋审计思路,这就相对要具体一些。

🍬 博主介绍


👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~

✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】

🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋

🎉欢迎关注💗一起学习👍一起讨论⭐一起进步📝文末有彩蛋

🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


一、代码审计是什么



代码审计(Code Audit)是一种以发现安全漏洞、程序错误和程序违规为目标的源代码分析技能。在实践过程中,可通过人工审查或者自动化工具的方式,对程序源代码进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议

是上线之前必须要做的一个工作,防止产生一些可以避免的安全漏洞。


二、为什么要学 Java web 代码审计



Java 越来越火,Java web 应用的越来越广泛

Php 在一些中小型企业任占有一席之地,但是在主流的大型应用中,java任是首选。

作为安全行业从事者的,掌握 java 代码审计已经成为关键性的一环。


三、代码审计常见思路



image.png


1. 概述:

首先使用工具对代码进行扫描,然后根据设定好的一些规则进行一个匹配,从而找到可能存在漏洞的一些地方,然后结合人工审查匹配,确定这个地方是不是有漏洞。


代码里我们使用工具能发现一些常规的漏洞,但不是所有的漏洞都能找得到,所以还需要结合人工审计的方式来对代码进行审计。


为了在应用代码中寻找目标代码的漏洞,需要有明确的方法论做指导。方法论的选择则要视目标程序和要寻找的漏洞类型而定,以下是一些常用思路:


2. 接口排查("正向追踪")

先找出从外部接口接收的参数,并跟踪其传递程,观察是否有参数校验不严的变量传入

高危方法中,或者在传递的过程中是否有代码逻辑漏洞(为了提高排查的全面性代码审计人员可以向研发人员索要铵以检查敏感方法的参数并查看参数的传选的单。


扫描出来了,这里可能存在一个漏洞,例如:这个项目做了一个前后端分离。我就找后端代码发生的一个原因,首先就要去找他的接口,然后通过接口传递的方式一步一步往后面找,发现到底是哪一个方法出现了这个漏洞,然后我们再进行一个修复。


3. 危险方法溯源("逆向追踪")

处理判断变量是否可控并且已经过严格的过滤。

根据我们的经验,我们可以找到哪一些方法是有危险的,我们重点排查和这些方法。


4. 功能点定向审计:

根据经验判断该类应用通常会在哪些功能中出现漏洞。


5. 第三方组件、中间件版本比对:

检查Web应用所使用的第三方组件或中间直接审计该类功能的代码。件的版本是否受到已知漏洞的影响。


很多的第三方组件都是存在漏洞的。所以就必须知道怎么去审查这个第三方组件,必须知道哪些第三方组件已经存在漏洞,我们不能去使用它。


6. 补丁比对:

通过对补丁做比对,反推漏洞出处。

第三方补丁不能保证它百分之白没有漏洞


7. "黑盒测试"+"白盒测试"

虽然代码审计的过程须以"白盒测试"为主,但是在过程中辅以"黑盒测试"将有助于快速定位到接口或做更全面的分析判断。


交互式应用安全测试技术IAST就结合了"黑盒测试" "白盒测试"的特点。

代码审计往往会结合黑盒测试和白盒测试来进行审计。


8. "代码静态扫描工具"+ "人工研判"

对于某些漏洞使用代码静态扫描工具代替人工漏洞挖掘可以显著提高审计工作的效率。

然而,代码静态扫描工具也存在"误报率高"等缺陷,具体使用时往往需要进一步研判


9. 开发框架安全审计:

审计web应用所使用的开发框架是否存在自身安全问题,或者由于用户使用不当而引发的安全风险。


四、黑盒测试和白盒测试



1. 黑盒测试

黑盒测试又称为功能测试,主要检测软件的每一个功能是否能够正常使用。

在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用。

image.png


2. 白盒测试

白盒测试也称为结构测试,主要用于检测软件编码过程中的错误。

程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误。

image.png


3. 举例说明


1. 黑盒测试:

相当于你去验收一个工程,比如:强能防爆多少顿炸药,我们就拿多少的炸药试一下就行了,墙被炸了,就不合格。

可以使用任何方式对这个项目来进行渗透和测试。


2. 白盒测试:

假如我作为一个甲方人员来进行测试,开发方就必须把所有资料给到我,设计图纸,那一块多少混泥土,多少钢筋,用的是什么型号都要告诉我。


那我就知道这个墙能够承受多少,力学模型都知道了,我结合所有的资料就可以知道你这个工程是不是合格的。或者说那些地方可能存在哪些问题。


就是给你源代码,你结合工具或者经验对代码进行分析。


五、代码审计和渗透测试的关系



1. 渗透测试优点:

高速提交测试参数,通过前端进行渗透,通过发送数据包到后台服务器。

快速发现多层结构的漏洞,根据漏铜的分类,大概能判断是哪一层结构的问题。


2. 代码审计优点:

全面,深入的发现漏洞。


3. 两者之间的关系:

相互补充,彼此强化。

代码审计发现问题,渗透测试确定可利用性。

渗透测试发现问题,代码审计确定成因。


六、代码审计的优势



1、提高代码质量

2、降低成本

如果在项目上线后才发现bug开发人员可能以及调离到其他的项目,协调成本太高。

上线后被白帽子发现成本也很高,黑客利用,数据丢失,成本更高。


七、代码审计的工作流程



1. 配置分析环境

2. 熟悉业务流程

3. 分析程序架构

4. 工具自动化分析

5. 整理审计报告

6. 整理审计报告image.png

相关文章
|
2月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
353 1
|
2月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
317 0
|
3月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
480 64
|
3月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
300 1
|
4月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
541 0
|
4月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
315 0
|
9月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
607 7
|
10月前
|
SQL 安全 前端开发
对于Java代码审计,主要的审计步骤如下:
### Java代码审计简介 Java代码审计是确保应用程序安全的重要步骤,主要包括以下几个关键环节: 1. **确定项目结构与技术框架**:了解项目的整体架构和技术栈。 2. **环境搭建**:配置开发环境,确保能够正常运行项目。 3. **配置文件分析**:重点分析`pom.xml`、`web.xml`等配置文件,特别是依赖组件的版本是否存在已知漏洞。
|
10月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
571 9
|
11月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
654 7
Spring Boot 入门:简化 Java Web 开发的强大工具