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

CTF: 在本地虚拟机内部署CTF题目docker

step 1 安装基本依赖

sudo apt-get update
sudo apt-get install -y \ca-certificates \curl \gnupg \lsb-release

step 2 安装docker

sudo apt-get remove docker docker.io containerd runc
sudo apt-get update
sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg \lsb-release \software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin

step 3 换源

sudo nano /etc/docker/daemon.json
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://docker.unsee.tech" ] } EOF
sudo systemctl daemon-reload && sudo systemctl restart docker

step 4 测试

sudo docker run hello-world
a5rz@a5rz-virtual-machine ~/桌面% sudo docker run hello-world                                  
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete 
Digest: sha256:305243c734571da2d100c8c8b3c3167a098cab6049c9a5b066b6021a60fcb966
Status: Downloaded newer image for hello-world:latestHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

step 5 拉取/构建题目镜像

方法一:从 Docker Hub 或其他镜像仓库拉取

如果您要试验的 CTF 题目已经有现成的 Docker 镜像,可以直接拉取:

sudo docker pull your_image_name

将 your_image_name 替换为实际的镜像名称,例如 ctfchallenge/web_challenge

方法二:使用 Dockerfile 构建镜像

如果您有题目的源码和 Dockerfile,需要自行构建镜像:

cd /path/to/your/ctf_challenge
sudo docker build -t your_image_name .
  • cd 命令切换到包含 Dockerfile 的目录。
  • -t your_image_name 为构建的镜像指定一个名称。

step 6 运行

使用以下命令运行容器:

sudo docker run -d -p HostPort:ContainerPort --name ContainerName your_image_name
  • -d:后台运行容器(守护态)。
  • -p HostPort:ContainerPort:将宿主机端口映射到容器端口。
  • --name ContainerName:为容器指定一个名称,方便管理。

示例:

如果您的题目在容器的 80 端口提供服务,您希望通过宿主机的 1337 端口访问:

sudo docker run -d -p 1337:80 --name ctf_challenge your_image_name

查看正在运行的容器:

sudo docker ps

查看所有容器(包括已停止的):

sudo docker ps -a

停止容器:

sudo docker stop ContainerName

启动已停止的容器:

sudo docker start ContainerName

删除容器:

sudo docker rm ContainerName

查看镜像列表:

sudo docker images

删除镜像:

sudo docker rmi your_image_name

step 7 进入容器获得shell

docker exec 命令允许在正在运行的容器中执行命令或启动交互式 Shell,从而直接对容器内部进行操作。

获取容器 ID 或名称

首先,您需要知道容器的名称或 ID,可以使用以下命令查看正在运行的容器:

sudo docker ps

您将看到类似以下的输出:

CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                  NAMES
abc123def456   your_image_name   "/bin/sh -c 'service…"   15 minutes ago   Up 15 minutes   0.0.0.0:1337->80/tcp   ctf_challenge

进入容器的交互式 Shell

使用 docker exec 命令进入容器的交互式终端:

sudo docker exec -it ContainerName /bin/bash

ContainerName 替换为您的容器名称或 ID,例如:

sudo docker exec -it ctf_challenge /bin/bash

在容器内操作文件

现在,您已经进入了容器内部,可以像操作普通 Linux 系统一样操作文件系统。例如:

cd /path/to/your/directory
ls -la

当您完成操作后,输入 exit 退出容器终端:

exit

使用 docker cp 复制文件

docker cp 命令允许在宿主机和容器之间复制文件或目录。

2.1 从宿主机复制文件到容器

语法:

sudo docker cp /宿主机/的文件/或目录 容器名称:/容器内的目标路径

示例:

sudo docker cp /home/user/flag.txt ctf_challenge:/app/flag.txt

将宿主机的 /home/user/flag.txt 复制到容器内的 /app/flag.txt

2.2 从容器复制文件到宿主机

语法:

sudo docker cp 容器名称:/容器内的文件/或目录 /宿主机/的目标路径

