Java代码审计
文章平均质量分 93
本专栏将围绕常见的安全问题(如SQL注入、XSS、LFI等),结合Java的编程特性,提供详细的审计技巧、漏洞识别方法和防御措施。无论是初学者还是有经验的开发人员,都可以通过本专栏提升对Java应用程序安全性评估和加固的能力,构建更加安全、可靠的系统。
秋说
全栈开发与网安实战导师 | 欢迎订阅优质付费专栏,专注做「新手能看懂、学完能实战」的友好型全栈技术教程。商务合作/项目毕设指导/产品推广/技术支持→私信沟通
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Java代码审计】FortiNAC 远程代码执行漏洞(二)
commandVector 队列会被检查,取出并移除队列头部的一个条目。对于该条目,会获取其 commandName 值 [21] 作为 systemCommand,然后遍历其 args 列表,将参数拼接成一个完整的字符串 [22]。最终,在 [23] 处,通过经典的 java.lang.Runtime.getRuntime().exec(String command) 调用执行整个命令。更关键的是,这个调用是以 sudo 权限执行,这意味着可以从 nac 用户直接提升到 root 权限。原创 2025-09-13 15:24:35 · 794 阅读 · 0 评论 -
【Java代码审计】FortiNAC 远程代码执行漏洞(一)
我已经预料到,程序自带的依赖库中就存在可被利用的类(gadget)。虽然某些新版本的 Java 对反序列化进行了限制或修复了部分漏洞,但所使用的 Java 版本 1.8.0_332 并未阻止这些 gadget 的使用,因此攻击可以顺利进行。在 /bsc/campusMgr/lib 目录下有许多常用的 Java 库,其中 commons-beanutils-1.9.2.jar 就是一个典型的可用于反序列化攻击的库。原创 2025-09-13 15:23:51 · 690 阅读 · 0 评论 -
【代码审计】安全审核常见漏洞修复策略
后端返回数据时避免拼接 HTML,使用前端渲染;模板引擎需确保开启自动转义;若使用 JSON API,确保前端做好输入编码、输出渲染安全。Spring Boot 应配置静态资源路径明确,不应自动映射 /resources/ 或 /config/ 为 web 访问路径。原创 2025-07-01 11:19:32 · 1540 阅读 · 0 评论 -
【Java代码审计 | 第一篇】Spring应用程序架构审计要点
Spring 是一个功能强大的 Java 开源框架,主要用于简化 Java 企业级应用开发。它提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等核心特性,并支持集成各种 Java 技术(如 JDBC、JPA、Spring MVC)。Spring 通过 IoC(控制反转)容器管理对象生命周期,减少了代码耦合,提高了开发效率。原创 2025-03-07 14:48:37 · 1511 阅读 · 0 评论 -
【Java代码审计 | 第二篇】SQL注入之JDBC
会作为参数传递给数据库,而不是直接拼接到 SQL 语句中。这样可以避免 SQL 注入,并提升查询性能(数据库可以对预编译语句进行缓存和优化)。视为一个完整的字符串,而不是 SQL 语句的一部分。这种方式避免了直接拼接 SQL 语句,同时仍然保持一定程度的安全性。是字符串而非字段名,SQL 语句不会按照预期执行。,从而绕过身份验证,甚至窃取或修改数据库中的数据。变量,而该变量可能是用户输入的内容,极易引发。中选择,因此不会引发 SQL 注入问题。在上述代码中,SQL 语句中直接拼接了。原创 2025-03-07 15:19:39 · 1350 阅读 · 0 评论 -
【Java代码审计 | 第三篇】SQL注入之Hibernate、MyBatis
我们可以轻松地与 Hibernate 集成,从而提高开发效率并减少 SQL 操作的复杂性。当我们使用 Hibernate 的方法时,它会自动处理查询语句并使用预编译的方式与数据库交互,从而避免了 SQL 注入风险。方法时,涉及动态拼接 SQL 的场景(如 LIKE、ORDER BY、IN 等)时,Hibernate 不再自动生成 SQL 语句。框架,它将数据库中的表与 Java 类进行映射,简化了数据库操作。中,MyBatis 会在运行时解析并执行该 SQL 语句。,实现 SQL 的分离管理。原创 2025-03-07 15:22:48 · 1343 阅读 · 0 评论 -
【Java代码审计 | 第四篇】SQL注入防范
这里通过 checkSort 方法,限定 ORDER BY 只能使用 白名单中的字段(id、username、email),如果 sortBy 不是合法字段,则默认按 id 排序。2、SELECT, INSERT, UPDATE:允许 app_user 在数据库 mydb 中执行 查询(SELECT)、插入(INSERT)、更新(UPDATE) 操作。4、TO ‘app_user’@‘localhost’:只将这些权限授予 本机的 app_user。)、双减号 (–)替换为空字符串 “”,即删除这些字符。原创 2025-03-07 15:37:19 · 1469 阅读 · 0 评论 -
【Java代码审计 | 第五篇】XSS漏洞成因+实战案例
XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的Web安全漏洞,攻击者通过在网页中注入恶意脚本,使得这些脚本在用户的浏览器中执行。XSS攻击通常分为以下三种类型1、存储型XSS:恶意脚本被永久存储在目标服务器上(如数据库),当用户访问包含该脚本的页面时,脚本被执行。2、反射型XSS:恶意脚本作为请求的一部分发送到服务器,服务器将脚本嵌入到响应中返回给用户,脚本在用户浏览器中执行。3、DOM型XSS:恶意脚本通过修改页面的DOM结构来执行,不经过服务器处理。原创 2025-03-07 16:22:49 · 1059 阅读 · 0 评论 -
【Java代码审计 | 第六篇】XSS审计流程、审计案例及防范
对用户输入进行严格的验证,确保输入符合预期的格式和类型。例如,使用正则表达式验证输入是否为合法的电子邮件地址、电话号码等。CSP是一种浏览器安全机制,可以通过HTTP头来限制页面中可以执行的脚本来源,从而减少XSS攻击的风险。尽量避免将用户输入直接嵌入到JavaScript代码中。如果必须这样做,确保对输入进行适当的转义。在输出用户输入时,对特殊字符进行转义,防止它们被解释为HTML或JavaScript代码。使用安全的库和框架来处理用户输入和输出,例如Spring框架中的。原创 2025-03-07 16:23:22 · 1195 阅读 · 0 评论 -
【Java代码审计 | 第七篇】文件上传方式、漏洞成因、防范及审计思路
文件上传漏洞是指攻击者通过上传恶意文件(如可执行脚本、病毒、木马等)到服务器,从而执行恶意操作或获取服务器控制权的安全漏洞。一般发生在应用程序未对上传的文件进行严格的验证和限制时。使用经过验证的文件上传库(如 Apache Commons FileUpload),并确保库的版本是最新的。使用随机文件名保存上传的文件,避免攻击者通过文件名猜测文件路径。:文件上传路径未做限制,攻击者可以通过构造特殊文件名(如。:未验证文件类型和扩展名,攻击者可以上传任意文件(如。)验证文件内容是否与扩展名匹配。原创 2025-03-07 16:41:08 · 1561 阅读 · 0 评论 -
【Java代码审计 | 第八篇】文件操作漏洞成因、防范及审计思路
使用 getCanonicalPath() 方法获取文件的规范路径,并与预期的基路径进行比较,确保文件路径在允许的范围内。filename 参数未经过任何验证或过滤,攻击者可以通过构造恶意路径下载系统敏感文件。filename 参数未经过任何验证或过滤,攻击者可以通过构造恶意路径删除系统关键文件。在Java中,文件读取通常有两种常见方式:一种是基于。以下两种代码形式都存在路径遍历问题。原创 2025-03-07 16:58:00 · 1006 阅读 · 0 评论 -
【Java代码审计 | 第九篇】文件写入漏洞成因及防范
3、如果文件内容未经过滤,攻击者可以写入恶意代码(如 JSP 脚本、SQL 语句等),导致服务器被攻击。1、如果文件内容被直接写入 HTML 文件且未进行转义,攻击者可以注入恶意脚本(如。将文件写入操作限制在特定的安全目录中,防止攻击者通过路径遍历覆盖系统文件。2、如果文件名未经过滤,攻击者可以通过构造恶意路径(如。文件写入功能不同于上文的文件下载、读取、删除功能。),导致 XSS 攻击。原创 2025-03-07 18:23:49 · 959 阅读 · 0 评论 -
【Java代码审计 | 第十篇】命令执行漏洞成因、防范及审计思路
注意,在 Java 中,尽管可以使用 Runtime.getRuntime().exec() 执行系统命令,但与 PHP 不同的是,Java 会将传入到该函数的参数视为一个完整的字符串,而不会受到 Shell 特殊符号(如 &、;然而,在涉及 Runtime.exec() 类型的远程代码执行(RCE)时,如果需要反弹 Shell,则必须进行特殊处理。时,Java 会使用空格拆分字符串,并将其作为独立的参数传递给操作系统。如果必须执行系统命令,应尽量降低应用程序的权限,避免以高权限(如 root)运行。原创 2025-03-07 20:08:26 · 1450 阅读 · 0 评论 -
【Java代码审计 | 第十一篇】SSRF漏洞成因、防范及审计思路
SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种安全漏洞,攻击者可以利用该漏洞诱使服务器向内部或外部的任意系统发起请求。通过SSRF,攻击者可以绕过防火墙或访问限制,访问内部资源,甚至攻击内网中的其他服务。常见的攻击场景包括:访问内网中的敏感数据。扫描内网端口和服务。利用服务器作为跳板攻击其他系统。访问云服务元数据(如AWS的元数据服务)。原创 2025-03-09 08:54:41 · 870 阅读 · 0 评论 -
【Java代码审计 | 第十二篇】SSRF漏洞之“跨协议”
跨协议”指的是代码能够通过多种协议(如httphttpsftpfile等)访问资源。:通过HTTP协议访问网页。:通过文件协议访问本地文件。:通过FTP协议下载文件。在SSRF漏洞中,攻击者可以利用“跨协议”特性,诱使服务器访问本地文件、内网服务或其他非预期的资源。在Java中,发送HTTP请求的常见方式有以下几种。原创 2025-03-09 09:01:37 · 713 阅读 · 0 评论 -
【Java代码审计 | 第十三篇】XXE漏洞成因、防范及审计思路
XXE(XML External Entity,XML外部实体注入) 是一种安全漏洞,攻击者通过利用XML解析器处理外部实体的功能,读取本地文件、发起网络请求或导致拒绝服务攻击。XXE通常发生在应用程序解析用户提供的XML输入时,未禁用外部实体解析的情况下。禁用外部实体解析、对用户提供的XML输入进行严格的验证、选择默认禁用外部实体解析的库,或在初始化时显式禁用。1、读取本地文件:通过加载外部实体,读取服务器上的敏感文件(如/etc/passwd)。风险:如果未禁用外部实体解析,可能导致XXE漏洞。原创 2025-03-09 09:26:44 · 960 阅读 · 0 评论 -
【Java代码审计 | 第十四篇】MVC模型、项目结构、依赖管理及配置文件概念详解
webapp目录是传统Java Web项目的Web资源目录,通常用于存放JSP文件、WEB-INF配置等。一个典型的Java Web项目的src/main下通常包含以下几个核心目录:java目录、resources目录、webapp目录,以及test目录。这些资源文件包括配置文件、静态资源、模板文件等,通常会被打包到最终的应用程序中,供运行时使用。在Java中,模型通常是一个POJO(Plain Old Java Object)类,或者是一个实体类(Entity)。VO通常用于展示层,确保数据的安全性。原创 2025-03-16 16:18:20 · 937 阅读 · 0 评论 -
【Java代码审计 | 第十五篇】客户端交互流程、注解及函数概念详解
在Java Web应用中,URL请求流程是客户端与服务器之间交互的核心过程。它描述了从用户发起请求到服务器返回响应的完整生命周期。客户端服务端交互的全流程如下。1、用户发起请求。2、浏览器将域名解析为服务器的IP地址。3、浏览器通过TCP协议与服务器建立连接。4、浏览器将请求信息(如URL、请求头、请求体等)打包成HTTP请求报文,发送到服务器。5、服务器接收到HTTP请求后,将其解析为Java对象(如HttpServletRequest)。接着,请求到达MVC(Model-View-Controller)原创 2025-03-16 16:24:31 · 859 阅读 · 1 评论 -
【Java代码审计 | 第十六篇】项目审计思路:第三方组件、配置文件、正逆向排查
1、数据库信息泄露:是否存储了明文数据库密码?2、拦截器(Interceptor) 需要在 springmvc.xml 配置文件中定义,仅适用于 Spring MVC,通常用于权限控制、日志记录、全局数据处理等。2、分析外部可控参数 —— 检查 @RequestParam、@PathVariable、@RequestBody 等方式接收的参数,确定哪些参数是外部可控的。1、过滤器(Filter) 需要在 web.xml 中进行配置,适用于所有 Java Web 应用,可用于请求过滤、编码处理、安全检查等。原创 2025-03-17 09:29:07 · 2374 阅读 · 0 评论 -
【Java代码审计 | 第十七篇】组件漏洞识别工具PomEye安装使用详细教程
在 Java 代码审计过程中,我们经常需要对项目中引用的第三方组件进行安全审计。然而,手动检查每个组件的版本并搜索相关漏洞不仅耗时繁琐,还容易出错。因此,PomEye出现了——这是一款能够自动解析 pom.xml 文件,提取第三方组件版本号,并识别组件漏洞的高效工具。主要特色1、精致、优雅、易用的图形化用户界面,提供直观的交互体验。2、高效稳定的解析能力,基于 BeautifulSoup4 解析 pom.xml 文件,确保快速、准确地提取组件信息。原创 2025-03-17 09:02:16 · 1017 阅读 · 0 评论 -
【Java代码审计 | 第十八篇】未授权漏洞代码审计及鉴权方式说明
它的作用是告诉 Spring Security,你需要对 HTTP 请求进行授权保护,并为不同的 URL 设置不同的访问权限。它提供了一系列的端点(Endpoints),通过这些端点可以获取应用程序的各种运行时信息,比如健康状况、性能指标、Bean 列表、环境变量等,还能对应用进行一些动态操作,如刷新配置等。Druid 是阿里巴巴开源的数据库连接池,它不仅提供了高性能的数据库连接管理,还集成了监控功能,可以通过 Web 界面查看 SQL 执行情况、监控数据库连接、查看慢查询等信息。原创 2025-03-18 15:11:46 · 1353 阅读 · 2 评论
分享