关注我们

线下赛AWD训练平台搭建手册

御龍御龍 安全文摘 2019-07-20 693829 0

相信大多数人都参加过CTF线上赛,但很少人接触到CTF线下赛AWD竞赛模式。因为没有怎么接触到AWD线下赛导致缺乏这方面的经验,虽然说网上有很多AWD的起手式、打法套路以及竞赛总结。但毕竟是人家的参赛经验,没有接触到真实环境终究还是纸上谈兵,因为经验的不足导致了前面几次都是被人家按在地上狠狠的摩擦。


最近在github上找到了一位前辈留存下来的一个开源项目,在这里给大家分享一下https://github.com/zhl2008/awd-platform。项目中有说明文档,但是在搭建的时候还是会有不少的坑,那么就由我带领着大家一起跳~~~过去。

比赛平台拓扑图:

线下赛AWD训练平台搭建手册

服务器全部以docker形式部署在同一台虚拟机上。

● Check_server:

服务检查服务器,用于判定选手维护的服务是否可用,如果不可用,则会扣除相应的分数。不开启任何端口。需要与flag服务器通信。

● Flag_server:

选手提交flag的服务器,并存储选手的分数。开启80端口。

● Web_server:

选手连接的服务器,选手需要对其进行维护,并尝试攻击其他队伍的机器。通常开启80端口,22端口,并将端口映射到主机。

首先呢,我们需要准备一台Ubuntu16.04版本的虚拟机了。当然如果你是土豪的话,可以准备一台搭载Ubuntu系统的云服务器来进行搭建这个平台,效果更佳哦。

第一步,要先给我们Ubuntu系统装上docker(也就是我们所说的容器)。这里我们选择的是docker-ce的最新版本。

1.卸载旧版本的docker(要是新安装的系统就可以跳过这步了)

# sudo apt-getremove docker docker-engine docker docker.io deocker-ce

2.更新apt包索引

# sudo apt-get update

线下赛AWD训练平台搭建手册

3.安装一下依赖包

 # sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

线下赛AWD训练平台搭建手册

注:当遇到E:dpkg 被中断的情况,输入sudo dpkg --configure -a来解决下问题。完成后继续安装依赖包。

线下赛AWD训练平台搭建手册

如果按照提示运行却并没能很好的解决问题。其实导致这个问题的主要原因是因为/var/lib/dpkg/updates文件下的文件有问题,其可能的原因是其他软件安装过程或是其他原因导致的,可以删掉后重建就可以了。

# sudo rm /var/lib/dpkg/updates/*
# sudo dpkg --configure -a
# sudo apt-get update
# sudo apt-get upgrade

[*]sudo apt-get update指令会重新建立这些资料,所以不必担心删除后会出问题;
[*]sudo apt-get upgrade会更新你的电脑里面已安装的软件的明细,根据软件的明细更新软件到最新版。

4.添加官方密钥

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

线下赛AWD训练平台搭建手册

5.添加下仓库

# sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

线下赛AWD训练平台搭建手册

6.再次更新下apt包索引

# sudo apt-get update

线下赛AWD训练平台搭建手册

7.开始安装docker

# sudo apt-get install docker-ce

线下赛AWD训练平台搭建手册

8.查看docker版本确保我们的docker安装成功。

线下赛AWD训练平台搭建手册

第二步,将GitHub上的项目克隆下来,搭建起训练平台。

1.克隆github上前辈留下来的开源项目。(有点大,需要花点时间)

# sudo git clone https://github.com/zhl2008/awd-platform.git

线下赛AWD训练平台搭建手册

2.进入克隆好的项目里

# sudo cd awd-platform/

3.下载所需的镜像

# sudo docker pull zhl2008/web_14.04

线下赛AWD训练平台搭建手册

4. 镜像完成后,根据队伍数量来copy队伍的比赛文件夹。

python batch.py web_server 2

线下赛AWD训练平台搭建手册

注:拉取镜像时出现错误的话修改下名字。

# docker tag zhl2008/web_14.04 web_14.04

线下赛AWD训练平台搭建手册

5.启动比赛

python start.py ./ 2

注:在启动比赛时,会有几个点导致启动失败。需要修改一些东西才能成功启动比赛。


权限问题:

线下赛AWD训练平台搭建手册

需要进入到root才能启动。

线下赛AWD训练平台搭建手册

其他报错,需要去查看可用ip,修改/etc/hosts强制docker.io相关的域名解析到其它可用IP。

线下赛AWD训练平台搭建手册

线下赛AWD训练平台搭建手册

6.启动裁判靶机(check脚本)

docker attach check_server

python check.py

线下赛AWD训练平台搭建手册

在项目中的裁判机(也就是check.py)存在一些问题,是没法启用的。这里就跟着一位大大来进行修改。根据爬取页面关键字判断网页是否被删除,当然也可以添加其他的页面,比如不允许删除admin.php,可以添加admin_check()函数,根据admin页面关键字判断是否被删除。

修改了check时间和flag刷新时间,原版是2分钟刷一次,太快了。所以改成了5分钟一次。修改方法只要将/awd-platform/check_server/gen_flag.py  的time_span 变量设置为5*60即可,也可以改成其他的,同理还有/awd-platform/flag_server/config.php 的 min_time_span变量设置为300、/awd-platform/flag.py 变量time_span设置为5*60。

