Kali中AWD靶机环境搭建

news/2024/11/8 0:45:15/

Kali中AWD靶机环境搭建

    • 1、kali安装docker
    • 2、克隆项目(400多M,下载会有点久)
    • 3、进入项目
    • 4、下载镜像
    • 5、改镜像名
    • 6、比赛环境搭建
      • 6.1 启动靶机
      • 6.2 连接裁判机,启动check脚本
      • 6.3 关闭环境命令
    • 7、 靶机访问方式
      • 7.1 web界面访问
      • 7.2 ssh访问
      • 7.3.提交flag方法
      • 7.4.记分牌:查看实时分数情况
      • 7.5.查看攻击情况
    • 8、 靶机问题修复汇总
      • 8.1 check.py问题
      • 8.2 flag刷新时间修改
      • 8.3 修改score.txt和result.txt权限为777
      • 8.4 计分板换一个好看的背景
      • 8.5 无限提交flag的bug
    • 9、搭建靶机参考资料

1、kali安装docker

详见:https://blog.csdn.net/aodechudawei/article/details/122450720?spm=1001.2014.3001.5506

2、克隆项目(400多M,下载会有点久)

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

3、进入项目

sudo cd awd-platform/

4、下载镜像

sudo docker pull zhl2008/web_14.04

5、改镜像名

sudo docker tag zhl2008/web_14.04 web_14.04

6、比赛环境搭建

以root权限进入/awd-platform目录下,以yunnan_simple镜像为例

6.1 启动靶机

python2 batch.py web_yunnan_simple 3
python2 start.py ./ 3

在这里插入图片描述
在这里插入图片描述

6.2 连接裁判机,启动check脚本

docker attach check_server
敲一下回车键
python2 check.py

6.3 关闭环境命令

python2 stop_clean.py

7、 靶机访问方式

在虚拟机中执行ip a获取虚拟机ip,这里是192.168.40.129:
在这里插入图片描述

7.1 web界面访问

Team1:<虚拟机ip>:8801
Team2:<虚拟机ip>:8802
Team3:<虚拟机ip>:8803
……

7.2 ssh访问

ssh用户密码可见文件awd-platform/pass.txt

Team1:<虚拟机ip>:2201
Team2:<虚拟机ip>:2202
Team3:<虚拟机ip>:2203
……

7.3.提交flag方法

http://<虚拟机ip>:8080/flag_file.php?token=teamX&flag=xxxx
(teamX中的X为自己队伍号,flag为其他队伍的flag)

在这里插入图片描述

7.4.记分牌:查看实时分数情况

默认配置下是:

http://<虚拟机ip>:8080/score.txt

在这里插入图片描述
参照8.4中配置后是:

http://<虚拟机ip>:8080

在这里插入图片描述

7.5.查看攻击情况

http://<虚拟机ip>:8080/result.txt

在这里插入图片描述

8、 靶机问题修复汇总

按照默认配置搭建的靶机是有问题的,需要执行以下操作来修复:

8.1 check.py问题

参照:https://blog.csdn.net/weixin_34211761/article/details/92983952
修改awd-platform/check_server/check.py,代码如下:

#!/usr/bin/env python
# -*- coding:utf8 -*-
''''''
import hashlib
import base64sleep_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 = 80def 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')passif res.getheader('Location'):print "Your 302 direct is: "+res.getheader('Location')a = res.read()con.close()return adef https(method,host,port,url,data,headers):url = 'https://' + host + ":" + str(port) + urlreq = 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 resuser_scores = res.split('|')print "******************************************************************"res = ''print resprint "******************************************************************" return user_scoresdef 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 Trueelse:   print resraise ValueErrorclass check():def index_check(self):res = http('get',host,port,'/index.php?file=%s'%str(my_time),'',headers)if 'perspi' in res:return Trueif debug:print "[fail!] index_fail"return Falsedef server_check():try:a = check()if not a.index_check():return Falsereturn Trueexcept Exception,e:print ereturn Falsegame_round = 0
while True:scores = get_score()scores = []print "--------------------------- round %d -------------------------------"%game_roundfor 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 += 1write_score(scores)time.sleep(sleep_time)

8.2 flag刷新时间修改

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

8.3 修改score.txt和result.txt权限为777

否则会因为权限问题无法写入文件,从而导致积分无变化
在这里插入图片描述
更新后效果:
在这里插入图片描述

