记一次AWD反杀之旅
1 背景
星盟团队的内部awd训练,邀请我们团队参加,然后想着也没什么事情就报名了。
为什么说叫反杀之旅?
因为最开始的时候由于技术师傅的手误,前两轮设置后台check扣分的时候多按了一个0,导致一次check扣了我们1000分。。。
本来每个队初始分数是1000,结果我们一下变成了0,成了倒数第一。
不过经过团队的紧张的补救以及多年的手速,在多扣了几百分的情况下最后追赶到了正数第二名的位置。
觉得还挺有意思,所以今天写篇博客来记录下过程。
1.1 比赛规则
比赛时间
八月十四日(今晚)晚六点四十到十点四十
比赛规则
(队长比赛前五分钟找我私聊拿各自的登陆密码并尽快修改)
1.每个队伍分配到一个docker主机,给定ctf用户权限,通过制定的端口和密码进行连接;
2.每台docker主机上运行一个web服务或者其他的服务,需要选手保证其可用性,并尝试审计代码,攻击其他队伍;
3.选手可以通过使用漏洞获取其他队伍的服务器的权限,读取他人服务器上的flag并提交到平台上。
每次成功攻击可获得5分,被攻击者扣除5分;有效攻击五分钟一轮;
4.选手需要保证己方服务的可用性,每次服务不可用,扣除100分;服务检测五分钟一轮;
5.不允许使用任何形式的DOS攻击
因为是awd一般是线下赛,线上的awd确实还是第一次搞。
最开始的时候以为是在他搭建的内网里,还要端口转发到本地才能打,感觉麻烦很多。
后来才发现不是,就是一个外网主机开了很多docker,不同docker在不同的端口,打的时候IP都不用换,直接找端口就可以了。
看了下界面还是挺炫酷的哈哈哈
2 冷静分析
拿到ssh后先登上去,改密码,保存源码,D盾扫一扫
虽然我经常发帖子过D盾,但是D盾确实很厉害啊哈哈哈,在比赛中还是非常有用的
老套路,被留了各种后门。
因为本来预定的环境有问题,启用了备用线路,所以只有一个web一个pwn,那就慢慢看吧。
2.1 第一个后门 任意命令执行
文件名 api.inc.php
很多文件都包含有这个文件
authcheckæ¯ä¸ªarray_mapï¼ä¸é¢51è¡åè°ç¨äºè¿ä¸ªauthcheck,
代码意思就是说收到数组authåå base64解ç ä¸éï¼ç¶åç¨authcode参数来任意命令执行
那么我们就可以构造以下payload:
|
|
auth参数解码后是
|
|
就可以生成个用蚁剑连接的一句话啦
附一张当时的截图
最开始因为手速快,所有的人都被我们拿了flag
2.2 第二个后门 一句话木马
这个没什么说的
后来发现他的$islogin可以随便绕过。。根本不用登陆。。
2.3 第三个后门 LFI
直接包含flag就可以读取
2.4 第四个后门 任意文件上传
主要代码
|
|
意思就是说,收到上传文件后检查后缀,然后保存。
但是仔细看这一句
|
|
如果后缀是这么多的一种,那么变量$ext 就被赋值为png
然后if语句就结束了
也就是说他这个判断后缀是没什么卵用的,任意的后缀就可以跳过他这个判断继续往下执行。
但是当时无法利用,因为网站权限被设置为不可写。。。
也就是说你只有ssh才可以更改网站的内容。
3 马失前蹄
因为漏洞都比较简单,很快就看完了。
简单说了一下分工,就让牛逼牛逼最牛逼巨佬naivekun师傅修洞,我们就开始写批量getflag脚本然后批量交flag
结果突然听见naivekun师傅大叫一声卧槽
看积分榜我们居然只有100分
其他队都是1000起步
喵喵喵???
我眼花了吗???
后来问kun师傅怎么修的,他说直接把参数删了。。。
完 蛋,国 赛 重 现
其实研究一下规则就知道,别人打你就扣5分
但是你修炸了就一下扣100。。。
唉,国赛就是这样被坑惨的,做题不少。。。但是越修分数越低。。。
但是也不会掉这么多啊,一下成了倒数第一
后来看群里才知道,由于技术师傅的手误,前两轮设置后台check扣分的时候多按了一个0,导致一次check扣了我们1000分。。。
然后我们手速比较快修的比较急,刚好在扣分的第一轮没修好就被扣分了
赶紧把洞重新修了一遍
gg,跟别的队差1000分还打个毛啊
猛男落泪.jpg
4 搅屎翻盘之旅
不过这个比赛有一点好处就是时间长,5分钟一轮,四个小时。
算了算我们还是有翻盘的机会的
毕竟手速快,顺便稳定了权限,基本上当时所有队伍的权限都在我们手里。
分工了一下
一个人稳定权限拿flag,一个人写批量脚本交flag,一个人搅屎。
pwn跟web是分开的,也差不多这个样子
当时自己批量getflag的截图
这是一个洞的脚本,多的图就没截了
然后慢慢分数就涨了上去,倒数第二还是第三吧
4.1 删库跑路
只靠得分不行,因为分差太小了,一轮全部拿到其他队伍的flag还没有扣得多
所以就想着搅屎
因为别人扣分实际上就相当于自己队伍得分
搅屎本来想删站的,结果没权限,就少了很多乐趣。
然后想着能不能fork炸弹啊磁盘写满啊这种
后来naivekun师傅发现可以删库让整个站500
哈哈哈哈快乐
删库跑路图:
被群里人发现了
基本上把大多数队伍的库都删了个遍
但是我们后来发现
删库居然不扣分???
在群里问技术
原来check扣分异常。。。所以技术直接把check关了。。。
好的吧,反正继续搅屎没毛病
然后写个循环脚本,继续删库。。
pwn也开始搅屎了
附上队员blackbinary的犯罪证据
直接echo fuckyou到二进制文件里
这样其他队伍就无法攻击得到flag
5 逐渐回暖
后来因为搅屎比赛太过激烈
我们的队伍分数在逐渐往上涨,其他大多数被删库就在往下掉
最后就也不想打了,全部是自动化getflag,自动化提交了,大家也都自己干自己的事去了。
附上几张当时的截图
随机队名,我们是Colombia队
第三了
然后第二了
最后结果,第二名
6 后续
在多扣1000分的情况下从倒数第一反杀到第二
最后说给我们分数加上但是也没加,毕竟训练赛就当打着玩
还是挺好玩的,但是中途平台bug比较多
什么flag提交不上,提交频率过快
然而最让我懵逼的是
他平台有漏洞
每个队伍的cookie居然只是队伍名的md5。。。
阿伟死了
7 最后
总结一下反杀的原因还是主要靠搅屎,让其他队伍扣分
不然快1000分的分差靠只有5分一个的flag很难追上
不管怎么说这个线上awd还是挺有趣的
操作虽然都是常规操作,但也是对团队分工合作,搅屎技术的一次综合考验
特地写下这篇文章记录一下。
7.1 小插曲
喵喵喵???