自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 若依4.5版本代码漏洞分析

substringAfter()方法是对传入的resource值与RESOURCE_PREFIX进行对比,resource包含“/profile”值后,删除“/profile",将剩余的字符进行返回,当前retrun的值为:sss/../../../../../../../1.txt。最后拼接完的downloadPath值为:D:/ruoyi/uploadPathsss/../../../../../../../1.txt。若依的SQL注入漏洞还是比较多的,但都是同一个参数导致的。Controller层。

2024-10-23 10:32:23 314

原创 某小说CMS代码审计

从DAO层开始追溯sort和order参数,其中id="list"(表示对应的方法名为list方法),resultType="com.java2nb.novel.domain.UserDO"(表示对应的实体类名)可以使用通过延时注入得到数据库user的长度,但是不推荐这种方式,当前表中只有7条数据,延迟需要3.5秒时间,如果数据量大,可能会对业务系统造成一定的影响。在Service层找到调用list()方法,该层方法中直接将map类型入参,未对map类型的参数进行处理。这里是很明显的一个任意文件下载漏洞。

2024-09-13 10:42:27 237

原创 Fastjson漏洞复现

其中http://192.168.27.132:4444/#Shell 是存放反弹shell的class文件的http服务。打包成功后在target文件中生成marshalsec-0.0.3-SNAPSHOT-all.jar工具。这里命令是固定的,需要把反弹shell的脚本进行base64加密。下载好环境后就可以使用了,如果中途报错可以重启docker服务。首先下载vulhub环境,进入fastjson环境中。本次复现用的是vulhub环境搭建的环境。下载marshalsec。nc接受反弹shell。

2023-12-11 16:12:20 510

原创 JNDI和RMI

RPC协议的核心是一个客户端和一个服务端,它们可以运行在不同的机器上。客户端调用服务端的某个函数,服务端执行该函数并返回结果。这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。之前实习的时候听我们老大说过RPC服务调用,但是一直都没有在意这个事儿,这都毕业几年了,总是听到RMI的漏洞,然后这段时间正好学习一下这个知识。这里假设服务端中存在CC3.2.1漏洞的组件,就可以使用CC6的攻击链,这里如果可以传入一个客户端可控的对象参数,就可以造成RMI反序列化攻击。

2023-09-22 15:28:10 144 1

原创 Shiro-550反序列化

AES加密的密钥Key被硬编码在代码里,如何密钥Key被攻击者拿到,则可以直接构造恶意的对象,进行序列化,再通过AES加密和base64加密,最为cookie发送的服务端,服务端rememberMe进行解密后进行反序列化,则最终造成了反序列化漏洞。服务端无法加载Transformer类,这里看的白日梦组长大佬分析的,resolveClass方法中的loadClass方法不支持数组,导致链子无法使用,所以这里不能使用Transformer数组类。这里python代码用的白日梦组长的。默认是加密的一个字符串。

2023-09-15 13:59:51 77

原创 基于servlet的内存马分析

Context实例表示一个具体的Web应用程序,其中包含一个或者多个Wrapper实例,每个Wrapper表示一个具体的Servlet定义,StandardContext是Context接口的一个实现,该类的启动也是很复杂的,但对于内存马来说,我们可以通过反射获取到StandardContext的对象,从而写入一个Wrapper实例,可以将我们需要的servlet写入到内存中。JSP存在内置的request对象,可以通过反射来调用需要的StandardContext对象。这里先写JSP的内存马实现。

2023-08-23 15:57:03 76

原创 CC2链分析

所以可以采用CC1方法,在对象实例化的时候不添加comparator对象,添加玩元素后再通过反射传入comparator对象,这样没有comparator对象后,siftUp方法执行后会进入siftUpComparable方法,这里不会调用compare方法,可以避免触发调用计算器。这两个方法都会调用compare方法,只是第一个方法是 key对象进行调用,第二个方法是comparator对象调用。该类是类转换比较器,构造器中存放Transfomer,compare方法中调用了transform。

2023-08-11 16:02:14 144 1

原创 CC3链分析

这里有个很关键的newInstance,这个就是我们需要实例化的关键方法,但是这个方法是私有方法,这里想要调用defineTransletClasses方法,需要_name不为空值,_class为空值(这个可以不用管),再往上看newTransformer方法。_bytecodes是一个二维字节类型的数组,但是传入defineClass中的_bytecodes是一个一维字节数组,赋值的时候需要赋一个一维字节类型数组,这里可以通过读取class文件,当作一个一维数组赋值给_bytecodes。

2023-08-10 14:20:55 123 1

原创 CC6链分析

CC1链使用了AnnotationInvocationHandler类来利用,但是高版本的JDK已修复这个漏洞,现在必须找通过TransformedMap类或者LazyMap类来触发漏洞。在CC1中,可以通过LazyMap中的get方法调用transform方法,现在需要再找一个调用get方法的的地方,这里可以看TiedMapEntry类。TiedMapEntry类中的hashcode方法也调用了getValue()方法。这里和URLDNS链很像,因为HashMap的put方法里面会调用hash方法。

2023-08-03 13:42:57 130

原创 CC1链分析

第一个是memberType类型不为空值,这里type是传入的Override.class,annotationType.memberTypes()为调用出入class的成员方法,所以,传入的class类中必须存在成员方法,且成员变量的key值必须与map中的key值相同,而Override.class的成员方法为空值,所以这里可以选择Target.class作为参数。这里有两个if,如果这两个if的条件为false时,无法调用里面的setValue方法。

2023-06-15 09:49:20 323 1

原创 URLDNS链分析

JAVA安全

2022-09-06 17:08:50 428

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除