8.4 计分板换一个好看的背景

资源下载地址如下:
https://pan.baidu.com/s/18KlIeluaTtm-kT3KuXHseQ 密码:cvdn
将计分板文件拷贝至awd-platform下的flag_server文件夹下,执行以下命令解压:

unzip awd计分板.zip

目录结构如下:
在这里插入图片描述

还需将index.php文件中的resul变量中的IP地址更改为本机IP
在这里插入图片描述
修改后结果如下:
在这里插入图片描述
界面效果如下:
在这里插入图片描述

8.5 无限提交flag的bug

修改方法参见:https://www.cnblogs.com/Triangle-security/p/11332223.html
但感觉不太优雅,最好可以启动靶机的时候同时启动对应脚本,不用人来控制脚本启动时间
另外脚本只是针对某一时刻的,还是有些勉强
感觉逻辑也不太对,应该是一支队伍同一个flag只能提交一次,直到出现新的flag才可以继续提交,这样其实也是变相控制五分钟提交一次,但是还不知道怎么去改代码

9、搭建靶机参考资料

kali安装docker(亲测有效)
AWD平台搭建
搭建CTF-AWD训练平台
线下AWD平台搭建以及一些相关问题解决
一个awd训练平台
云服务器AWD平台搭建


http://www.ppmy.cn/news/1010075.html

相关文章

idea:Web server failed to start. Port 8081 was already in use.

文章目录 Web server failed to start. Port 8081 was already in use.问题描述解决方案1解决方案2关闭占用端口 Web server failed to start. Port 8081 was already in use. 问题描述 8081端口被占用 解决方案1 查看配置信息 重启idea 解决方案2 关闭占用端口 1.使用c…

java并行流的介绍

什么是并行流&#xff1f; 在介绍并行流之前&#xff0c;我们首先需要了解Stream API是什么。Stream API允许我们以声明性的方式对数据进行操作&#xff0c;例如过滤、映射、排序等&#xff0c;而无需编写繁琐的迭代和循环代码。这不仅提高了代码的可读性&#xff0c;还可以帮…

codeup(云效)流水线部署主机离线的问题

我是通过 云助手Agent 来进行部署的&#xff0c;也就是codeup账号和ecs不是一个账号。 助手的安装等问题参考&#xff1a; 在ECS及自有主机上部署云效失败的常见问题_云效-阿里云帮助中心 如何启动、停止或卸载云助手客户端_云服务器 ECS-阿里云帮助中心 如何安装云助手客…

【C# 基础精讲】C# 数据类型概述

在C#中&#xff0c;数据类型可以分为以下三大类&#xff1a;值类型、引用类型和指针类型。每种类型都具有不同的特点和适用场景&#xff0c;了解这些类型对于编写高效和稳健的C#程序至关重要。下面将依次介绍这三大类数据类型&#xff0c;并列出C#中常见的每种类型。 值类型 值…

sptring AOP两种动态代理

本文开始 1.spring AOP 实现动态代理的方式&#xff1a;JDK Proxy &#xff0c; CGLIB; JDK Proxy实现代理**&#xff1a;通过 反射 实现接收代理的类 并且代理类必须实现接口&#xff1b;- 接口 CGLIB实现代理**&#xff1a;通过 继承 方式实现动态代理&#xff1b;&#xf…

【编译原理】五、简单四则运算的代码实现

1. 前言 前面说了那么多BNF的相关理论知识&#xff0c;实际上就是为了一个目的&#xff1a; 描述语法规则 描述语法规则是一切的开始。最终&#xff0c;还是要用代码来实现。 如果对于BNF仍然是一头雾水&#xff0c;也没关系&#xff0c;因为我们的最终目的是编写解析器&…

Kubernetes关于cpu资源分配的设计

kubernetes资源 在K8s中定义Pod中运行容器有两个维度的限制: 资源需求(Requests):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。如 Pod运行至少需要2G内存,1核CPU。(软限制)资源限额(Limits):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这…

用datagrip远程连接mysql超时怎么解决【连接mysql会遇到的坑】

目录 一.开放端口 【1】在linux打开防火墙或开放3306端口&#xff08;其实一般情况下服务器里的防火墙并没有开启&#xff09;​编辑 【2】在阿里云的控制台的云安全组里开放端口 二.修改datagrip连接时高级的useSSL属性 先填好主机&#xff08;就是IP地址&#xff09;和端…