news 2026/1/17 9:34:53

java代码审计 || 第一章~第三章

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java代码审计 || 第一章~第三章

说明:最近在系统学习这本书《Java代码审计 入门篇》由徐焱主编。内容来源于此书,笔者做的笔记。有兴趣可以读一下这本书,非常推荐的值得研究的一本书

java代码审计的重要性不言而喻,事前发现、预防,做到未雨绸缪,我认为是安全左移重要的一环,虽前期投入较多,会大大减少被攻击的口子。安全的防御体现在方方面面:代码安全、数据安全、隐私保护、业务安全、供应链安全等等

第一章 初识

1.意义

提前部署相应安全防御措施,可落实“安全左移”

CNVD安全月报显示,web应用漏洞占比仍大(仍需重点关注)

2.渗透测试流程

确定站点指纹—》通过旁站扫描备份或开源程序得到源代码—》代码审计—》利用审计出来的漏洞

3.云原生的代表技术

微服务和声明式 API

云原生安全建设初期源代码审计,将安全投资更多地放到开发安全:安全编码、供应链(软件库、开源软件)安全、镜像(仓库)安全等,可减少安全投资、增加攻击难度的效果

代码安全审计在当下以至未来均可对Web应用安全的防护重要作用。

4.能力

动静结合

动—具备调试程序的能力,代码逻辑比较复杂,通过多次调试或关键位置设置断点辅助理解

静—具备编程基础,了解基本语法与面向对象思想。阅读代码理解代码逻辑,善于查阅文档和资料,就能解决大多数问题

5.常用思路

1)接口排查(“正向追踪”)

找出从外部接口接收的参数,并跟踪其传递过程,

观察是否有参数校验不严的变量传入高危方法中,或者在传递的过程中是否有代码逻辑漏洞

2)危险方法溯源(“逆向追踪”)

检查敏感方法的参数,并查看参数的传递与处理,判断变量是否可控且是否有严格过滤

3)功能点定向审计

根据经验判断哪些功能点容易出现漏洞

4)第三方组件、中间件版本比对

web应用所使用的第三方组件或中间件的版本是否受到已知漏洞的影响

5)补丁比对

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

6)黑盒+白盒测试

“白盒少直觉,黑盒难入微”

以白盒为主,在过程中辅以黑盒将快速定位到接口或做更全面的分析判断

7)代码静态扫描工具+人工研判

代码静态扫描工具代替人工漏洞挖掘可显著提高审计工作效率

但误报率高,需要人工研判

8)开发框架安全审计

审计web应用所使用的开发框架是否存在自身安全性问题

第二章 环境搭建

1.jdk的下载与安装

这里不介绍

2.docker

1)简介

轻量级的虚拟机。借助docker制作漏洞运行环境,便于后续调试和保存漏洞特定环境。

漏洞环境集合Vulhub,基于docker和docker-compose来搭建的

(安全研究可直接使用docker生成一个带有特定漏洞的容器进行调试分析,减少在环境配置上的消耗,专注于研究漏洞本身)

2)安装

下载安装:https://www.runoob.com/docker/docker-tutorial.html

macOS/Ubuntu/CentOS/Windows

3)配置过程(这里是win10)

下载—》运行Docker Desktop Installer.exe—》next直至安装—》运行桌面Docker Desktop右键—》Settings---》网络因素限制,配置国内镜像源---》结合实际分配合理的镜像存放地址、内存大小---》Docker Engine---》registry-mirrors的值设定为“https://hub-mirror.c.163.com/---》Apply & Restart保存修改并重启

4)验证安装成功与否

打开命令行终端---》docker run ubuntu echo“helloworld”---》回显helloworld即成功安装

5)docker基本使用方法

docker镜像类比(软件的模版、系统的快照)

使用命令行方式进行镜 像的搜索、拉取、查看等,或者容器的开启与关闭等操作

6)镜像操作

  1. 搜索镜像:search命令 搜索指定名称和仓库的镜像,如搜索tomcat的镜像

docker search tomcat

  1. 拉取镜像:pull命令 拉取指定仓库和名称以及标签的镜像,如获取获取dordoka/tomcat 的镜像

