CISCN 2021 总决赛 ezj4va (AspectJWeaver写字节码文件到classpath)

复现地址👉[BUUCTF在线评测 (buuoj.cn)](https://buuoj.cn/challenges#[CISCN2021 总决赛]ezj4va)

BUU上面这道题被改成加固题了,ssh连接就能拿到源码,刚开始黑盒需要访问/robots.txt,返回disable:www.zip,再访问/www.zip就能下载源码了

首先查看pom.xml依赖

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>8.5.38</version>
    </dependency>

    <!-- 本地测试加的tomcat-embed-jasper,不然会报错 -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <version>8.5.38</version>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.5</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.72</version>
    </dependency>
</dependencies>

aspectjweaver依赖,但没有CC依赖

HashMap.readObject()

​ HashMap.put()

​ HashMap.hash()

​ TiedMapEntry.hashCode()

​ TiedMapEntry.getValue()

​ LazyMap.get()

​ SimpleCache$StoreableCachingMap.put()

​ SimpleCache$StoreableCachingMap.writeToPath()

​ FileOutputStream.write()

put会触发写文件,key为文件名、value为文件内容

skusoldCartStr均可控,分别对其反序列化得到toAddcart

接着遍历toAdd.skuDescribeMap.Entry,将其键值对放入toAdd.skuDescribe

这里就能触发StorableCachingMap#put

任意写文件能做些什么?

上传JSP马?题目的配置好像不会解析JSP。。。不太懂

但题目设置了target/classesWEB-INF/classes,可以往classpath写字节码文件,重写类的readObject方法,后面再次触发反序列化。(泰妙辣)

但如果SpringBoot生成的胖jar,这招就不管用了。可以参考这篇文章👉LandGrey's Blog

image-20230603135007804
image-20230603135554981

再访问/cart/query,把Cookie中的cart改成Evil序列化的结果

image-20230603135647152

若题目出不了网,试试写个Filter内存马

Evil换成下面的MyFilter即可

Last updated

Was this helpful?