示例:

sudo docker cp ctf_challenge:/app/logs /home/user/container_logs

将容器内的 /app/logs 目录复制到宿主机的 /home/user/container_logs

相关文章:

CTF: 在本地虚拟机内部署CTF题目docker

step 1 安装基本依赖 sudo apt-get update sudo apt-get install -y \ca-certificates \curl \gnupg \lsb-releasestep 2 安装docker sudo apt-get remove docker docker.io containerd runc sudo apt-get update sudo apt-get install \apt-transport-https \ca-certificate…...

视频推拉流EasyDSS无人机直播技术巡查焚烧、烟火情况

焚烧作为一种常见的废弃物处理方式&#xff0c;往往会对环境造成严重污染。因此&#xff0c;减少焚烧、推广绿色能源和循环经济成为重要措施。通过加强森林防灭火队伍能力建设与长效机制建立&#xff0c;各地努力减少因焚烧引发的森林火灾&#xff0c;保护生态环境。 巡察烟火…...

SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 正常情况下我们在开发系统的时候都是使用一个数据源&#xff0c;但是由于有些项目同步数据的时候不想造成数据库io消耗压力过大&#xff0c;便会一个项目对应多个数据源…...

【嵌入式linux基础】关于linux文件多次的open

在 Linux 中&#xff0c;设备文件可以被多次打开&#xff08;open()&#xff09;&#xff0c;但这取决于具体的设备类型和其驱动程序的实现。以下是关于设备文件多次打开的一些关键点&#xff1a; 普通字符设备&#xff1a; 对于大多数字符设备&#xff0c;如串口、TTY 设备等&…...

TPAMI 2023:When Object Detection Meets Knowledge Distillation: A Survey

摘要 目标检测&#xff08;Object Detection&#xff0c;OD&#xff09;是计算机视觉中的一项关键任务&#xff0c;多年来涌现出了众多算法和模型。尽管当前 OD 模型的性能有所提升&#xff0c;但它们也变得更加复杂&#xff0c;由于参数规模庞大&#xff0c;在工业应用中并不…...

2024前端面试题(持续更新)

目录 一、js的数据类型有哪些&#xff1f; 二、什么是symbol&#xff1f; 三、什么是浅拷贝什么是深拷贝&#xff1f; 四、vue2的生命周期&#xff1f; 五、vue2中父子组件的生命周期调用顺序 六、vue3的生命周期 七、vue3对比vue2的变化 八、组合式API中的ref和reactiv…...

apache转nginx访问变成下载解决方法

在配置文件 nginx.conf中存在 第一行&#xff1a; include mine.types 对应了文件的mime类型。 第二行&#xff1a; 默认的是octet-stream, 意思是如果一个文件的mime类型不存在就会使用默认的类型。 通常是这个导致了文件的下载。 第一种方案&#xff1a;&#xff08;推荐&a…...

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(三)

目录 ARC规则 概要 所有权修饰符 __strong修饰符 __weak修饰符 __unsafe_unretained修饰符 __autoreleasing修饰符 ARC规则 概要 “引用计数式内存管理”的本质部分在ARC中并没有改变&#xff0c;ARC只是自动地帮助我们处理“引用计数”的相关部分。 在编译单位上可以…...

Oracle数据库使用dblink是时出现 ORA-12170:TNS:连接超时

原因&#xff1a; 我遇到这种情况是因为dblink那端的数据库被我重新导了一下dmp&#xff0c;然后本地这边查询就报错了。 解决办法&#xff1a; 把已有的dblink删掉或者说是换个名字&#xff0c;然后按照原来的再新建一个同名的dblink就解决了。...

OpenHarmony系统中实现Android虚拟化、模拟器相关的功能,包括桌面显示,详细解决方案

在 OpenHarmony 系统中实现 Android 虚拟化 和 模拟器功能&#xff08;面显包括桌示&#xff09;是一个复杂的任务&#xff0c;涉及多个关键技术栈的集成和深度定制。我们可以通过多种方式来实现 Android 系统的虚拟化和模拟器功能&#xff0c;类似于在普通操作系统中运行虚拟机…...

