By烟花易冷

XNUCA2018 网络安全联赛杂谈
2018-11-25

2小时前刚刚结束了2018全国高校网安联赛(X-NUCA’18)线上专题赛,不知是不是广州的冬天特别容易使人多愁善感,历经了今天的比赛后感触良多,遂来篇总结。

其实,我与朋友一直想参加“蓝盾杯”比赛,但是却不料今年比赛时间提前这么多,并且由山东那边主办,错失了比赛的时间与机会,偶然翻起比赛讯息,发现 XNUCA2018 举行在即,便拉着队友去报了名。不得不提这次比赛一起组队的伙伴实力都是相当不错的,就在一个月前举行的华农信安大赛中,我们都曾位列前茅(嗯,就是不能透露名次哈哈),所以这次比赛在我个人看来也是我们学校在 CTF 方面再次进军全国总决赛机会最大的一次吧。

作为这支 5 人战队里面唯一一个专攻 Web 型选手,在这次比赛发挥的还算正常,在这里对出题团队提出赞扬,题目非常有深度。为了通过一道越权类的题目我从头到尾温习了一遍 OAuth 2.0、CAS、SSO 认证方式,特别是 OAuth 2.0 中关于 redirect_uri 锁定预定域名、忽略 state 参数二造成 SSRF (服务器端跨站请求伪造)攻击这两个问题,在比赛过程中被还原的淋漓尽致,就连对回调参数的长度做了比较严格的限制。为了拿到分数我甚至动用了腾讯云服务器 + 短域名从中拦截,方才顺利夺旗。除此之外,赛题把 PHP 的扩展与 web 程序结合起来的方式令人耳目一新,说起来这算是一个白盒子测试,主办方提供了一个 PHP 扩展文件(.so 结尾),需要选手自主反编译并结合汇编相关的知识,挖掘出拓展模块的漏洞,将 Web 类型题目与 Pwn 相结合,实在是高!题目中还不乏 PHP 源码审计类的题目,提供了一个国人原创的 SpeedPHP 框架所写的 Web 程序(根据我的审计与框架源码对比,应该是 SpeedPHP 没错),要求从中取得 shell 权限。这又是一道白盒测试题,拿到源码时我便发现 session 中有蹊跷,或许可以将 session 反序列化的方法用上,但最终还是兵败一城。这道源码审计题目应该是这次比赛中最难的 Web 类题目了吧,直到比赛结束前 4 分钟才被福州大学的战队解出来。

经过 14 小时的战斗,我最大的感受便是“真不愧是国赛”呀,题目质量非常高,甚至没有一道所谓照顾初学者的“签到题”。关于 OAuth 方便的渗透与实施整体基本上是还原了 2014 年 Github 被曝光的漏洞,而关于 SSO 单点登陆的题目虽然最终我没有取得 flag,但是做起来似乎是与 Uber 事件有关。此次共有 333支队伍参加比赛,最终却只有 78 只队伍成功得分(或许是题目真的难吧),我们队伍一共攻破三道题,一道 Crypto 和两道 Web,位于第 33 名。尚未知晓是否有缘于决赛,但是能打到全国前 10% 也算是我们各显神通不忘初心了吧。

感谢奋斗了一天的队友们,下周“鹏城杯”网络安全竞赛再战!

2018年11月25日凌晨

(PS: 因为比赛结束24小时内需要提交 writeup,是不允许对外讨论关于比赛题目内容的,所以本文写好之后在博客后台定时晚一天发送以避嫌~ 不说了我继续去写两道 Web 题目的 writeup 了,写完如果有合适的我将会放出来分享)