网络安全
未读1.若依项目介绍 Ruoyi(若依)是一款基于Spring Boot和Vue.js开发的快速开发平台。它提供了许多常见的后台管理系统所需的功能和组件,包括权限管理、定时任务、代码生成、日志管理等。Ruoyi的目标是帮助开发者快速搭建后台管理系统,提高开发效率。
若依有很多版本,其中使用最多的是Ruoyi单应用版本(RuoYi),Ruoyi前后端分离版本(RuoYi-Vue),Ruoyi微服务版本(RuoYi-Cloud),Ruoyi移动版本(RuoYi-App)。
本系列会对这些版本的历史漏洞进行一一复现。
2.文章目录
RuoYi
RuoYi-Vue
RuoYi-Cloud(待更新)
RuoYi-App(待更新)
1.WEB JS逆向出密钥和算法以及签名
通过前端JS逆向发现请求响应都使用的是SM4加密算法。且跟踪代码后发现密钥在前端进行了硬编码
而签名逻辑为url+body参数+‘-’+url参数+请求方法,最后替换掉斜线
2.复现完整加解密和签名逻辑
首先对加密数据进行BASE64解码为二进制数据,然后进行SM4ECB解密。加密就反过来即可。
签名逻辑复现
3.编写插件3.1.新建IDEA Maven项目
我这里采用的是Maven项目,如果想用Groovy构建的也可以,Groovy构建的更快,官方也是用的Groovy,不过我用的不够熟悉,有时候构建容易出问题,所以我这采用Maven构建。需要注意的是JDK版本一定要是JAVA17版本以上的,因为我们这使用的是新版本的montoya-api,而不是老版本的API,所以必须使用高版本JAVA。
pom文件配置
需要导入的是bp插件的API依赖两个,
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 ...
1.简介
该链主要利用org.apache.commons.collections.functors.InvokerTransformer类可通过反射调用程序中任意方法,包括Runtime.getRuntime()方法。
pom.xml导入commons-collections依赖
12345<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version></dependency>
该篇讲的是CC1中的一条链,也是原作者最开始用的一条链,前面一篇不过是之后的变种,也就是说这个才是原来那条最开始流行的CC1链。
2.代码分析2.1.执行类分析(这部分和上一节一样)
在CC1中用来作为执行类的是org.apache.commons.collections.functors.InvokerTran ...
1.简介
该链主要利用org.apache.commons.collections.functors.InvokerTransformer类可通过反射调用程序中任意方法,包括Runtime.getRuntime()方法。
pom.xml导入commons-collections依赖
12345<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version></dependency>
该篇讲的是CC1中的一条链,也是原作者最开始用的一条链,前面一篇不过是之后的变种,也就是说这个才是原来那条最开始流行的CC1链。
2.代码分析2.1.执行类分析(这部分和上一节一样)
在CC1中用来作为执行类的是org.apache.commons.collections.functors.InvokerTran ...
1.简介
该项目主要通过修改SQLMAP源代码对SQLMAP文件读入的request进行解密,和对注入payload后发包时的请求进行加密,以此来对存在请求加密的WEB网站进行SQL注入扫描的目的
项目地址:https://github.com/takakie/SQLMAPENC
2.代码结构
主要是修改了三处代码
第一处 请求参数的解密
原代码,代码路径 lib/core/option.py
1234567for target in parseRequestFile(requestFile): url = target[0] if url not in seen: kb.targets.add(target) if len(kb.targets) > 1: conf.multipleTargets = True seen.add(url)
更改后代码
123456789101112from plugins.requestende.requesthandler imp ...
1.简介
该链主要利用org.apache.commons.collections.functors.InvokerTransformer类可通过反射调用程序中任意方法,包括Runtime.getRuntime()方法。
pom.xml导入commons-collections依赖
12345<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version></dependency>
2.代码分析2.1.执行类分析
在CC1中用来作为执行类的是org.apache.commons.collections.functors.InvokerTransformer。
首先我们需要分析一下为什么该来可以用来作为执行类。
在该类中存在一个可传入任意对象执行反射调用方法transform,改方法可传入一个Ob ...
1.简介
在URLDNS这条链中主要是利用HashMap对象反序列化时会调用HashMap对象中Key值对象的hashCode方法,而当我们传入HashMap中Key值是一个URL对象时,则会调用URL对象的hashCode方法,执行该方法时会触发URLStreamHandler对象调用其自身的hashCode方法,其hashCode方法又会调用其自身getHostAddress方法,来解析域名,导致触发DNS解析。
由于该链非常通用,都是JDK自身自带的类,又由于该利用链危害性低,因此该利用链通常用于验证是否存在反序列漏洞。
2.代码分析2.1.入口类HashMap分析
由于HashMap参数的灵活性可以传入两个对象,因此在多数利用链中都会用到该类。
我们知道在JAVA反序列化对象时会自动调用该类的readObject方法,而在HashMap的readObject方法调用了HashMap中的hash方法,而hash方法中又恰好调用了我们可控参数中的key对象的hashcode方法,因此我们可以利用该入口类来实现反序列化漏洞。
HashMap.java
从图中我们可以看到,只要 ...
1.简介
该系列主要分析各JAVA反序列化漏洞利用链的实际过程,主要用于代码审计。
例如常见的CC链,或者用于入门分析的URLdns链。
2.关于JAVA反序列化的本质
想要分析JAVA的反序列漏洞,那么首先,也是必须搞明白的是反序列化的本质到底是什么,是针对对象还是类,还是属性或者函数,这些概率需要搞清楚。
在JAVA反序列化过程中,JVM会根据字节流中的信息查找相应的类定义,并使用该类定义来创建对象实例,然后根据字节流中的信息设置对象的属性值等状态信息。因此,反序列化是针对对象的,而非类本身。
所以我们需要明白我们序列化的类一定是目标系统有定义的类,而不是自己凭空捏造一个类来序列化,这样目标系统是无法反序列化成功的。也就是说我们没办法编写自己的函数直接在目标系统中执行的。
因此反序列化漏洞的实质是通过嵌套编写对象定义属性值来达到执行目标系统中已有的我们想要执行的那个函数。
3.反序列化漏洞利用链分析流程
在以下所有流程中,我们所选取的类必须满足以下两个条件:
实现了Serializable接口,否则不可进行序列化,就更不存在什么反序列化。
必须为目标机器程序中存在的类。
...
1.概念
2.新建项目
新建空项目
然后新建模块Spingboot
添加依赖
如果发现不能构建maven,可手动添加
3.编辑配置文件
application.yml
123456789101112131415spring: application: # 应用名称 name: spring-boot-01-kafka-base # kafka连接地址 ip+port kafka: bootstrap-servers: 192.168.100.129:9092 # 配置生产者(共24个) # producer: # 配置消费者(共24个) # consumer:
4.发送消息1234567891011121314151617package com.gaomu.producer;import jakarta.annotation.Resource;import org.springframework.kafka.core.KafkaTemplate;import org.springframework.stere ...
网络安全
未读Nacos
环境搭建
https://github.com/alibaba/nacos
启动路径 nacos/nacos-2.3.2/bin
启动命令
1$ ./startup.sh -m standalone
默认端口号 8888
1.默认口令
访问http://ip:8848/nacos/#/login进入登陆页面
默认口令为nacos/nacos
2.浏览器代理身份绕过(nacos<1.4.1)
将User-Agent: 更改为 Nacos-Server 即可绕过身份认证
以下为用户查询接口
添加用户接口
POST /nacos/v1/auth/users?username=takake&password=123456 HTTP/1.1
3.JWT伪造身份绕过(0.1.0<=nacos<=2.2.0)3.1.原理
nacos通过jwt进行身份认证,由于配置文件中存在默认jwt签名密钥,由于开发者安全意 ...