🛁
这是👴第一次打高达80支队伍的大型AWD,👴此行的目标就是称霸酒店的游泳池。后来发现游泳池要钱,👴只能遗憾败北。(后来发现情报出了问题,根本不要钱,血亏)总的来说,酒店浴缸很带,主办方态度很好,赛场很清真,参赛体验很爽,赚了。
“终端越炫,嗨客越带;嗨客越带,帽子越带”
🐐AWD复盘
首先根据参赛手册,进行一个规则的复制:
|
|
- 比赛全程收手机,断外网,不能用waf,不准用不死马,大家都很清真,找回了ctf最初的快乐。
然后按照AWD开局的任务清单,进行一个盘的复:
准备阶段
- ssh连接:
- 主办方提供了ssh密钥,和靶机ip
- 于是省略
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.xx
环节。
- 于是省略
- 但是万能的Windows Terminal连不上去(依然不知道为啥),👴只能用图形化ssh客户端添加私钥连接。
- 主办方提供了ssh密钥,和靶机ip
- IP扫描:
- 共有7道题,3道web,4道pwn,每道题目一个独立靶机,有独立的ip地址。不同靶机d段不同,不同队伍c段不同,按初赛排名分配。平台上告知了全部的ip列表。
- 于是省略
nmap -sn xx.xx.xx.0/24
环节。
- 于是省略
- 选手机和靶机池在一个局域网内。不同队伍c段不同,一个队伍内的不同电脑d段不同。
- 共有7道题,3道web,4道pwn,每道题目一个独立靶机,有独立的ip地址。不同靶机d段不同,不同队伍c段不同,按初赛排名分配。平台上告知了全部的ip列表。
- 流量监控:
- 主办方贴心的提供了被打流量(但是只有下行流量),直接在~/package目录下给出.pcap文件。
- 于是省略
tcpdump tcp -i eth0 -t -s 0 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
环节。 - (不过用户名叫xctf,权限卡的很死。不给流量的话估计也只能在站里上流量监控脚本)
- 于是省略
- 更新速度很快,被打之后几乎可以立刻找到流量。于是手速很重要。
- 主办方贴心的提供了被打流量(但是只有下行流量),直接在~/package目录下给出.pcap文件。
开局阶段
- 备份源码:
tar -zcvf w.tar.gz /var/www/html
- 结果
> Permission Denied
,遂跳过
- 结果
- 扫马删马:D盾
- 👴直接在图形化shell里下载代码,然后崩屎了几次,手速慢了。
- 每个web题都有一个不明小文件,显然是小马,删除之。
- 备份数据库:
mysqldump -uctf -p --databases [dbname] > /tmp/db.sql
- 结果
> Permission Denied
,遂跳过
- 结果
- 改数据库密码:
mysql>SET PASSWORD FOR ctf@localhost=PASSWORD('newpass');
- 结果
> Permission Denied
,(╯▔皿▔)╯玩nm
- 结果
- 然后开始源码审计(❌)
- 然后等待被打之后翻流量(✔️)
攻防阶段
👴只看得懂web题目。三道web题全是cms,是经典lamp环境。可是👴看不懂cms,👴是five。
web1:safecms
- 比赛一开始,啪的一下很快啊,全场被打,翻流量抓到payload,是一个模板文件的任意读漏洞。直接批量拿flag。
- 定位到路由,注释之,不好使,还是被打;删除这个.class.php,不好使;👴怀疑是运行时缓存不更新,直接
service restart apache2
- 结果
>Permission Denied
,👴佛了
- 结果
- 就这样被打了好一会,才发现直接修改index.php,能直接生效,血亏。
web2:eyou
- 这道题被打的很少,被宕机的很多。抓流量,发现很多混淆流量。(日志写shell?)
- 👴跟着流量尝试用过滤的方法修复,但是还是被宕。
- 若干轮后,👴没办法,只好申请重置,并在下一轮被宕。
- 若干轮后,👴没办法,只好申请重置,并在这一轮被宕。
- 若干轮后,👴没办法,只好白给,并在某一轮恢复正常并坚持到最后。我???
- 该不会是某队或者裁判看我们太可怜帮我们重置了吧,世界上还有这么温柔的人,我真的哭死
- 这道题无了。(赛后才知道,有队伍找到sqli并登录后台,在后台关闭了站点并羊了管理员账号。修nm。
web3:lol
- 这道题是最后三小时放的,👴这时候已经自闭了几个小时。于是👴痛定思痛,开局直接把admin.php羊了,然后奇迹般的守到了最后。坏了,好起来了。
- 全场被打,翻流量找到payload,某路径下有白给shell,直接删马并反打。
- 某队使用了在网页输出中塞随机字符串的防御方法,但是没破坏flag,且填充的字符是固定的,被我肉眼识破,我直接进行一个
if ip == xx: flag = flag[12:]
。虽然没什么卵用,但是很快乐。
pwn:
一看到4个pwn👴直接傻掉。👴觉得👴不会做,因此也没去看,但听大佬说,直接抓流量进行一个转发就能拿分,👴下次一定准备好pwntools。
🔒自动化攻防框架
AWD中,手交flag实在是很浪费时间的行为。虽然有时候自动化不太好写只能手交,像这次十分钟一轮,有72支队伍,就算你手速惊奇,也没有时间审计源码了。因此打AWD重点就在一个自动化。网上能找到各种框架,但是用的时候总是不顺手,遇到bug也不会修。只有自己写的才最好用。
先说说用处最大的工具,就是批量攻击框架/自动化攻击脚本。这个框架主要有以下要素:
- 输入:
- 待攻击ip列表:通常写在ip.txt里
- 攻击函数:即封装好的payload请求
- 交flag函数:根据平台接口封装
- 输出:
- 批量攻击,输出攻击结果
- 攻击成功则提交
- 反馈得分结果
框架的核心无非以下逻辑:
|
|
比赛时,找到漏洞或者抓到流量,立刻写好相应的攻击函数,重启脚本即可。
为了提高稳定性和易用性,这套框架可以写的很复杂。比如:
- 加入多线程,让框架非阻塞的持续运行
- 加入面向对象,写成类库
- 自带一些trick,比如流量混淆器等。
- 当然,还可以写一个网站来可视化管理
这里就涉及框架编程了,能深挖的地方还有很多。
除了批量攻击脚本,用到的脚本还有:
- 权限维持/批量shell脚本:用于管理多个shell
- 但是不死马被禁用,因此本次比赛中shell出现的不是很多。
- (👴还准备了拿到白给shell之后持久化的脚本,结果一个shell都没拿到,准备个🔨。
- 文件监控脚本:用于监控flag等重要文件被读取和修改的准确时间,可以帮助确定payload
- 再牛逼一点还可以提供系统备份和回复功能。
上述都是系统脚本,大多在本机用python写的。下面说几种网页脚本,即直接用require/include包含的php脚本
- 流量监控脚本:区别于系统级流量监控,用于监控敏感流量以抓取payload
- 通防脚本:也就是waf,可以进行很充分的过滤
- 本次比赛中被禁用,因为确实破坏游戏体验
这些脚本,用好了才是趁手的兵器。这次比赛中👴的手速远不够快,延误了很多战机。
🌊快进到《考试周破防》
回顾整场比赛,相比正经的漏洞挖掘,随机应变的能力对分数也有很大影响。总结几个因素:
-
awd的得分是随时间积累的,因此要掌控全局,时刻盯紧每道题有无薄弱环节和突破口。本次比赛题目数量多达7道,👴队有大佬没来,还带了一个萌新,约等于二打四,出现了看不过来题的情况。
-
还有就是手速,由于流量很及时,payload一被抓到,甚至可以在一轮check之内丢进批量攻击脚本,直接和首先挖掘到漏洞的队伍平分分数。这要求自动化脚本的熟练运用,尽量避免手交flag。
-
最后还有一点策略问题。分析三种题目状态,列个表定性分析一波最优解:
能反打 | 不能反打 | |
---|---|---|
场上大多数Attacked | 先反打再修洞 | 不能修洞则down自己 |
场上大多数CheckDown | 打他喵的 | 尽量别down |
- 出现漏洞大部分人会被打,这时如果你不能立刻修补而能立刻反打,相当程度上是不亏的。如果你修不好也可以选择宕机,因为这样分摊了丢掉的分数。
- 尽量避免被打+被宕,扣双倍分数属实是血亏。如果决定宕机,先摸清check的时间和结算的时间,最好在新一轮结算后立即删站down自己。
- 当然,如果您能挖到洞,宁就是垂直上分的👴。
从8点半到6点半,打10个小时的AWD,要全程保持敏感和机智,确实对身体素质有些要求。👴坐高铁到合肥坐了6小时,打比赛坐了10小时,好悬没给我痔疮坐出来。晚上回到青岛并进行最后一次夜店,快进到《考试周破防》。