与其说是摆烂不如说是无能,害怕做不出来题索性就看一眼然后打游戏去了。
RCTF24OpenYourEyesToSeeTheWorld
分析
接受一个map类型的bean,传一个JSON数据就可以,这里涉及到了过滤器,写了一个RequestWrapper来进行反序列化,应该是控制参数调用到这个过滤器来反序列化,那么有问题?传的是IP和port?怎么打?LDAP又怎么利用啊?之前都是lookup来调用的。。好困,睡觉了,期待wp来学习吧。
[JQCTF2024、RCTF2024 Web Writeup - Boogiepop Doesn’t Laugh (boogipop.com)](https://boogipop.com/2024/05/27/JQCTF2024、RCTF2024 Web Writeup/#OpenYourEyesToSeeTheWorld)
2024 RCTF SU WriteUp | TEAM-SU (su-team.cn)
看到wp才发现(new InitialDirContext(properties)).search(searchBase, filter, (SearchControls)null)
这段代码才是题目的关键。emm反思一下为啥没注意到?可能因为看不懂就没关注了吧,好吧,可能题目的关键点往往会是一些看不懂的奇怪的地方,hh
网上搜一下这个方法DirContext (Java SE 11 & JDK 11 ) (runoob.com)
search方法也可以触发jndi注入,但是要传入两个参数。
然后就是高版本的jndiJNDI - Longlone’s Blog,注意高版本一般都是打反序列化。
其中触发反序列化有一个细节
为了调用到com.sun.jndi.toolkit.ctx.ComponentContext#c_resolveIntermediate_nns
需要Tail不为null且不为空,且Tail的第一个元素有东西。
通过/来分割即可
1 | decodeObject:233, Obj (com.sun.jndi.ldap) |
故构造为
1 | {"searchBase":"dc\u003Dexample,dc\u003Dcom\u002f0","filter":"\u0028ObjectClass\u003D123\u0029","ip":"127.0.0.1","port":8088} |
unicode来绕黑名单。
反序列化打springboot的那个jackson
小结
感觉题目比较巧妙的点就是search来接受两个参数来导致JNDI,正好再控制其中一个参数就可以调用到反序列化。
JQCTF
全是黑盒,好家伙。看了一下wp,感觉黑盒更多是综合的渗透。比如我弱口令没登进去。。。
还有题是actuator接口泄露来获取信息。
Spring Boot Actuator 未授权的测试与利用思路 - 先知社区 (aliyun.com)
心得
感觉还是没有真实去比赛,比赛中有太多的细节值得注意。感觉自己的动手能力还是不过。纸上得来终觉浅,绝知此事要躬行。还是多实践啊。