当前位置: 首页 > news >正文

Ubuntu部署Docker搭建靶场

前言

我们需要部署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做的一个简单的题,题目代码:

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地址,然后加盐哈希后,生成独一无二的的flag
    user_ip = request.remote_addr
    flag = 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


总结

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

相关文章:

  • 基础-语音是怎么进到LLM里面的
  • 算法 | 麻雀搜索算法原理,公式,改进算法综述,应用场景及matlab完整代码
  • 服务注册/服务发现-Eureka
  • ElementUI时间选择、日期选择
  • STM32学习笔记之常用外设接口(原理篇)
  • DeepSeek底层揭秘——deepEP
  • Qt中如何在同一个类中共享使用一个Qtimer
  • Apache Hive:基于Hadoop的分布式数据仓库
  • 拥抱人工智能大模型时代:大模型会改变我们的生活吗?
  • linux之qt打包 linuxdeployqt
  • android 去掉状态栏的方法汇总
  • JAVA小项目:拼图游戏(简单易懂可上手)
  • fastapi 实践(三)Swagger Docs
  • 前端知识-CSS(二)
  • LeetCode hot 100 每日一题(14)——54.螺旋矩阵
  • 部署高可用PostgreSQL14集群
  • C# 中实现一个线程持续读取,另一个线程负责写入,且写入时读取线程暂停
  • 闲聊IT - 面向服务架构(SOA)的发展历史
  • Powershell 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
  • 【简单学习】Prompt Engineering 提示词工程
  • 美媒:受关税政策影响,美国电商平台近千种商品平均涨价29%
  • 上海质子重离子医院已收治8000例患者,基本覆盖国内常见恶性肿瘤
  • 钟声:美以芬太尼为借口滥施关税,纯属“内病外治”
  • 持续更新丨伊朗内政部长:港口爆炸已致8人死亡750人受伤
  • 涉李小龙形象商标被判定无效,真功夫:暂无更换计划
  • 四川甘孜州白玉县发生4.9级地震,震源深度10千米