Jackson漏洞总结
简历Jackson 是一个开源的Java序列化和反序列化工具,可以将 Java 对象序列化为 XML 或 JSON 格式的字符串,以及将 XML 或 JSON 格式的字符串反序列化为 Java 对象。
1234567891011121314151617<dependencies> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.9</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> ...
JAVA反序列化之CC7链分析
环境12345<dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version> </dependency>
链子1234567891011Hashtable.readObject Hashtable.reconstitutionPut Hashtable.reconstitutionPut LazyMap.equals 没实现,找父类 AbstractMapDecorator.equals HashMap.equals 没实现,找父类 AbstractMap.equals LazyMap.get ChainedTransformer.transform() ConstantT ...
JAVA反序列化之CC5链分析
环境12345678<dependencies> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency></dependencies>
链子12345678910111213141516Gadget chain: ObjectInputStream.readObject() BadAttributeValueExpException.readObject() TiedMapEntry.toString() LazyMap.get() ChainedTransform ...
JAVA反序列化之CC2链分析
环境poe.xml12345<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.0</version> </dependency>jdk: jdk8u71CC: Commons-Collections4.0,注意这里的依赖和之前不一样的
我们这里不能像CC4那样利用 TransformingComparator.compare() -> InstantiateTransformer.transform() -> TrAXFilter.TrAXFilter() 去调用 TemplatesImpl.newTransformer()
而是直接利用 InvokerTransformer.transform()来调用TemplatesImpl.newTransformer()
因此我们只需要修改Transforme ...
JAVA反序列化之CC4链分析
因为 CommonsCollections4 除 4.0 的其他版本去掉了 InvokerTransformer 不再继承 Serializable,导致无法序列化同时 CommonsCollections 4的版本 TransformingComparator 继承了 Serializable接口
环境12345<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.0</version> </dependency>
链子1234567891011121314/*PriorityQueue.readObject() PriorityQueue.heapify() PriorityQueue.siftDown() PriorityQueue.siftDownUsingComp ...
JAVA反序列化之CC3链分析
环境jdk:jdk8u65CC:Commons-Collections 3.2.1
和Java利用defineClass()加载动态字节码原理相似,可以参考:但是只加载恶意类 不初始化的话 是不会执行代码的,还需要一个 newInstance 初始化的操作。defineClass() 往往都是 protected类型的 只能通过反射去调用
具体调试和过程都在这篇文章:[[java加载动态字节码]]初步链子:12345TemplatesImpl#newTransformer() TemplatesImpl#getTransletInstance() TemplatesImpl#defineTransletClasses() TransletClassLoader#defineClass() Class#newInstance()
CC3相对于CC1和CC6的优势是可以加载任意动态字节码,假如题目有黑名单限制不能出现flag等敏感词,我们就可以通过这种方法来绕过
而我们最终的目标就是调用TemplatesImpl.newTransformer()
CC1加Templ ...
JAVA反序列化之CC6链分析
由于jdk8u71之后sun.reflect.annotation.AnnotationInvocationHandler#readObject的逻辑变化了,没有setValue()方法了:
CommonsCollections6是commons-collections这个库中相对⽐较通⽤的利⽤链,不限制jdk版本
环境:
jdk8u71,地址:
Comoons-Collections 3.2.1
poe.xml1234567<dependencies> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency></dependencies>
链子1234567891011121314/* Gadget ...
snakeyaml链子学习总结
12345<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.27</version></dependency>
基础示例Person123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354public class Person { private String name; private Integer age; public String school; protected String province; public String getSchool() { System.out.println("getSchool 方法被调用&qu ...
C3P0链子学习总结
URLClassLoader链1234567<dependencies> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency></dependencies>
PoolBackedDataSourceBase入口链sink点在ReferenceableUtils.referenceToObject()方法里面有类加载器加载恶意类
一直查找用法:1PoolBackedDataSourceBase.readObject()->ReferenceIndirector.getObject()->ReferenceableUtils.referenceToObject()->
我们查看PoolBackedDataSourceBase.r ...
DASCTF X GFCTF2024 | 四月开启第一局wp
cool_index1index = parseInt(index);
考察parseInt()函数的特性这个函数处理数组只取第一个值,或者处理数字开头的字符串也会只取前面的数字eg.123456789101112const index = parseInt("7a");const target=7;console.log(index);console.log(index>target);console.log(Number.isNaN(index))var test2=Array("7","2");var res2=parseInt(test2);console.log(parseInt(res2));console.log(Number.isNaN(res2));console.log(res2>7);输出1234567falsefalse7falsefalse
EasySignin这里抓包很明显发现可以修改任意用户的密码,我们尝试修改admin的密码,然后登录admin的账号
getpicture.php接口 ...