本文谢绝转载!
引言
前几天去广东省广州市打了个 第四届 红帽杯 网络安全大赛总决赛,顺便就在广州随便转了转。
难得有机会进了线下,可惜队友因为疫情都在南京出不来了,只有喵喵没南京旅居史,于是就一个人去摸鱼了 2333.
这篇主要就是喵喵在广州的游记啦!
!!!多 图 预 警!!!
!!!流 量 预 警!!!
比赛
赛制
比赛的话就 24 号一天,从早上 11:15 打到 下午 17:15,时长 6h,这个比赛时间就很迷,想不到吧。
这次是喵喵第一次打 AWD plus 赛制,攻击分和防御分分别计算而后加在一起,选手没有对靶机的控制权,全程不接触 ssh。
就是觉得没那么有意思,其实就和解题 break + 修复 fix 差不多了,缺少了点对抗的味道了。只不过多了个轮次的概念,每个战队初始积分 5000 分,20 min/轮次,如果提交 flag 正确即 break 成功的话,平台每轮会自动攻击其他未修补漏洞的战队,把动态的积分给本队。与其说是攻击,平台技术层面感觉其实就是看有多少队没 fix 罢了。这里的动态积分和解出 flag 的队伍数、难度系数、解题时间有关。
Fix 的话,是通过 ftp 上传一个带有 update.sh
文件的 xxx.tar.gz
压缩包进行的,通过类似 mv -f xxx /var/www/html/xxx
的操作把文件覆盖掉从而进行修改。申请验证之后平台会用 check 和 exp 去测试这个环境,如果 check 成功而 exp 失败,就认为 fix 成功了;如果二者都成功,说明 fix 失败;如果 check 失败了,就说明修炸了,还反而会每轮扣 200 分。
其实这样的赛制对平台而言就很友好了,毕竟少了队伍之间直接的激烈的流量交互,资源消耗就大幅度减少了。每个战队每题一个独享环境,fix 的 check 环节整几个公共环境,大家排个队验证就完事了,break、fix 的成功与否整几个标志位,再加上一套判分逻辑就差不多了。
(当然这里只是咱随便猜想而已啦,真实场景肯定要比这个复杂
题目
说完了赛制下面就要说 比赛题目 了。瞎鸡儿唠嗑几句,不想看的话就跳过吧。
这次算是 3 web + 3 pwn 吧,虽然不知道有个 golang 的 web 是不是也和 binary 有关。
可惜的是比赛开始前几天南京突发了新冠疫情,正好队友 pwn👴🏻们都在南京出不来,最后只剩下喵喵一个人自己摸鱼了,没人一起聊天一起🤺,硬是坐了一天,也太难受了。(摊手
Web 的话,出了个 upload 上传,其中有个从 SESSION 中取出函数名执行,寻思着可能是命令执行,咱就过滤了几个 命令执行 的关键函数然后就 fix 成功了。有的师傅 过滤掉 ../
也修成功了。 break 的话比赛的时候还在想是不是类似于 TCTF 2021 那个 session 上传,但又不会玩……最后确实是这样,通过 ../
目录穿越直接构造 session 上传写到 /tmp
下然后调用吧。
此外有个 cms,opensns,基于 ThinkPHP 二次开发的。这题气死了,他给的文件有个 log 里面就有 payload,peiqi wiki 文库里也有现成 payload。喵喵下载下来了然而 VS Code 搜索出来了一堆冗余信息,于是一直在试 SQL 注入的洞,这个前台 RCE 的洞就没发现,然后审了半天源码也没找到洞……赛后听其他队师傅说现成 1day 直接心态炸了,草。
还有个 golang 写的程序,flag 存在 root 用户 ssh 的密码上,外面是一层 JWT 鉴权,鉴权通过之后可以执行命令,好像是存在任意文件读取,寻思着应该得通过啥办法读到 JWT 的密钥然后改成 admin 这样再进一步操作吧,等大师傅们的 wp 了。这题远程是直接一个 binary 可执行程序跑起来的,其他师傅说给的源码里的 binary 是 macOS 下生成的,和远程还不一样,现场又没给 golang 环境,咱不会修也没法修,喵呜……
不过这个 fix 的话其实有点迷,毕竟只需要官方的 exp 打不通就判定修成功了。于是有的师傅直接整了个通防,比如请求参数里存在命令执行,或者 flag
之类的关键字,直接 die
就完事了。
这里顺便放个 T4rn 师傅的通防。
if (preg_match('/system|tail|flag|exec|base64/i', $_SERVER['REQUEST_URI'])) {
die('no!');
}
$str ="";
foreach ($_POST as $key => $value) {
$str.=$key;
$str.=$value;
}
if (preg_match("/system|tail|flag|exec|base64/i", $str)) {
die('no!');
}
可执行程序的 fix 参考脚本。
# update.sh
cp ./修改后编译好的文件 /编译文件的目录
ps -ef |grep 编译的名字| awk '{print $2}' | xargs kill -9
cd /编译文件目录 &&./执行编译文件 > /dev/null 2>&1
后面有环境有可能的话再复现一下写篇博客吧,如果不咕的话。
Pwn 题的话,喵喵不会 binary 啊啊啊啊啊啊!有个 rust 逆向,有个 python 写的编译器,还有个 http 服务的堆题(还是赛后问别的师傅才知道是个堆题,只不过把菜单换成了 HTTP server 罢了),唉。
噢,这个比赛线下是收了手机不能上网的,难受死了啊啊啊啊啊啊!(虽然听说照样有队伍成功出到外网去了
看着就绝望(
还好没爆零(摊手
其他
比赛结束后有个 舞蹈表演,舞台灯光啥的还是挺到位的,其他比赛快学一学。
(可惜就这一个节目 233
以及,大家打开手机的闪光灯,原来这个就叫做 星空大合影 啊。
最关键是嫖键盘喵! 红帽杯限量版机械键盘!
是黑轴,用起来感觉还是挺香的,现在就用这个键盘码字呢(
面基
这次面基了 水函、T4rn、keer、芋头、batkiz、Nohn…
可惜比赛结束得太快,有几个师傅约了但没面上,呜呜。
线下和师傅们面基的时候倒没啥合影,只有 tg 这边神秘的面基仪式了。
游玩
下面就凌乱地写一下游记吧。
在路边发现了有一定年纪的 IC 卡公用电话,可惜貌似无法使用了。
晚上去了市中心,顺着花城广场一路逛到了广州塔,也就是小蛮腰,顺便看了珠江。
过了个珠江,就到了广州塔脚下。
当然还有熄灯后的。
广州塔观光门票挺贵的(
打卡了 主办方投的大屏广告。
珠江。
这个 APM 自动旅客输送系统 挺有意思的。
其实也是地铁,只是就两节车厢,算是自动驾驶吧。不过其实还是有个师傅在车上看着的,师傅还说,要是有一天不需要有人在车上守着了,那才是真正的自动驾驶了。2333
广州塔前的有轨电车
路上的公交无轨电车
广州还有 书报亭 唉
地铁1号线 站台和车厢一看就历史悠久了。
一路上的 骑楼
始于公元前214年的 北京路,历史真悠久啊。
饱经历史沧桑的 沙面岛,挺多来这拍照打卡的,还有带着各种摄影大炮的。
波兰驻广州总领事馆现在就在岛上,门口左右还有俩战士执勤的,那门口不能拍照
还有外国人在唱英文歌(唱的啥忘了
当然还少不了 吸喵喵 啦~
(是两只在 喵呜 的喵喵
恰饭
各种好吃的,广东茶点(没拍多少)、鱼皮、云吞面、双皮奶、烧鸭饭……
凉拌鱼皮吧,还挺有味道的,真没想到专门做鱼皮也能做得挺大的了。
不行,码着字现在看着肚子饿了。
那就先这样吧啊啊啊。
小结
大概就是——
打比赛 x
划水摸鱼嫖键盘面基旅游 sqrt
其实玩得还是挺开心的喵~
(咕咕咕,终于写完了
当然如果哪里写的有问题,还希望师傅们带带弟弟(
Extensive Reading
(溜了溜了喵~