本文已参与「新人创作礼」活动,一起开启掘金创作之路。
对于Grafana反代400绕过 利用payload /public/plugins/alertlist/#/../..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f/etc/hosts
通过这样可以读取etc下的hosts文件 然后也可以读取/etc/passwd 对于一个利用提升的:/etc/grafana/grafana.ini 在这个文件配置里
今天遇到一个题目,就是通过这个payload读取/etc/passwd。然后通过Grafana-CVE-2021-43798 进行漏洞复现, 在/etc/passwd 读取到一个aes加密 然后后来才知道需要的是GitHub - jas502n/Grafana-CVE-2021-43798: Grafana Unauthorized arbitrary file reading vulnerability
这个项目地址AESDecrypt,是可以对这个进行解密的 然后需要的是kali里下载go环境 然后进行 go run ./AESDecrypt.go命令,进行解密
然后就是JAVA的学习 JAVA漫谈学习 对于PHP和java的反序列化,说的都是反射,对象可以通过反射获取他的类,类可以通过反射拿到所有方法,拿到的方法可以调用
对于下面这一段代码
public void execute(String className, String methodName) throws Exception {
class clazz = class.forName(className);
clazz.getMethod(methodName).invoke(class.newInstance());
}
这里有java反射的重要的几个函数:
获取类的方法:forname
实例化类对象的方法:newInstance
获取函数的方法:getMethod
执行函数的方法:invoke
获取类的三种方法:
obj.getClass() 如果上下⽂中存在某个类的实例 obj ,那么我们可以直接通过 obj.getClass() 来获取它的类
Test.class 如果你已经加载了某个类,只是想获取到它的 java.lang.Class 对象,那么就直接 拿它的 class 属性即可。这个⽅法其实不属于反射。
Class.forName 如果你知道某个类的名字,想获取到这个类,就可以使⽤ forName 来获取
forname两个函数重载
Class forName(String name) Class forName(String name, **boolean** initialize, ClassLoader loader)
Class.forName(className) = Class.forname(className,true,currentLoader)
左边的情况可以理解为右边的封装 正常情况下,forname的第一个参数是类名,第二个参数表示是否初始化,第三个参数就是classLoader(这是一个加载器,它告诉java虚拟机如何加载这个类)。
forName 中的 initialize=true 其实就是告诉Java虚拟机是否执⾏”类初始化“