AliyunCTF Bypassit1复现
Bypassit1
题目信息
给了Jar包,用JD-GUI反编译以后可以看到源码。
主要逻辑很简单,直接给一个反序列化的点。
检查pom.xml,如果有CC依赖给我们用是最好,这里都没得,只有一个springboot启动依赖
这意味着,我们只能从JDK和springboot启动依赖里去找利用链,引出今天的主题Jackson反序列化。
利用思路
TemplatesImpl代码执行
首先是,CC3里提到的TemplatesImpl实现代码执行的前半段,这里只给链子
lassLoader.defineClass()->
TemplatesImpl#defineClass()->
TemplatesImpl#defineTransletClasses()->
TemplatesImpl#getTransletInstance()->
TemplatesImpl#newTransformer->
TemplatesImpl#getOutputProperties
问题转换成,调用TemplatesImpl#getOutputProperties
ObjectMapper#writeValueAsString触发序列化对象的任意getter
先说结论,Jackson#writeValueAsString把传入对象转json时,会递归调用对象的所有getter来取属性的值。
尝试编写Exp,用objectMapper#writeValueAsString去触发templates的getter,进而弹出计算器
问题转换成,怎么调用ObjectMapper#writeValueAsString(templates)
POJONode#toString触发ObjectMapper#writeValueAsString
BadAttributeValueExpException#readObject触发val#toString
找到了反序列化链的入口类BadAttributeValueExpException,只需反射给val赋值成pojoNode即可。
注意事项
在序列化payload的时候,BaseJsonNode#writeReplace(POJONode的父类)的writeReplace会触发链条。
自己去跟序列化的逻辑去调试也能发现,这里解决办法是写一个同包名的Class,然后把writeReplace()注释掉。
感觉像是利用了加载顺序的问题,这里就不过多分析了。
本地Exp
远程Exp
Runtime.getRuntime().exec()命令不回显,需要反弹shell,这里注意反弹shell的命令是怎么编写的。
下面是生成Exec.class,动态类加载用的,代码执行
下面是生成序列化的文件object.ser,给后面python脚本传payload用的
用pyhton读文件发payload,主要是这个题没base64编码,直接ctrl+cv怕有特殊字符问题,本来反弹shell就对payload的要求很高了,写脚本发送减少踩坑的可能。
小结
bypassit1这道题,给出了如果没有额外依赖,getshell的一种方法。
知识点:
- Jackson#序列化,会调用序列化对象的任意getter
- PojoNode#toString会调到Jackson#序列化函数
- BadAttributeValueExpException#readObject可以调任意对象的toString
- Java反弹shell命令写法
参考链接
Jackson反序列化原理
Bypassit1利用链解析
大头师傅的复现计划
__EOF__

本文链接:https://www.cnblogs.com/jasper-sec/p/17880636.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)