25上半年java题目随记

java随记

总结一下25年上半年打的比赛之前赛后的复现笔记,以及最近看到的一些比赛的思路

还有想来一波高产(都是之前欠下的,想学的太多了,结果之前刚开始搞一点就会又看到文章又想学习又把这个放下了,长期以往欠下了挺多的),然后就老老实实沉淀一下,不知道能不能撑住学习完这些,我太懒了

25 ccb&ciscn 半决赛 TimeCapsule

其他逻辑不管,sink点是readObject,直接看重写的ObjectInputStream和给的一个类

image-20250705033835387

image-20250705033851046

给了个InvocationHandler的实现类,说明要用动态代理走invoke方法

限制了反序列化的类只能是com.ctf下或是java包下的

直接说解法,PriorityQueue然后走Comparator的代理触发invoke调用getter,然后调用SignedObject的getObject

这一题当时攻击想不到,fix倒是容易想,但是写repair.sh脚本时应该先杀死原来的进程,因为这个问题最后一轮才拿分,要是早点解出来,说不定就可以进决赛了,唉,遗憾啊

25 软件系统半决赛 justDeserialize

javax.management.BadAttributeValueExpException
com.sun.org.apache.xpath.internal.objects.XString
java.rmi.MarshalledObject
java.rmi.activation.ActivationID
javax.swing.event.EventListenerList
java.rmi.server.RemoteObject
javax.swing.AbstractAction
javax.swing.text.DefaultFormatter
java.beans.EventHandler
java.net.Inet4Address
java.net.Inet6Address
java.net.InetAddress
java.net.InetSocketAddress
java.net.Socket
java.net.URL
java.net.URLStreamHandler
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
java.rmi.registry.Registry
java.rmi.RemoteObjectInvocationHandler
java.rmi.server.ObjID
java.lang.System
javax.management.remote.JMXServiceUR
javax.management.remote.rmi.RMIConnector
java.rmi.server.RemoteObject
java.rmi.server.RemoteRef
javax.swing.UIDefaults$TextAndMnemonicHashMap
java.rmi.server.UnicastRemoteObject
java.util.Base64
java.util.Comparator
java.util.HashMap
java.util.logging.FileHandler
java.security.SignedObject
javax.swing.UIDefaults

这个黑名单应该算限制的比较死了,readObject到toString好像没有能用的

这里说一下,我认为复现不仅要知道解法,还应该结合当时的实际环境

半决赛是线下,一般都是不出网的,现在网上都是打出网的jndi,我认为就复现来说是不对的

springaop

这个我很早就看过,但认识理解不深,导致不太会修改,当时也就做不出来

https://gsbp0.github.io/post/%E8%BD%AF%E4%BB%B6%E6%94%BB%E9%98%B2%E8%B5%9B%E7%8E%B0%E5%9C%BA%E8%B5%9B%E4%B8%8A%E5%AF%B9justdeserialize%E6%94%BB%E5%87%BB%E7%9A%84%E5%87%A0%E6%AC%A1%E5%B0%9D%E8%AF%95/

直接看这个就行了

对于文章中的Ldap_SERIALIZE_DATAjndi_Reference都是需要出网才能攻击

但是应该是不出网的

解决方法可以直接调用DruidDataSource的getter

因为DruidDataSource的getConnection在连接时有个参数可以执行初始化sql语句,直接利用这个调用hsqldb的二次反序列化即可

hibernate

这个学过一点,但忘光了

软件系统安全赛2025华东赛区半决赛wp-web - Potat0w0 (potatowo.top)

hibernate也可以调用getter

同理,文章使用LDAPAttribute发起jndi同样需要出网

跟上面一样直接调用DruidDataSource的getter

可能的出题人思路

image-20250705062100138

很明显诱导我们,PriorityQueue然后走User的compare,能够调用任意类的compare方法,并且有两个参数

应该就是让我们去找什么类的compare方法能够走到sink点或者调用getter方法

