摘要:这是一条摘要
写在文章前的话由于Shrio-550要利用CB链才能RCE,加上PolarCTF里面有一道CB链的题一直想写,所以先来学CB了,但是CB链白日梦组长没有开课将,所以这里是看https://www.cnblogs.com/1vxyz/p/17588722.html这篇文章学习的,文章中有诸多借鉴,文章风格可能与先前几篇有点区别
什么是CommonBeanutils与JavaBean?CommonsBeanutils 是应用于 javabean 的工具,它提供了对普通Java类对象(也称为JavaBean)的一些操作方法bean的中文是豆子,可以理解成一个“像豆子一样的小东西”,因为是一个一个独立的“对象”JavaBean 是一种Java语言写成的可重用组件,是一个“类”,且需满足:
public
Constructor是无参的
类中有private属性,也对应的有get、set方法去更改这些属性的值(不一定非叫get,也可以是getValue、setValue这样的)
对于boolean类型的成员变量,“is”等效于get与set其中get、set方法在Jav ...
摘要:点击标题阅读全文…
其实CC链都是差不多的,后面的Runtime命令执行的实现是一个原理,主要还是看各种调用方式,既然之前CC3实践了动态类加载的方式,那么我们也就一律采用这种更加隐蔽的方式来调用了,先说CC2
CC2调用部分:
123456789101112TemplatesImpl templatesImpl = new TemplatesImpl(); Class tc = templatesImpl.getClass(); Field nameField = tc.getDeclaredField("_name"); nameField.setAccessible(true); nameField.set(templatesImpl, "aaa"); Field bytecodesField = tc.getDeclaredField("_bytecodes"); bytecodesField.setAccessible(true); byte[] code = Files.readAl ...
摘要:点击标题阅读全文…
相较于CC1、CC6两条链直接去加载Runtime类,在一些禁止直接调用Runtime类的情况下,CC3利用了Java的动态类加载的方式,进行了“更隐蔽”的Runtime调用找寻思路如下1、动态类加载依赖ClassLoader,ClassLoader通过读取byte对象,使用defineClass读取byte数组来加载类
12345protected final Class<?> defineClass(byte[] b, int off, int len) throws ClassFormatError { return defineClass(null, b, off, len, null); }
但是ClassLoader.java中的defineClass是protected的,查找调用了defineClass的方法发现在com.sun.org.apache.xalan.internal.xsltc.trax中的TemplateImpl类中存在:
123Class defineClass(fi ...
摘要:点击标题阅读全文…
Run ListRun List概述想象一下,你的硬盘是一本非常非常厚的书,而你想要保存的文件是一篇很长的文章。
如果文章很短,比如只有一两句话,你可以直接把这句话写在书的目录页上。在 NTFS 中,这叫做“驻留文件”(Resident File),文件数据直接存储在主文件表(MFT)的记录里。
但如果文章很长,目录页上写不下,你就得把文章写在书的正文页里。你可能会从第100页开始写,写满3页。但可能第103页已经被别的文章占了,所以你只能跳到第250页,再继续写5页。现在,你需要在目录里记录下这篇文章到底被写在了哪些页码上,否则就找不到了。这个记录信息,在 NTFS 文件系统中,就叫做“运行列表”(Run List)。
Run List本质上是一组指令,它告诉操作系统如何完整地找到一个大文件的每一个部分,相当于一个指针集,该集包含了若干个指向文件各个碎片的“指针”
什么是运行 (Run)?一次“运行”(Run)指的是硬盘上一段连续的数据块(簇),这些数据块都属于同一个文件。在我们书本的比喻里,从第100页开始连续写了3页,这“连续的3页”就是一次“运 ...
摘要:点击标题阅读全文…
脖子不舒服休息了一天,现在进入shrio的序列化章节,预告一下下一个章节应该是fastjson,之后就是做题实战了现在要讨论的是shrio-550的反序列化漏洞,非常远古的版本,同时也意味着简单好学,我这边采用的是shiro-root-1.2.4这个版本环境搭建略过,可以拷打gemini搭建,注意maven配置就好在我们使用默认密码root/secret登录之后,发现登录状态下的数据包中始终存在rememberMe这一字段,而且是base64形式的,也就是说这一段很可能是要反序列化的数据,那么就在shrio的源码里面找cookie相关,连按两下shift搜cookie:只有一个CookieRememberMeManager类,进去发现了getRememberSerializedIdentity方法,代码比较长,但看名字就知道是反序列化rememberMe数据的方法,那么继续查找这个方法的调用:最后到AbstractRememberMeManager类里面来,它的getRememberedPrincipals方法中对getRememberSer ...




