参加的是“新华三杯” 高校网络安全竞技大赛,面向高校信息中心的网络安全竞赛。由于限定了选手范围,并且要求不能有学生参与,竞争降低了,所以还是可以一试的。

初赛前的准备

八月中旬时候领导问说有没有时间参加的时候,还挺感兴趣的,就直接开始搜索资料学习了。

按照领导说法我们在这个小圈子内是相对有技术实力的,说是16年时候参加类似比赛有前十(刚好有位上家单位前同事刚来就参加了,那时我还没来),后来又说既然要参加,就不能丢人,一定要投入时间准备争取要前十。

但其实没多大信心。。。尤其是一开始学习看着别人的答案也要折腾很久才能跟着敲出来的题目的时候(主要是相关知识不够多,缺乏有关常识)的那个打击太大了,虽然后来发现看的题目是比较难的高水平的比赛的所以不懂也正常。。。

初赛前主办方还邀请了两位CFS大佬来给参赛的选手做线上培训,其中一位大佬是Anciety(还是研究生在读。。。),听了他一天的课很有收获,感觉能算入了半个门,并且感觉二进制这块还挺有趣的,杂项和密码题就感觉很无聊。

初赛培训期间主办方开放了个做题环境,可能是经过培训也可能是难度确实比较低,做那些题目总算是回复了点信心。我个人就把准备重心放在二进制上(其实领导是建议我们放弃re和pwn来着。。。)

于是在初赛前把主办方练习平台上的re题都给做掉了(练习平台只在线上培训的那两天开放,那两三天也是很拼熬夜才能学到点基础知识来做题),web也做了一大半,misc和密码也做了一点,但pwn还是没能学会一直挂0真的只能放弃。

这时候离接触CTF只有一两周时间,虽然没能都把该会的学会但考虑初赛题目难度应该和主办方给的练习平台上难度差不多,能在一两天学这些也还行了,别人的水平可能大概也是半斤八两。。。

自我感觉准备得挺拼了,再结合领导说的以前成绩不错(可以抱他们大腿)。。。所以又是挺有信心了。。。

初赛

领导队长得先做理论题,我们几位队员就先做的CTF题目。

第一题签到题(是个简单的密码题)挺快解决,上家单位前同事也很快解决了第二题流量题。

我还以为会这么顺利下去。。。就专心要弄re的题目,一共有两道re,预期是解决完第一道(第二道如果比较难就想着直接放弃,pwn如果有时间再考虑)再和队友们一起解决其它题目。

re第一题很简单,只要会修改程序的走向就能得到flag。问题是,练习题中没有这种类型(修改程序走向,比如强制跳转道某一个函数去)的题目,所以相当于没实践过。。。虽然一看那个代码就知道思路是改下走向flag就出来了。。。但问题是还是不会用工具改,gdb也不太会使。。。折腾了很久(一直在看要怎么用IDA修改程序流)没弄出来。。。

re第二题难一点但好像也还行,是misp的程序,给出了一个加密程序和输出文件,应该是要根据加密部分代码的反编译来逆推出输入文件(肯定要编程了),输入文件应该就包含了flag,但还是只能放弃了,因为难度一看比练习题大。。。

比赛时间一共是3小时,在折腾了一个半小时的re第一题后我总算放弃了,和队友们一起想办法看怎么解决web之类的题目。。。但是很遗憾一道都没能做出来,也就是一共就做了两题。。。惨不忍睹。。。

初赛后

其它题目倒不是太遗憾毕竟没去花时间(然后web题在赛后也是没法复盘的,环境消失了),就是那道re的第一题让我耿耿于怀,明明是有思路而且也比较简单(在分析完说只要改个程序走向就能得到flag时候看到平台也还没有人做出来),可就是败在工具不熟不会使用。

初赛后的当晚又是熬夜搞,终于知道怎么改程序流了(原来还得装个keypatch才行。。。),其实真的是很简单很基本的一个操作。。。

修改程序走向

信心跌落到谷底。。。只做了两题似乎在50名边缘(有的学校做的很好,系统会把每题前三名做出的显示出来,有好几家学校出现好几次。。。)。。。然后对决赛也没啥期望了,按照这种水平差异好像没得比。

进决赛还有个奖励是送三套CISP培训(市场价接近3万),本来还以为连这个也没啥希望了。。。

但是似乎有的学校是学生参赛,也可能是有的学校决定不去参加决赛的缘故,反正我们也稀里糊涂进决赛了(做两道题目排名40几。。。)。。。

决赛前的准备

