
Java安全代码审计分析
文章平均质量分 93
本专栏记录博主Java安全学习的路线,从Servlet到Spring SpringMVC MyBaits,再进行CC链的分析,log4j漏洞、Fastjson反序列化、shiro550、内存马、EL、SpEL表达式注入......后续会分析到有关分布式开发,K&S和docker方面的安全问题。
@Camelus
心存敬畏,行有所止。
展开
-
web安全——Mybatis防止SQL注入& ssrf漏洞利用& DNS污染&同源策略
CORS可以让跨域请求携带认证信息,例如cookie、session等,这也意味着攻击者可以通过伪造请求,获取目标网站的认证信息,从而访问目标网站的用户隐私信息或执行其他恶意操作。SSRF重绑定是一种利用SSRF漏洞的攻击技术,它利用了目标服务器上的DNS解析功能,将攻击者控制的域名绑定到目标服务器的内部IP地址上,从而实现对内部资源的访问。JSONP的请求地址是明文传输的,攻击者可以通过嗅探网络流量,获取JSONP请求中携带的信息,例如API密钥、用户ID等,从而攻击服务器或者访问用户隐私信息。原创 2023-03-10 16:13:00 · 1086 阅读 · 0 评论 -
CVE-2021-31805-struts2 s2-062 ONGL远程代码执行
目录(一)Struts2介绍0x01 Model-View-Controller0x02 MVC组件(二)s2-062漏洞概况(三)s2-062漏洞复现0x01 vulhub启动0x02 payload1-执行命令0x03 payload2-反弹连接(四)漏洞原理分析0x01 OGNL是什么0x02 OGNL和Struts2小结:0x03 payload分析s2-061和s2-062的区别调试入口(五)修补方法没有MVC组件有MVC我们在resources配置struts.xml文件:原创 2023-01-11 14:53:19 · 562 阅读 · 0 评论 -
Java RCE表达式——自身代码、由表达式注入、SSTI、第三方组件
Java 命令执行漏洞的前提是执行命令的参数可控,参数没有经过相关过滤。传ProcessBuilder 进行执行,故攻击者通过命令连接符就有可能拼接执行额外的命令。进行命令执行的方法及过程,下面我们通过典型的Java 代码讲解命令执行漏洞,示例程序包首先通过。方式进行注入的,可以自动解析前端传入的参数,只要前端存在可控参数,就可以产生漏洞。因为通过“request.getParameter("ip")命令的执行,最后将相关结果返回。但是页面出现报错,如图 1-4。两个命令,命令执行攻击成功,如图 1-5。原创 2022-12-28 13:13:01 · 430 阅读 · 0 评论 -
Java代码审计——JEESNS漏洞&悟空CRM漏洞&访问控制
可以看到它把关键字alert前面加上了_,导致js代码无法执行,我们在idea里面找路由。这里突破口是用prompt(/xss/)进行过滤。修改 POST请求内容,Content-Type更改为json格式,send一下。找对应,触发过滤器的代码,filter找到了class文件。(一)JEESNS漏洞&黑名单。翻了半天没找到,然后再找。(二)悟空CRM&组件安全。原创 2022-12-25 18:03:01 · 1501 阅读 · 0 评论 -
Fastjson反序列化漏洞>1.2.24高版本绕过
检测方法:全局搜索是否使用到了Fastjson,若使用了则进一步排查是否为漏洞版本号即1.2.22-1.2.47,若是则可能存在反序列化漏洞的风险,需进一步排查。全局搜索如下关键代码,若存在则进一步排查参数是否外部可控:原创 2022-12-19 22:27:37 · 684 阅读 · 0 评论 -
高低jdk版本中jndi注入(下)
由前面知道,在然后从JAVA_ATTRIBUTES中取出索引为1即javaSerializedData的内容,这个我们是在恶意LDAP服务端中设置了的、内容就是恶意的Commons-Collections这个Gadget的恶意利用序列化对象字节流;拿到的factory就是org.apache.naming.factory.BeanFactory类,接着调用。函数之间的调用,com.sun.jndi.ldap.LdapCtx类的c_lookup()函数中会调用到com.sun.jndi.ldap.Obj类的。原创 2022-12-12 22:34:32 · 426 阅读 · 0 评论 -
高低JDK版本中JNDI注入(上)
1.2 客户端直接在 类的函数下打上断点,如图1-1: 调用到函数,尝试从 Reference中获取ObjectFactory,跟进: 这里返回新建的远程类实例之前会先对实例转换为ObjectFactory类,因此,如果远程类不实现ObjectFactory接口类的话就会在此处报错,之前一些demo的恶意类没实现ObjectFactory类所出现的报错正出于此,如图原创 2022-12-05 21:11:00 · 531 阅读 · 0 评论 -
CommonsCollections4利用链分析
目录前言:0x01 代码分析总结一下利用链:POC:完整的POC:但是在某种程度上还是换汤不换药,链的最后还是用了 Transform 类对象的 方法直接去执行代码,或者是CC3的利用 TemplatesImpl 类去实现类加载执行任意代码。原创 2022-12-04 19:29:25 · 554 阅读 · 0 评论 -
Java代码审计——ClassLoader 类加载机制
安全人员能够利用 Javassist 对目标函数动态注入字节码代码。通过这种方式,我们可以劫持框架的关键函数,对中间件的安全进行测试,也可以劫持函数进行攻击阻断。此外,对于一些语言也可以很好地进行灰黑盒测试原创 2022-12-03 16:56:18 · 338 阅读 · 0 评论 -
Java代码审计——WebGoat CSRF (上)
CSRF(Cross Site Request Forgery,跨站点请求伪造)是目前出现次数比较多的漏洞,该漏洞能够使攻击者盗用被攻击者的身份信息,去执行相关敏感操作。实际上这种方式是攻击者通过一些钓鱼等手段欺骗用户去访问一个自己曾经认证过的网站,然后执行一些操作(如后台管理、发消息、添加关注甚至是转账等行为)。由于浏览器曾经认证过,因此被访问的网站会认为是真正的用户操作而去运行。简而言之,CSRF 漏洞的工作原理是攻击者盗用了用户的身份,以用户的名义发送恶意请求。原创 2022-12-02 19:28:52 · 621 阅读 · 0 评论 -
Java Tomcat内存马——Listener内存马
监听器 Listener 是一个实现特定接口的 Java 程序,这个程序专门用于监听另一个 Java 对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即自动执行。事件:方法调用、属性改变、状态改变等。事件源:被监听的对象( 例如:request、session、servletContext)。监听器:用于监听事件源对象 ,事件源对象状态的变化都会触发监听器。注册监听器:将监听器与事件源进行绑定监听对象创建和销毁的监听器监听对象中属性变更的监听器。原创 2022-12-01 20:28:31 · 888 阅读 · 0 评论 -
Java常见漏洞——整数溢出漏洞、硬编码密码漏洞、不安全的随机数生成器
(一)整数溢出漏洞(一)整数溢出漏洞计算机程序中的整数都是有范围的,不同的数据类型范围也不同,这是由编译器决定的,超过这个范围就有可能会出现整数溢出的情况。比如说Java 的int是32位有符号整数类型,其最大值是,最小值是0x80000000,即int表示的数的范围是在-~之间。当int类型的运算结果超出了这个范围时则发生了溢出,而且不会有任何异常抛出。整数溢出一般可以分为上界溢出和下界溢出两种。0x01 整数溢出漏洞介绍1.1上界溢出。原创 2022-11-30 17:48:55 · 2143 阅读 · 0 评论 -
CommonsCollections6利用链分析
(一)利用链(一)利用链可以看到,CC6链从LazyMap类开始的后半部分和CC1链是相同的,只是前面没有使用类readObject()的作为反序列化的入口了,从而解决了在java 8u71 版本之后无法使用CC1链的问题。CC6链的前半部分和URLDNS链比较像,都是利用了HashMap类在计算hash值时调用的方式,进入到方法,再到的。(二)代码分析。原创 2022-11-28 16:34:26 · 487 阅读 · 0 评论 -
URLDNS利用链分析
URLDNS是Java反序列化中比较简单的一个链,由于URLDNS不需要依赖第三方的包,同时不限制jdk的版本,所以通常用于检测反序列化的点,URLDNS并不能执行命令,只能发送DNS请求。(一)原理HashMap在反序列化的时候会对传进来的对象进行hash计算获取hashCode,而URL类中的hashCode属性在特殊情况下的hashCode计算将触发dns查询(二)利用链ysoserial中的URLDNS.javareturn ht;}}/****/}原创 2022-11-28 11:02:10 · 742 阅读 · 0 评论 -
Java Tomcat内存马——Servlet内存马
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果原创 2022-11-27 17:11:07 · 607 阅读 · 0 评论 -
Java代码审计——XML 外部实体注入(XXE)
XXE 为 XML 外部实体注入。当应用程序在解析 XML 输入时,在没有禁止外部实体的加载而导致加载了外部文驱动程序所必需的接口,其允许应用程序设置和查询解析器中的功能和属性、注册文档处理的事件处理程序,以及开始文档解析。当XMLReader 使用默认的解析方法并且未对。输入时,在没有禁止外部实体的加载而导致加载了外部文件及代码时,就会造成 XXE。文档的接口,其存在于公共区域中。XMLReader 接口是。XMLReader 接口是一种通过。漏洞,我们首先需要知道常见的能够解析。们一般用以下几种常见的。原创 2022-11-27 11:43:22 · 1213 阅读 · 0 评论 -
Java代码审计基础——RMI原理和反序列化利用链
(一)何为RMIRMI(Remote Method Invocation)即远程方法调用,是中的一个基本思想。实现远程方法调用的技术有很多,比如CORBA、WebService,这两种都是独立于各个编程语言的。而Java RMI是专为Java环境设计的远程方法调用机制,是一种用于实现远程调用(RPC,Remote Procedure Call)的Java API,能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于JVM,因此它支持从一个JVM到另一个JVM的调用。原创 2022-11-26 19:37:37 · 877 阅读 · 0 评论 -
Java代码审计——SSH 框架审计技巧
配置文件(也就是applicationContext.xml 位置)是直接通过配置参数传入的,而这里则是通过配置一个context-param。框架,但是区别还是挺大的,后续讲解中会介绍两个框架之间的区别,以及审计 Hibernate。转发和重定向这两种方式的区别为,转发是服务端自己的行为,在转发的过程中Controller。的情况下,审计一个项目时首先需要查看该文件,以便对整个项目有一个初步的了解。,并选择与之对应的页面。属性,该属性的作用就是执行指定的方法,默认值为“execute。原创 2022-11-23 19:48:50 · 832 阅读 · 0 评论 -
Java代码审计——WebGoat XSS
我们需要对其进行控制。也就是说,想要触发该 XSS 漏洞,首先得将包含 XSS 有效载荷的数据插入数据库中。到此漏洞的整个执行流程我们已分析完成,接下来便是找到对应的入口进行触发,而触发该漏洞一个最大的问题是:数据来源于。我们先updatecert一下,发现红框中的数据直接输出了所以我们直接进行xss即可。因为程序没有对输入进行任何校验,所以只需找到添加数据的路由后插入对应的有效载荷。下面两种形式的写法实现的效果是相同的,都是将变量输出到网页中。中的调用可以跟踪到调用类,在类中可以发现,程序首先对“原创 2022-11-18 18:30:25 · 708 阅读 · 0 评论 -
Java Tomcat内存马——filter内存马
至此,invoke()部分的所有流程我们都分析完毕了,接着继续往上看,也就是doFilter()方法。这个doFilter()方法也是由最近的那个invoke()方法调用的。如图,我们把断点下过去。如果师傅们这个invoke()方法可用的话,可以断点下这里,如果不可用的话可以下到后面doFilter()方法。这里我们要重点关注前文说过的这个变量,那它是什么呢?我们跟进这个方法。使用创建了一个过滤链,将进行传递。我们在方法走一下流程。原创 2022-11-17 12:33:53 · 706 阅读 · 0 评论 -
Java代码审计——WebGoat XML外部实体注入(XXE)
在进行代码分析之前,要先懂漏洞产生的原理,不妨看看这篇文章,WebGoat上面描述的也不错,值得研读。原创 2022-11-16 12:54:49 · 863 阅读 · 0 评论 -
CommonsCollections1利用链分析
总结以图解的方式回顾一下整条链的利用:第一条链:从开始;调用 TransformedMap类从其父类继承回来的setValue()方法;然后调用了自身的方法;该方法调用传入的Transformer类的方法;原创 2022-11-14 21:51:08 · 445 阅读 · 0 评论 -
JAVA代码审计——WebGoat 认证缺陷
通过上次对SQL注入的简单审计,我们大致上对Java代码的思路有了一定的认识,紧接着要进入JAVA代码审计——SQL注入靶场审计01_jinyouxin的博客-优快云博客Java代码审计WebGoat—— 登录注册模块初审计_jinyouxin的博客-优快云博客(一)Authentication Bypasses开发人员不应在JWT中暴露敏感信息,可使用工具将截获的JWT解析查看是否包含敏感信息。JWT弱口令爆破可以离线进行。原创 2022-11-11 23:28:33 · 496 阅读 · 0 评论 -
JAVA代码审计——SQL注入靶场审计01
Statementlike '%${in (${selectupdateinsert(二)SQL Lesson 9前面都是sql注入的介绍,我们直接来看到lesson9,首先请求一下看一下前端请求后端的接口地址.全局进行一个搜索,我们首先来看PostMapping那一个代码可以看到直接进行了SQL语句的拼接我们来打个断点分析一下,可以看到我们输入的内容没有经过任何过滤就直接拼接来进去。原创 2022-11-09 14:40:00 · 787 阅读 · 0 评论 -
Java代码审计WebGoat—— 登录注册模块初审计
前二个星期,把Java开发最基础的知识进行学习,紧接着就是进行实战!!!WebGoat8是基于Spring boot框架开发,故意不安全的Web应用程序,旨在教授Web应用程序安全性课程。该程序演示了常见的服务器端应用程序缺陷。本文将简要分析WebGoat8的登陆模块,注册模块,作为热身,随后对每一个漏洞进行系统的分析研究。原创 2022-11-05 14:36:07 · 604 阅读 · 0 评论 -
SpringBoot整合框架——集成SpringSecurity、shiro
Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全管理WebSecurityConfigurerAdapter:自定义Security策略AuthenticationManagerBuilder:自定义认证策略。原创 2022-11-04 19:33:26 · 835 阅读 · 0 评论 -
SpringBoot整合框架——数据库
对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用的方式进行统一处理,Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。Sping Data 官网:https://spring.io/projects/spring-data。原创 2022-11-02 20:11:15 · 1266 阅读 · 1 评论 -
Springboot实战:员工管理系统
/自定义拦截器@Override//获取 loginUser 信息进行判断if(user == null){//未登录,返回登录页面request.setAttribute("msg","没有权限,请先登录");}else{//登录,放行}}}原创 2022-11-01 21:03:45 · 741 阅读 · 0 评论 -
Java EE 开发框架安全审计——SSM框架(入门篇)
在SSM框架之前,生产环境中多采用SSH框架(由这3个开源框架整合而成)。后因Struts2爆出众多高危漏洞,导致目前SSM逐渐代替SSH成为主流开发框架的选择。(一)SSM 框架简介。原创 2022-10-28 18:47:52 · 1045 阅读 · 0 评论 -
Java代码审计前置知识——Java 反射机制
Java反射机制可以无视类方法、变量去访问权限修饰符(如protected、private等),并且可以调用任何类的任意方法、访问并修改成员变量值。换而言之,在能够控制反射的类名、方法名和参数的前提下,如果我们发现一处Java反射调用漏洞,则攻击者几乎可以为所欲为。(一)什么是反射反射(Reflection)是Java的特征之一。C/C++语言中不存在反射,反射的存在使运行中的Java程序能够获取自身的信息,并且可以操作类或对象的内部属性。那么什么是反射呢?原创 2022-10-26 21:41:01 · 505 阅读 · 0 评论 -
Java代码审计前置知识——SSM整合
代码审计的核心思想是追踪参数,而追踪参数的步骤就是程序执行的步骤。因此,代码审计是一个跟踪程序执行步骤的过程,了解了 SSM 框架的执行流程自然会了解如何如跟踪一个参数,剩下的就是观察在参数传递的过程中有没有一些常见的漏洞点。原创 2022-10-26 19:20:30 · 399 阅读 · 0 评论 -
Java代码审计前置知识——SpringMVC基础
Model2这样不仅提高的代码的复用率与项目的扩展性,且大大降低了项目的维护成本。Model 1模式的实现比较简单,适用于快速开发小规模项目,Model1中JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。Model2消除了Model1的缺点。1.4 回顾ServletSpring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架轻量级,简单易学。原创 2022-10-25 23:43:17 · 634 阅读 · 2 评论 -
Java代码审计前置知识——MyBatis
MyBatis 是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生 Map使用简单的XML或注解,将接口和Java的POJO(Plain Old Java Object,普通的Java对象)映射成数据库中的记录(一)简介1.1 什么是Mybatis1.2 持久化1.3 持久层1.4 为什么需要MyBatis(二)搭建Mybatis程序。原创 2022-10-23 19:56:15 · 683 阅读 · 0 评论 -
Java代码审计前置知识——SpringBoot基础
(一)SpringBoot简介(一)SpringBoot简介1.1 回顾什么是SpringSpring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson。1.2 Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采用了以下4种关键策略:1、基于POJO的轻量级和最小侵入性编程,所有东西都是bean;2、通过IOC,依赖注入(DI)和面向接口实现松耦合;3、基于切面(AOP)和惯例进行声明式编程;原创 2022-10-29 21:52:37 · 1474 阅读 · 0 评论 -
基于Jsp和Servlet的简单项目
对于Java代码审计,还是需要从开发开始学起,学习语言,少不了敲大量的代码,本文章以一个MVC框架开发的用户登入界面作为例子,介绍MVC开发的整个流程,//根据用户名和密码,查询用户信息}原创 2022-10-21 15:10:29 · 1262 阅读 · 0 评论 -
Javaweb基础——JSP简单小案例实现
triangle.jsp页面可以计算并显示三角形的面积,当triangle.jsp被加载时获取demo.jsp页面include动作标记的param子标记提供的三角形三边的长度。在example3_12.jsp页面随机产生一个1~10之间的随机数,若该数大于5就转向页面example3_12_a.jsp,否则转向页面example3_12_b.jsp。可以在之间插入一个可求值的表达式(注意:不可插入语句,原创 2022-10-20 15:05:38 · 1066 阅读 · 0 评论 -
Java代码审计前置知识——Spring框架AOP和IoC
随着 Java Web 技术的不断发展,Java开发Web项目由最初的单纯依靠Servlet(在Java代码中输出HTML)慢慢演化出了JSP(在HTML文件中书写Java代码)。虽然JSP 的出现在很大程度上简化了开发过程和减少了代码量,但还是对开发人员不够友好,所以慢慢地又出现了众多知名的开源框架,如 Struts2、Sping、Spring MVC、Hibernate和 MyBatis等。原创 2022-10-21 21:02:56 · 632 阅读 · 0 评论 -
代码审计——JAVA项目注入上传搜索或插件挖掘
Fortify 是一个静态的、白盒的软件源代码安全测试工具。它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,通过与软件安全漏洞规则集进行匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并可导出报告。扫描的结果中包括详细的安全漏洞信息、相关的安全知识、修复意见。原创 2022-10-03 21:23:49 · 868 阅读 · 0 评论 -
java web 前置知识——Servlet(一)
目录前言:(一)javaEE分层模型不管是经典的JAVAEE架构,还是轻量级JavaEE架构,大致上都可以分为如下几层:(二) Servlet1、Servlet 架构 2、Servlet 生命周期2.1 init () 方法2.2 service() 方法doGet() 方法:doPost() 方法2.3 destroy() 方法举个栗子:1)编写一个servlet类,继承HttpServlet2)配置web.xml文件补充:1、在web.xml中配置 和 的作用3、Servlet 注解4、九大内置对原创 2022-09-12 16:14:32 · 402 阅读 · 0 评论