docker pull dordoka/tomcat

  1. 查看镜像:images命令 读取已经拉取到本地的镜像文件。并列出镜像所存放仓库名、TAG标签、镜像编号、创建时间、镜像大小
  2. 删除镜像:rmi指令 删除已拉取到本地的镜像

镜像运行态,需先停止以这个镜像为模版生成的容器,容器停止时,可以-f强制删除镜像

注意:镜像被强制删除后,原先的容器仍然可以继续使用(比喻为镜像是修图软件的滤镜,容器是已经使用此滤镜生成的图片,滤镜删了这个使用了滤镜的图片还是存在的~)

7)容器操作

  1. 生成容器:run指令 以指定的镜像为模版生成对应的容器,并自动从仓库中拉取镜像到本地

如生成一个dordoka/tomcat的容器

docker run dordoka/tomcat

run指令接受多种参数

-p 容器内部端口绑定到指定的主机端口

-P 容器内部端口随机映射到主机的端口

-t 提供终端输入

-i 提供交互

-d 容器在后台运行

docker run -p 8080:8080 –d dordoka/tomcat

启动一个Tomcat的容器,希望可访问它的8080端口,并在容器启动后在后台默默运行(容器生成后可在浏览器访问本地的8080端口访问容器的Tomcat服务127.0.0.1:808/xx/xx)

第一个8080是本机的端口号,第二个是容器中运行Tomcat服务的端口号

生成容器以后,立即获得容器的交互式终端来管理容器内部的配置

docker run -it ubuntu 生成一个简易的Ubuntu系统容器,会获得一个交互式终端,可执行Linux的各类命令

2)退出容器 exit命令 注意终端用户名的变化

3)查看容器 ps命令 列出已生成且仍运行的容器,并且会列出容器的编号、所使用的镜像、端口映射等信息

还可添加参数筛选

-a 列出仍在运行和已经退出的容器

-q 仅列出容器的编号

4)停止容器 stop命令 将不需要运行的容器停止,就如同将电脑关机一样,状态Up变为Exited

docker stop 28

28停止容器、启动容器、进入容器和删除容器等操作,不需要提供完整的容器编号,只需填写编号的部分内容,docker会自动匹配到相应容器

5)启动容器 start命令

docker start 28

6)进入容器 exec命令

有时需要进入容器内部安装软件或修改配置

docker exec –it 6e /bin/bash 进入编号缩写为6e的容器内部

7)删除容器 rm命令

删除之前需要停止正在运行的容器停止,否则无法删除

docker rm 6e s删除编号为6e的容器

8)复制文件进出容器 cp命令

docker cp ./flag.txt 28:/var 将物理机的flag.txt文件复制到编号缩写为28的容器中var目录下

docker cp 28:/var/flag2.txt C:\Users\test 将容器的falg2.txt复制到物理机桌面的test文件夹中

3.使用Vulhub 快速搭建漏洞验证环境

基于docker-compose技术的一款漏洞集成环境

docker-compose简介:compose是用于定义和运行多容器docker应用程序的工具

方便地创建比较复杂的容器

启动漏洞环境:

进入相应的漏洞文件夹—》docker-compose up –d---》通过浏览器访问漏洞环境

4.远程调试

1)对jar包远程调试

使用IDEA

java –jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 xxx.jar作为启 动参数运行Jar 包

5.项目构建工具

1)maven

项目构建工具,可以对Java项目进行构建和管理

pom.xml文件用于管理源代码、配置文件、开发者 的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系 等

2)Swagger

开源软件框架,帮助开发人员设计、构建、记录和使用Restful Web应用,它将代码和文档融为一体

通过http://Path/swagger-ui.html 可为前端展示相关的API文档,并像使用postman以及Curl命令一样,通过web界面进行接口测试

第三章 代码审计辅助工具简介

1.代码编辑器

1)Sublime

轻量级、功能强大的代码及文本编辑器,允许用户以插件的形式扩展功能

2)IDEA

自带反编译、动态调试、代码搜索等

2.测试工具

1)Burp Suite

2)SwitchyOmega

代理管理插件

3)Max HackerBar

插件

4)postman

网页调试工具,能够为用户提供强大的 Web API&HTTP请求调试功能。postman能够发送任何类型的HTTP请求,方便测试人员观察响应的内容

5)postwoman