决赛是线下离线进行的,算上其它行程需要去隔壁省的隔壁省出差3天。

也因为是线下离线的,领导说要更要信心好好准备,因为线下的话,只能凭网络中心员工的个人的技术水平,而我们中心派出参加比赛的员工基本都会写代码,基本的Linux命令行操作也都会,这样比的话,应该前十是没问题的要好好争取。。。

并且形式跟初赛的CTF解题不同,决赛是三层网络靶场渗透比赛,似乎叫CFS靶场模式,在线上培训前也稍微学习了下,但不知从哪入手,以前也是没接触过所以完全不懂,不知道题目啥形式,也不知道环境啥形式。

所以主要是培训后才大概知道是怎么回事,其实就相当于渗透测试,经过这个线上培训大概了解了渗透测试是怎么个流程了也终于知道乙方的渗透测试服务是有哪些工作量了,从这个角度上看参加这个比赛就算没拿什么名次也很有收获了,感谢主办方新华三哈哈。

也是因为培训后才知道了要学习的方向,所以主要的准备也是从线上培训时才开始,从9月11和12号线上培训到9.16线下比赛的这段时间很努力在学了。初赛时省内排第五好像,想到初赛时候的那名次怕丢人,本人差不多能花的时间都花在这上面了。。。

其他队友也都很努力,上家单位前同事周末甚至还去加班装环境和学习,我看了都不好意思在家学,也跑去加班,还拿了他们部门的一位离职员工之前用的电脑装环境,准备带两台过去。

也就是在这次的培训中,才了解了msf等kali中工具的用法,但是还远远不够,线上练习环境同样是到了时间就关闭,并且也没法用来验证本地工具是否能用,为了不和初赛时候犯同样的工具不熟的错误,肯定是要搭起环境过一遍。

为了搭环境实践,搜啊搜,总算是知道了可以通过metaspolitable3/vulnhub/vuluhub这些来创建靶机环境,有的是docker也有的是虚拟机。

同样把培训时候提到的知识点基本都过了一遍,并在电脑上存着很多笔记和命令参考,web方面的用dvwa实验,主机方面的用metaspolitable3的虚拟机实验。最担心的是多层网络代理,培训只是讲了搭建代理的过程,没讲经过代理之后怎么往下攻,怕第一层拿下之后不懂得如何往下走。

也是时间不足的缘故,到了酒店后我们依然还在努力解决如何搭个多层的网络并进行过代理后继续攻击的试验,出的状况也是很多:上家单位前同事电脑的virtualbox没法用啊(幸好多带的那台可以。。。)。。。没网线对接啊(找酒店要了。。。)。。。半夜那家四星酒店居然停电啊(但是怕有安全问题还去了楼下到了1,2点才上来)。。。比赛当天的早上也在尽力搭着试验,但最终也只能试验了一层的情况。没办法,也没时间了,只能上了。。。

另外,在酒店以及吃饭时候看到其它学校参赛队伍时候,我们又更有信心了。我和前同事都觉得从外表上看有很多选手不太像工程师,没有那种工程师的气质,似乎是作为管理序列的人员的存在,只做甲方的活的感觉—-也就是领导所说的我们会写代码其实在这条线中算还不错的了。

决赛

1-20名似乎是桌子比较大还有隔断开跟平时工位差不多,队员间隔得开,我们初赛排名靠后,就是2张桌子拼在一起但还更便于交流。

每个队伍相互隔绝的网络和靶机环境,第一层有三台靶机,前同事根据之前准备的nmap命令扫出来那三台的地址,分别是门户、邮件、oa,开始进行攻略。

门户那台相对简单,把命令入口给在网页前端能用一句话木马配合蚁剑得到shell,拿到shell后又在目录中找到数据库配置可进入数据库。与此同时,邮件那台中找到了门户的web管理员密码(如果没有找到的话,得从数据库中得到这个会比较慢),oa中也找到了oa的web端用户密码。但是试了几种可能的提权办法都没法进行下去,感觉要用ssh密码爆破但是没试验过。。。幸好是弱密码并且是猜中了密码。。。至此拿到第一层门户主机的root权限,并且把这台上该拿到的分数都拿到了。

但是其它就没这么好拿了,第一层的邮件和oa一直没能获得shell更别说提权,再拿下门户之后,我们也集中尝试另外两台并且继续往第二层扫描以及尝试使用刚拿到root的门户进行代理再攻击。邮件那台完全不懂怎么拿shell。。。oa那台在第一阶段就找到phpmyadmin可以跑mysql命令,但试了下那些mysql提权的例子都还是不行,oa的web端传文件也不行,我们尝试在oa那台传头像中夹带php一句话木马也不行,加上木马后头像图片都传不上去。。。。。。尝试了很久没进展。。。决定放弃。。。此时差不多距离比赛结束还有1小时还是半小时?反正时间不多了,但是实时大屏展示的名次还不错了,算是可以交差了(那时我的心情很愉悦很放松了哈哈)。

