Redis漏洞利用写 ssh-keygen 公钥登录服务器 原理: SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证。 客户端生成私钥和公钥,并把公钥拷贝给服务器端 , 客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证 利用条件: 1、Redis服务使用ROOT账号启动 2、服务器开放了SSH服务,而且允许使用密钥登录 - 漏洞利用 根据原理,只要只要把自己公钥上传到服务端就可以 1234567redis-cli -h 192.168.33.134 #连接目标主机redisconfig get
ssrf-ctfhub什么是 SSRF?攻击者从外网通过 SSRF 攻击访问到内网,接着对内网的应用展开攻击,这些应用包括但不限于 MySQL,redis,SMTP 等等 …… SSRF (全称:Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。 正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统。 ssrf 漏洞产生原因SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从
fastjson反序列化fastjson最经典的部分是自动触发getter来getProperties加载字节码,如何触发getter可以通过JSON.parse触发,也可以通过toJSONString触发,很有意思的是JSON这个类的tostring就是toJSONString 基础知识FastJson 是一个由阿里巴巴研发的java库,可以把java对象转换为JSON格式,也可以把JSON字符串转换为对象 环境搭建导入依赖 1234567<dependencies> <dependency> <groupId>com
POJONode#toString调用getter方法原理前言前面说到了在fastjson中的原生的一个反序列化调用任意类的getter方法的原理与细节 从最开始的fastjson < 1.2.48下的在JSONObject / JSONArray类反序列化过程没有安全检查的情况下通过BadAttributeValueExpException#readObject调用JSONObject#toString / JSONArray#toString方法也即是JSON#toString方法触发getter 再到fastjson >= 1.2.48下的存在有SecureObje
jdbc反序列化使用环境 12345<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> </dependency> 如下是简单使用,主要是利用DriverManager.getConnection进行连接 123456789101112131415161718192021package
TemplatesImpl 链子12345TemplatesImpl#getOutputProperties() -> TemplatesImpl#newTransformer() -> TemplatesImpl#getTransletInstance() -> TemplatesImpl#defineTransletClasses() -> TransletClassLoader#defineClass() defineClass一般我们不能使用,newTransformer就可以外调了,但是也可以getOutputProperties POC1234567891
JAVA文件系统JAVA SE内置了两类文件系统::java.io和java.nio,java.nio的实现是sun.nio JAVA IO 文件系统Java抽象出了一个文件系统的对象:java.io.FileSystem,不同的操作系统有不一样的文件系统,例如Windows和Unix就是两种不一样的文件系统: java.io.UnixFileSystem、java.io.WinNTFileSystemjava.io.FileSystem是一个抽象类,它抽象了对文件的操作,不同操作系统版本的JDK会实现其抽象的方法从而也就实现了跨平台的文件的访问操作。 需要注意的点有:\1. 并不是所有的文
什么是classAnnotations# 众所周知,在序列化Java类的时候用到了一个类,叫ObjectOutputStream。这个类内部有一个方法 annotateClass,ObjectOutputStream的子类有需要向序列化后的数据里放任何内容,都可以重写这个方法,写入你自己想要写入的数据。然后反序列化时,就可以读取到这个信息并使用。 classAnnotations表示和类相关的Annotation的描述信息,这里的数据值一般是由ObjectOutputStream的annotateClass()方法写入的,但由于annotateClass()方法默认为空,所以classAnn
RMI原文简介Java的RMI远程调用是指,一个JVM中的代码可以通过网络实现远程调用另一个JVM的某个方法。RMI是Remote Method Invocation的缩写。提供服务的一方我们称之为服务器,而实现远程调用的一方我们称之为客户端。 远程调用的方法需要- 一个继承了java.rmi.Remote的接口 123456import java.rmi.Remote;import java.rmi.RemoteException;public interface RemoteHelloWorld extends Remote { public String hello()
ClassLoader类加载机制#Java程序在运行前需要先编译成class文件,Java类初始化的时候会调用java.lang.ClassLoader加载类字节码,ClassLoader会调用JVM的native方法(defineClass0/1/2)来定义一个java.lang.Class实例。 ClassLoader#包含以下几个ClassLoader:- Bootstrap ClassLoader (引导类加载器) 该类加载器实现于JVM层,采用C++编写- Extension ClassLoader (扩展类加载器)- App ClassLoader (系统类加载器) 默认的类加载器