技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
justDeserialize 绕过黑名单挖掘利用链
1398133550745333
CTF
242浏览 · 2025-03-27 04:48
返回文档
justDeserialize 绕过黑名单挖掘利用链
前言
当时线下的时候很多题,当时一开始下不了附件,之后看了一下,也只有一个 web 题目,做了半天,拿着工具倒着推,一步一步看了半天,也卡着没有做出来,之后看到
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/#%E7%AC%AC%E4%BA%8C%E6%AD%A5
学习学习
源码分析
目录结构
一看就是有黑名单的,还给了自己写的类
依赖
路由代码
一共两个防护,第一个就是对我们的字符串的防护
这个 UTF8 已经考过很多次了,而且本次研究的重点也不是这个,直接删除
然后就是自定义的 MyObjectInputStream类了
直接在 resolveClass 禁用,是不能使用 UTF-8 绕过的,只能使用一些新的手法去绕过了
而且黑名单 ban 的类也是挺多的
springAOP 原生链
这里会使用到 springAOP 的原生链,当时确实还不知道这个链子
使用 GSBP 师傅的 poc 简单分析一下
POC
调试分析
这里简单分析一下
首先进入很熟悉的类 BadAttributeValueExpException
其中 valObj 被赋值为我们的代理类,会触发它的 invoke 方法
invoke:215, JdkDynamicAopProxy (org.springframework.aop.framework) [1]
然后进入 proceed 方法
这个方法会一路调用到我们的 invokeAdviceMethodWithGivenArgs 方法
而这个方法就是我们的 sink 点了,可以看出来如果可以控制我们的参数,那么是可以实现调用任意类的任意方法的
而控制一直跟踪的话是来源于我们的 invoke 方法
跟进 getInterceptorsAndDynamicInterceptionAdvice 方法
目标是返回的 cached 为我们的恶意构造的类
因为缓存中一开是没有的,所以需要调用到 getInterceptorsAndDynamicInterceptionAdvice 方法
需要 return 成功,那么只需要看 add 的逻辑,而 add 都是 add 的 interceptors
跟进 getInterceptors 方法
需要满足实现 MethodInterceptor 接口才可以 return
再结合我们的 payload 的构造大概弄清楚了原理
实际上就是溯源到控制我们的恶意类,然后通过动态代理去链接到我们的 sink 点,实现控制 source 到 sink 的攻击
JdbcRowSetImpl 攻击
有了上面的利用链,这道题目就比较简单了,因为上面的链子使用到的类都没有被 ban 掉
只需要套上我们的 JdbcRowSetImpl 来打一个 JNDI 就 ok 了
当然这里需要注意的就是 BadAttributeValueExpException 被 ban 掉了
需要我们替换,根据题目给出的 user
很明显是在叫我们打 CB 那一套,因为只需要实现触发可控对象的方法就 ok 了
这里重载还给了提示
首先就是如何触发 compare 方法了,这个 CB 链是有说过的
使用 GSBP 的 POC,主要懒得再次去写一个,但是这里因为打 jndi 的话没有使用到
POC
运行成功弹出计算器
JNDI 服务也接收到了请求
调试分析
首先是我们的 cb 部分
readObject:795, PriorityQueue (java.util)
跟进 heapify
跟进 siftDown
跟进 siftDownUsingComparator
因为我们传入的 comparator 为代理类
调用代理类的方法的时候会调用invoke 方法
之后就是和 AOP 一样的效果了
成功来到 JNDI 的部分
触发了 JNDI 注入
hsql 二次反序列化
因为题目给了依赖,还可以尝试打 hsql 二次反序列化
这个如果直接使用工具就非常方便了
利用链如下
首先打的是一个 DruidJdbcAttack,这个可以触发我们的 jdbc 攻击,而题目依赖又正好给了 hsqldb:org.hsqldb.jdbcDriver
这里可以打一个组合拳,因为 hsql 可以利用的 sink 还是很多的,可以打一个二次反序列化
在二次反序列化的时候我们就不需要考虑黑名单了,直接打一个 jackson 的原生链
生成我们的数据后直接开始攻击
POC
收到请求成功弹出计算器
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
近期热点
一周
月份
季度
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:38700
2
一天
贡献值:24800
3
Yale
贡献值:21000
4
1674701160110592
贡献值:18000
5
1174735059082055
贡献值:16000
6
Loora1N
贡献值:13000
7
bkbqwq
贡献值:12800
8
手术刀
贡献值:11000
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
justDeserialize 绕过黑名单挖掘利用链
前言
源码分析
springAOP 原生链
POC
调试分析
JdbcRowSetImpl 攻击
POC
调试分析
hsql 二次反序列化
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板