他那个黑名单感觉是诱导我们说jdk.jfr、com.sun感觉会有东西,但我没找到,当然也可以从hsql或hibernate下手

总之就是找利用

tabby

match(source:Method) where source.NAME ='compare' and source.HAS_PARAMETERS = true and source.PARAMETER_SIZE = 2 and source.SUB_SIGNATURE contains "compare(java.lang.Object,java.lang.Object)"

return source

大概这样查吧

然后看到org.hibernate.type.ComponentType#compare方法

PixPin_2025-07-05_17-39-20

这不跟hibernate后半段长一样吗

image-20250705174455715

应该拼接上就行

看着应该没问题,有兴趣的可以试一下

或者有没有大佬找一下其他compare能利用的

25 软件系统决赛

[2025 软件赛决赛 记录 | A day in AsaL1n](https://asal1n.github.io/2025/05/20/2025 软件赛总决赛记录/)只能说师傅太强了

backup

该dedecms版本后台有个cve,但不知道怎么进入后台

结束后讨论提到可以本地搭建数据库,然后连接我们本地数据库

我当时想到的是把他的网站重置一遍(但没啥用)

学校另一个队的师傅进了后台,但不会打,asalin师傅却直接找到个任意文件读取是在太强了

gld-xs

确实不会审计这种代码较多的tomcat,没啥思路而且都在看另一题所以基本没咋看

看了下审计思路

有个学生权限,先找有权限的路由,然后看对应逻辑,然后就发现代码存在反序列化漏洞,剩下就是加解密问题

就学一下审计思路

misc题忘了叫啥

pickle反序列化,是在server端,我们要用pwntools去连接他

主要是要处理无回显问题,这里能访问到那个self,可以用self.send来进行回显

然后本地跑通了,远程一直不行,直到后面出了提示才做出来,末尾加个EOF

tm的,就是这个一直被卡着,浪费大把时间

2025SUCTF

sujava

当时瞄了一眼,但是没搞懂作者的混淆是什么意思,然后不了了之

现在看一下思路

host处存在注入,可以使用官方文档提到的不使用:的写法连接

jdbc:mysql://address=(host=127.0.0.1)(port=3306)(database=test)(user=)

然后waf可以使用URL编码绕过(每个字符都要)

ez_solon

alibaba的sofa hessian,自带黑名单(debug才能看到)

有fastjson而且给了toString,就是让我们找toString——》getter能够利用的

看到依赖中有h2数据库,我们可以想到找getConnection

tabby找一下可以找到UnpooledDataSource

我没找到附件,没法用tabby跑一下了

当时我没咋打,看了下队里没人做这题感觉挺难就算了

然后赛后看到wp,其实找getConnection直接找DriverManager或DataSource的子类就行(不一定,但方便)

这里恰好就是

然后有securityManager,在命令执行时先System.setSecurityManager(null),然后执行java命令即可

2024 ciscn bookmanager

RCE vulnerabilities · Issue #73 · opensolon/solon (github.com)

当使用solon框架的GateWay,并且引入官方依赖solon.serialization.hessian时,如果请求的api带有参数,请求包的body部分会用hessian进行反序列化, 从而导致远程命令执行。

POST /api/rest/book/addBook HTTP/1.1
Content-Type: application/hessian
Host: 127.0.0.1:8080


xxxxxx

在readObject前有个黑名单,说是KMP可以用utf-8-overlong-encoding绕过

然后又会发现hessian-lite中的ClassFactory里又有黑名单

对比可以发现黑名单2少了sun.print.

国产web框架Solon-v2.5.11RCE漏洞 (pankas.top)

sun.print.UnixPrintServiceLookup

就调用这个的getter

finally

就这样,要是还有就继续添加点思路


25上半年java题目随记
https://zer0peach.github.io/2025/07/05/25上半年java题目随记/
作者
Zer0peach
发布于
2025年7月5日
许可协议