便捷的API接口调试工具,用于替代postman且免费开源、轻量级、快速美观的API调试工具,支持主流的restful接口调试外,还支持GraphQL 和webSocket

6)Tamper Data

是Firefox浏览器的一款web安全测试插件。功能:查看修改HTTP/HTTPS的请求头和请求参数;跟踪HTTP请求/响应并记时;对web站点进行安全测试(查阅资料,这款插件已经多年了,目前不怎么使用)

7)Marshalsec

开源的java反序列化测试工具,生成各类反序列化利用链,还可以快速启动恶意的RMI服务等

8)MySQL监视工具

监视所执行的SQL记录

a.MySQL日志查询工具

基于MySQL的日志查询、跟踪、分析工具。

b.MySQL monitor

是web版本的SQL记录实时监控工具

9)Beyond Compare

文件比较工具,代码审计人员快速比对两个版本代码的差别

3.反编译工具

需要审计的程序通常是一个.class文件或jar包。需要对程序进行反编译,以便于在代码审计时快速搜索关键字

1)JD-GUI

具有UI界面的反编译工具,界面简洁大方

2)FernFlower

比JD-GUI更强大,没有UI界面

java –jar fernflower.jar tomcat-jni.jar Test/

3)CFR

4)IDEA

4.java代码静态扫描工具

发现隐藏的漏洞,辅助

1)Fortify SCA –收费

2)VCG(VisualCodeGrepper) ---支持多语言

3)FindBugs与FindSecBugs插件

FindBugs 是Bug扫描插件,在IDEA可安装,不具备发现安全漏洞的能力

FindSecBugs 拓展发现安全漏洞的能力

4)SpotBugs

是FindBugs的继任者,二者用法一样

其他工具,收费的CheckMark、开源的Cobra等。或多或少存在误报、漏报

5.公开漏洞查找平台

1)CVE(Common Vulnerabilities & Exposures,通用漏披露)

会列出已公开披露的各种计算机安全漏洞

2)CVSS(通用漏洞评分系统)

3)NVD 美国国家通用漏洞数据库

同CVE一样会收录漏洞信息

4)CNVD(China National Vulnerability Database)中国国家信息安全漏洞共享平台

5)CNNVD(China National Vulnerability Database of Information Security)中国国家信息安全漏洞库

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/21 5:09:40

如何用AI优化代码性能:Perf工具与AI结合实践

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个AI辅助的Perf分析工具,能够自动解析Linux perf工具的输出日志,识别热点函数、缓存未命中等性能瓶颈,并给出具体的优化建议。要求&#x…

作者头像 李华
网站建设 2026/1/9 10:32:47

Python初学者必看:轻松搞定libpython缺失错误

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向初学者的图文教程,用非技术语言解释:1) 什么是动态链接库;2) 为什么会出现这个错误;3) 三种最简单的解决方法&#xff0…

作者头像 李华
网站建设 2026/1/12 4:14:42

AI一键搞定ComfyUI安装:告别复杂配置

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个自动化安装ComfyUI的Python脚本,要求:1.自动检测系统环境(Windows/macOS/Linux)2.处理Python版本和虚拟环境配置3.安装PyT…

作者头像 李华
网站建设 2025/12/23 4:27:35

gpt-oss-20b本地部署与推理全指南

GPT-OSS-20B 本地部署与推理全指南 在大模型日益“军备竞赛”的今天,动辄上百亿参数的闭源模型固然强大,但其高昂的部署成本和对云端服务的依赖,让许多研究者和开发者望而却步。有没有一种可能——既能享受接近 GPT-4 的交互体验&#xff0c…

作者头像 李华
网站建设 2025/12/21 23:29:16

mount -a vs 手动挂载:效率对比实测

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个性能测试工具,用于比较mount -a批量挂载与手动挂载的效率差异。工具应能:1) 自动生成测试用的fstab配置;2) 测量并记录两种方式的执行时…

作者头像 李华
网站建设 2025/12/26 5:59:16

生产环境中解决libpython缺失错误的5个实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 生成一个包含5个典型场景的解决方案文档:1) Docker容器中缺失库的修复;2) 虚拟环境配置错误;3) 多版本Python共存导致的问题;4) CI/C…

作者头像 李华