决策曲线分析(DCA)中平均净阈值用于评价模型算法(R自定义函数)

决策曲线分析&#xff08;DCA&#xff09;中平均净阈值用于评价模型算法 DCA分析虽然不强调用来评价模型算法或者变量组合的优劣&#xff0c;但是实际应用过程中感觉DCA曲线的走势和模型的效能具有良好的一致性&#xff0c;其实这种一致性也可以找到内在的联系&#xff0c;比如…...

《经验分享 · 软考系统分析师》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

记录一下 js encodeURI和encodeURIComponent URL转码问题

escape&#xff1a;由于它已经被废弃&#xff0c;不建议在任何新的代码中使用。encodeURI&#xff1a;当你需要对整个URI进行编码时使用&#xff0c;例如在将整个URL作为参数传递时。encodeURIComponent&#xff1a;当你需要编码URI中的某一部分&#xff0c;尤其是查询字符串参…...

【C语言】二维前缀和/求子矩阵之和

相信你是最棒哒&#xff01;&#xff01;&#xff01; 目录 一、题目描述 正确代码 二、题目描述 题目代码 总结 一、题目描述 输入一个 &#x1d45b; 行 &#x1d45a; 列的整数矩阵&#xff0c;再输入 &#x1d45e;个询问&#xff0c;每个询问包含四个整数 &#x1d465;1…...

SRS 服务器入门:实时流媒体传输的理想选择

在当今视频流媒体需求爆炸式增长的时代&#xff0c;如何选择一款高效、稳定且功能强大的流媒体服务器成为了许多开发者和企业关注的焦点。而 SRS&#xff08;Simple Realtime Server&#xff09;作为一款开源的流媒体服务器&#xff0c;以其卓越的性能和灵活的功能&#xff0c;…...

【ETCD】【源码阅读】configurePeerListeners() 函数解析

configurePeerListeners 是 ETCD 的一个核心函数&#xff0c;用于为集群中节点之间的通信配置监听器&#xff08;Peer Listener&#xff09;。这些监听器主要负责 Raft 协议的消息传递、日志复制等功能。函数返回一个包含所有监听器的列表。 函数签名 func configurePeerList…...

1_ssrf总结

content 什么是ssrf?简介原理 危害利用内网访问端口扫描fsockopenurlbypass127.0.0.0被禁止绕过302跳转DNS重绑定绕过 file协议dict协议gopher协议主从复制打redis打mysql打fastcgi协议打未授权redis Defence 什么是ssrf? 简介 SSRF&#xff08;Server-Side Request Forger…...

深入解析 Redis

1. 为什么 Redis 性能至关重要&#xff1f; 在现代分布式应用中&#xff0c;Redis 被广泛作为缓存系统、消息队列、实时数据存储和会话管理等多种场景的解决方案。作为一个高性能的内存数据库&#xff0c;Redis 的设计理念是提供低延迟和高吞吐量的操作。然而&#xff0c;当 R…...

Visual Studio 2022发布UWP应用证书绑定失败

最近发布UWP应用时&#xff0c;卡在了关联产品这步&#xff0c;一直提示网络链接问题&#xff0c;获取不到产品信息。创建新项目也是这样&#xff0c;猜测低版本的VS不支持发布UWP应用了&#xff0c;便升级到了VS2022。VS2022创建新UWP工程确实可以关联发布应用&#xff0c;并成…...

K8S对接ceph的RBD块存储

1 PG数量限制问题 1.1 原因分析 1.还是老样子&#xff0c;先创建存储池&#xff0c;在初始化为rbd。 [rootceph141~]# ceph osd pool create wenzhiyong-k8s 128 128 Error ERANGE: pg_num 128 size 3 for this pool would result in 295 cumulative PGs per OSD (2067 tot…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...