#!/usr/bin/env python
# -*- coding:utf8 -*-
'''

'''
import hashlib
import base64

sleep_time = 300
debug = True
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36"}

import time
import httplib
import urllib2
import ssl

my_time = 'AAAA'
__doc__ = 'http(method,host,port,url,data,headers)'
flag_server = '172.17.0.1'
key = '744def038f39652db118a68ab34895dc'
hosts = open('host.lists','r').readlines()
user_id = [host.split(':')[0] for host in hosts]
hosts = [host.split(':')[1] for host in hosts]
port = 80

def http(method,host,port,url,data,headers):
con=httplib.HTTPConnection(host,port,timeout=2)
if method=='post' or method=='POST':
headers['Content-Length']=len(data)
headers['Content-Type']='application/x-www-form-urlencoded'
con.request("POST",url,data,headers=headers)
else:
headers['Content-Length'] = 0
con.request("GET",url,headers=headers)
res = con.getresponse()
if res.getheader('set-cookie'):
#headers['Cookie'] = res.getheader('set-cookie')
pass
if res.getheader('Location'):
print"Your 302 direct is:"+res.getheader('Location')
a = res.read()
con.close()
return a

def https(method,host,port,url,data,headers):
url = 'https://' + host +":"+ str(port) + url
req = urllib2.Request(url,data,headers)
response = urllib2.urlopen(req)
return response.read()

def get_score():
res = http('get',flag_server,8080,'/score.php?key=%s'%key,'',headers)
print res
user_scores = res.split('|')
print"******************************************************************"
res = ''

print res
print"******************************************************************"
return user_scores

def write_score(scores):
scores = '|'.join(scores)
res = http('get',flag_server,8080,'/score.php?key=%s&write=1&score=%s'%(key,scores),'',headers)
if res =="success":
return True
else:
print res
raise ValueError

class check():

def index_check(self):
res = http('get',host,port,'/index.php?file=%s'%str(my_time),'',headers)
if 'perspi' in res:
return True
if debug:
print"[fail!] index_fail"
return False

def server_check():
try:
a = check()
if not a.index_check():
return False
return True
except Exception,e:
print e
return False

game_round = 0
while True:

scores = get_score()
scores = []
print"--------------------------- round %d -------------------------------"%game_round
for host in hosts:
print"---------------------------------------------------------------"
host = host[:-1]
if server_check():
print"Host:"+host+"seems ok"
scores.append("0")
else:
print"Host:"+host+"seems down"
scores.append("-10")
game_round += 1
write_score(scores)
time.sleep(sleep_time)

好了,我们已经将线下赛AWD训练平台搭建成功了。小伙伴们可以愉快的去玩耍啦。

线下赛AWD训练平台搭建手册

玩累了关闭环境的命令。

# python stop_clean.py

线下赛AWD训练平台搭建手册

查看计分板信息:

原版中计分板有点low,直接访问ip:8080/score.txt。

线下赛AWD训练平台搭建手册

嗯~~~个人比较懒,就直接拿夜莫离大大写的计分板修改了一下拿来使用了。

将计分板文件拷贝至awd-platform下的flag_server文件夹下。要注意将文件score.txt与result.txt文件权限调至777,这样才能刷新出分值。还需将scorecard.php文件中的ip地址更改为自己的ip地址。

线下赛AWD训练平台搭建手册

线下赛AWD训练平台搭建手册

访问ip:8080/scorecard.php来查看各队得分情况。

线下赛AWD训练平台搭建手册

最后说下这个平台的规则以及注意事项。

1.   靶机端口规则:(假设服务器ip为192.168.1.1)
     Team1:192.168.1.1:8801
     Team2:192.168.1.1:8802
     Team3:192.168.1.1:8803
     ……
     以此类推


 2.各个靶机的ssh密码可以在项目的文件夹下的pass.txt文件中,开始比赛时告知各个选手ssh密码。

线下赛AWD训练平台搭建手册

SSH的端口规则为:(假设服务器ip为192.168.1.1)
Team1:192.168.1.1:2201
Team2:192.168.1.1:2202
Team3:192.168.1.1:2203
  ……
以此类推
3.提交flag方法:(假设服务器ip为192.168.1.1)
http://192.168.1.1:8080/flag_file.php?token=teamX&flag=xxxx
(teamX中的X为自己队伍号,flag为其他队伍的flag)
4.攻击情况:(假设服务器ip为192.168.1.1)
http://192.168.1.1:8080/result.txt


本次文章讲了如何将源码部署在Ubuntu16.04版本的虚拟机上和一些基础的使用,一些报错以及注意事项也写在了操作步骤下(代码牛皮的大佬们可以进行下优化和改进)。后面会详细讲下线下赛AWD的竞赛的常规攻击思路以及防守思路。当然也会讲下骚操作,论如何在竞赛中愉快的“搅屎”。

参考资料:

https://blog.csdn.net/qq_17204441/article/details/93681193

计分板:

https://pan.baidu.com/s/1dq5MONeQQFS3EGh2YXshhg                

提取码:d84z

文由国科漏斗社区

版权声明

本文仅代表作者观点,不代表黑白网立场。
如文章侵犯了您的权利,请通过邮箱联系我们删除。
详情查看:版权纠纷
E-Mail:server@heibai.org

喜欢0发布评论

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址