Ubuntu部署Docker搭建靶场

embedded/2025/4/1 7:52:10/

前言

我们需要部署Docker来搭建靶场题目,他可以提供一个隔离的环境,方便在不同的机器上部署,接下来,我会记录我的操作过程,简单的部署一道题目


Docker安装

不推荐在物理机上部署,可能会遇到一些问题,这里我用的是我手里现成的Ubuntu虚拟机

首先,我们先提权到管理员

sudo su

更新包管理器

apt update && apt upgrade -y

然后运行以下命令安装Docker

apt install -y docker.io

设置成开机自启

systemctl start docker
systemctl enable docker

我们验证一下是否安装
 

docker --version

 我们可以运行一个测试容器,来看看是否正常输出

docker run hello-world

看起来没啥毛病,接下来,我们输入命令让普通用户也能正常使用

这里添加后还是没效果的话,可以用 groups 用户名 命令来查看用户的组,如果没有docker,就用 usermod -aG docker 用户名 让指定用户添加组

usermod -aG docker $USER
newgrp docker  # 使更改立即生效

然后我们换成普通用户,输入命令看看能否执行成功

不错,接下来,我们部署一个简单的靶场吧


部署靶场

接下来,我准备部署一个简单的CTF靶场,我用的flask做的一个简单的题,题目代码:

python">from flask import Flask, request
import hashlib
app = Flask(__name__)
key = "ImGuoXiaoYao" #哈希盐值def summon_flag(username):hash = hashlib.md5((username + key).encode()).hexdigest()return f"LJCTF{{{hash[:20]}}}" #取前20位哈希值进行拼接@app.route("/")
def home():return f"<h1 align=""center"">欢迎欢迎,这是道题是简单的源代码漏洞哦<h1>\n<h3 align=""right"">by:GuoXiaoYao</h3>"@app.route("/flag")
def flag(): #获取用户IP地址,然后加盐哈希后,生成独一无二的的flaguser_ip = request.remote_addrflag = summon_flag(user_ip)return f"<h1 align='center'>猜猜flag在哪<h1><!--{flag}--->"if __name__ == "__main__":app.run(host="0.0.0.0", port=5000) #暴露在5000端口

先创建一个文件夹存放文件,接下来,我们开始部署

首先,我们需要进入创建的Docker文件夹,在终端输入代码(或者进入文件夹右键在终端打开)

cd Docker

我们用命令创建个Dockerfile用来定义如何构建Docker镜像

touch Dockerfile

接下来,我们编辑文件,内容如下

# 使用 Python 3.9 作为基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 复制项目文件到容器
COPY . /app# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt# 暴露 Flask 运行的端口
EXPOSE 5000# 运行 Flask 应用
CMD ["flask", "run", "--host=0.0.0.0"]

 因为我使用了python中的flask库和requests库,所以需要创建个requirements.txt文件来填写用到的库

touch requirements.txt

在里面填写我们用到的库

flask

(可选)接下来,我们需要创建个.dockerignore文件,来忽略一些文件,提高构建速度

touch .dockerignore

修改文件,内容如下:

__pycache__/
*.pyc
*.pyo
*.log
env/
venv/
.git/
.dockerignore

接下来,我们尝试构建镜像,然后运行试试吧

名字要小写格式,路径和端口号根据自己的需要填写

docker build -t 名字 -f Dockerfile .
docker run -p 映射的端口 名字

开始构建

完成了,我们查看一下镜像,看看有没有构建出来

docker images

 成功了,我们运行试试吧

docker run -p 映射端口号:容器内映射端口号 名字

 我们访问试试

在虚拟机内部访问他提供的地址,在物理机访问虚拟机ip地址+端口

 

成功了,这道题是一道很简单的源代码泄露题,访问/flag即可

按F12查看源代码

成功获取flag


总结

在部署过程中,可能会遇到各种问题,大家根据自己的实际情况进行部署吧


http://www.ppmy.cn/embedded/176837.html

相关文章

音视频学习(三十):fmp4

FMP4&#xff08;Fragmented MP4&#xff09;是 MP4&#xff08;MPEG-4 Part 14&#xff09;的扩展版本&#xff0c;它支持流式传输&#xff0c;并被广泛应用于DASH&#xff08;Dynamic Adaptive Streaming over HTTP&#xff09;和HLS&#xff08;HTTP Live Streaming&#xf…

k8s部署argocd

前言 ArgoCD是一个基于Kubernetes的GitOps持续交付工具&#xff0c;应用的部署和更新都可以在Git仓库上同步实现&#xff0c;并自带一个可视化界面。本文介绍如何使用GitHelmArgocd方式来实现在k8s中部署和更新应用服务&#xff1b; 安装Argocd 准备一个k8s集群&#xff0c;然…

DeepSeek 的组网方案介绍

DeepSeek 的组网方案会因不同的应用场景和硬件配置而有所不同&#xff0c;以下是一些常见的 DeepSeek 组网方案介绍&#xff1a; 分离网络架构&#xff1a;分为 Prefill 网络和 Decode 网络&#xff0c;分别负责本集群内流量&#xff0c;两个集群之间的流量通过互联网络实现。其…

PostgreSQL_数据回退,数据库导出、导入

目录 前置&#xff1a; 1 数据回退 1.1 代码 1.2 pgAdmin4 中查看 1&#xff09;t_daily 2) t_stock_daily 2 数据库导出、导入 前置&#xff1a; 本博文是一个系列。在本人“数据库专栏”-》“PostgreSQL_”开头的博文。 1 数据回退 上一节“PostgreSQL_数据下载并…

AI搜索的终极预测:从技术颠覆到生态重构

一、技术革命&#xff1a;深度思考与多模态交互重塑搜索内核 AI搜索的底层逻辑正在经历从“信息索引”到“认知引擎”的质变。深度思考能力的普及标志着搜索技术进入新纪元。以OpenAI的o1模型为例&#xff0c;其通过内部思维链模拟人类反思过程&#xff0c;能够对复杂问题进行…

CUDA 学习(3)——CUDA 初步实践

1 定位 thread CUDA 中提供了 blockIdx, threadIdx, blockDim, GridDim来定位发起 thread&#xff0c;下面发起 1 个 grid&#xff0c;里面有 2 个 block&#xff0c;每个 block 里有 5 个 threads。 程序让每个 thread 输出自己的 id 号: #include <stdio.h>__global…

USB Burning Tool/SP Flash Tool/ADB电视盒子刷机工具大全

一.线刷工具 1. USB Burning Tool&#xff08;线刷宝&#xff09; 适用范围&#xff1a;主要用于全志系列芯片的电视盒子刷机&#xff0c;如全志H2、H3等芯片的盒子。 使用方法&#xff1a;首先下载对应版本的USB Burning Tool并安装到电脑上。 准备好电视盒子对应的刷机固…

【后端】【Django】Django DRF API 单元测试完整方案(基于 `TestCase`)

Django DRF API 单元测试完整方案&#xff08;基于 TestCase&#xff09; 一、方案概述 使用 django.test.TestCase 和 rest_framework.test.APIClient 进行 API 单元测试&#xff0c;确保 API 正确性、权限控制、数据返回格式、业务逻辑 等。 二、基本步骤 使用 setUp() 初始…