但是还是需要再往第二层攻才能确保优势,并且都拿到第一层的一台的root了,不往下也很浪费,确认了第二层的其中一台是windows,估计用培训时候讲得ms17-010试就可以。但是怎么经过代理攻击过去对我们来说是个难题因为没试过(之前环境就没搭好,没试过),结果队长还很给力用proxychain起msfconsole(这个用法培训没讲,说明队长翻墙翻得熟练啊~~~),顺利通过代理攻击第二层的那台win拿到了分数,一举超过了其它后来的队伍。

以上只是大概的记忆,一些细节没记太清楚,但感觉我们都有发挥出了自己所学到的,队长和队友都很给力哈哈。

也有些细节倒是印象深刻:

  • 拿下门户root后看到的二层的网卡后对二层靶机地址的扫描和判断上,我出现了判断错误,忘记考虑到每一台一层靶机都会有一个接到二层的网卡地址,没给对正确的二层靶机地址(末位错,实际还是一层。。。)而前同事有考虑到这一点说了下理由一听就懂了(不愧是网络部。。。好熟。。。)。。。纠正了这点。。。
  • 队长的proxychains用法。。。其实我以前也知道这工具,就是命令行下对于那些不尊重proxy环境变量的命令包一层让他们也走代理。。。但却没能这样用,其实还是对于命令行不熟导致,领导之前说队长对linux很熟。。果然对。。。。
  • 队长在邮件找到有门户的管理员密码,一封正确一封错误,这点还挺接近实际的,很多情况下密码就是通过邮件和IM来传。。。而这也考验了我们队伍的配合,如果有互通消息能节约太多时间,直接省去了再从门户数据库中拿管理员密码的时间(后来想在数据库中找flag找不到,仔细想这个数据库的作用可能也只是让找用户名和密码而已。。。)
  • 之前备好的docker版的扫描工具(nessus和awvs)完全没发挥出作用,原因不明,似乎是因为网络环境是离线导致的,工具还是没能准备好,如果能用上扫描工具的话可能就能发现更多的攻击点(比如phpmysqladmin。。。我们根本不知道那个版本是否有可以渗透的点。。。也导致了oa那台在其它web页面上白花费了时间),最后还是用的nmap的扫描比较靠谱。。。
  • 其它队伍最多也只到第二层(看别人分数范围似乎都是一层的机器就能拿到的样子),说明其他人的准备比我们还不足,至少我们有尝试着想搭本地多层网络的靶场环境

总结

  • 限定了选手范围后其实整体水平就一般了,因为这条线的人大部分都是做甲方的,安全测试都是找厂商做,渗透测试的内容也都是临时学的,但这也符合比赛的目的,本来就是要提高这个条线的信息安全的意识和水平,有外援就没这个效果了(没学生参加的话就是菜鸡互啄,但是比赛目的就是要向我们这些安全方面的菜鸡科普安全常识并带入门,只有限定是这个条线的人参加,才能有这效果)
  • 换作其它会写代码和命令行的同事来比赛的话只要肯花时间准备也能达到领导的预期目标(前十甚至前五都很有可能),但是这次成绩这么好,其实也有点运气成分(别人准备不足我们相对有准备。。。猜对密码之类。。。没试过二层靶机却临时通过没试过的方式成功。。。等等之类的有点运气成分)。。。领导选人也很关键,既要有一定基础,并且也要有时间有兴趣能花下去,我们不像学生时间那么多,很多时候家里有事或者工作上刚好杂事太多就没法分出时间来学习这些了
  • 还能准备得更多还有很多提高空间,尤其是密码爆破/提权/根据搜到的管理页面版本进行利用/多层代理渗透/工具离线情况下确保能用。。。
  • 就算不看结果,在这过程中,学到了很多入门知识(自行搭靶机环境vulnhub/metasoplitable…等。。。三层网络环境。。。各种工具的使用。。。),已经可以再继续学习下去了,不像培训前完全不懂,再次感谢主办方新华三
  • 在比赛前几天,和队友们的共同学习中还挺开心的,难得有个机会一起折腾技术:周末加班学习、好几天都准备到半夜、一起讨论计划和复盘。。。很享受这个过程,希望以后还有机会。。。