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

CTF本地靶场搭建——基于阿里云ACR实现动态flag题型的创建

接上文,这篇主要是结合阿里云ACR来实现动态flag题型的创建。

这里顺便也介绍一下阿里云的ACR服务。

image.png

阿里云容器镜像服务(简称 ACR)是面向容器镜像、Helm Chart 等符合 OCI 标准的云原生制品安全托管及高效分发平台。 ACR 支持全球同步加速、大规模/大镜像分发加速、多代码源构建加速等全链路提效,与容器服务 ACK 无缝集成,帮助企业降低交付复杂度,打造云原生应用一站式解决方案。

说白了就是对标dockerhub的,但是dockerhub很难访问,需要科学上网,所以这里我们就使用阿里云提供的ACR镜像服务来完成动态flag题型的创建了。

回到虚拟机内,进入到【GZCTF】下面。

image.png

新建一个文件夹,命名为【WEB】。

image.png

同时,WEB下再新建一个文件夹,命名为【src】。

image.png

在src中,新建flag.sh和index.php。

image.png

web题,首先是需要按照常规逻辑写一个网页,这里就写一个带flag的简单网页,把flag放在源代码里,并注释掉。代码如下,保存为index.php。

在当前路径下打开命令行界面,执行如下命令:

vi index.php

并复制如下内容到php文件中:

<!DOCTYPE html>
<html>
<head><title>签到</title>
</head>
<!--flag{testflag}-->
<body>
<?php
echo "welcome !!!";
?>
</body>
</html>

这里值得注意的是,ubuntu的输入按住方向键时会变成大写字母,需要提前进行修改,具体修改方式如下:

首先进入该目录。

cd /etc/vim

如果你有root权限,直接进入文件编辑即可,如果没有root权限,在下面的代码前面加一个sudo就可以编辑了。

vi vimrc.tiny

回车后,先把光标调到set和compatible中间(为了避免插入时使用方向键),让光标覆盖"c"的位置,像这样。

8406a3dae5a04a5e82442f9256d4786d.png

然后按下键盘"i"键进入插入模式,之后输入"no",完成后是这个样子的:

6e21797591bd4010915bedbcf20422f9.png

set nocompatible

完成后按esc键,然后输入:wq退出编辑并保存。

:wq

这样按住上下左右键就是正常的了。


创建完index.php,接下来创建flag.sh。

vi flag.sh

同样复制如下内容到sh文件中:

#!/bin/sh	sed -i "s/flag{testflag}/$GZCTF_FLAG/" /home/XXX/GZCTF/WEB/src/index.php #使用平台的动态flag替换index.php中的flag,这里我使用的平台为GZCTF,因此动态flag环境变量为$GZCTF_FLAG,其他平台一般
为$FLAGexport GZCTF_FLAG=""	#命令用于设置或声明环境变量,使得该变量能在子进程中可见

此处注意要按照自己创建的实际路径来填写。

当创建完src文件下的内容后,回到上级目录,编写Dockerfile文件。

image.png

vi Dockerfile
FROM ctftraining/base_image_nginx_mysql_php_56  #web题docker基础镜像,这里使用ctftraing打包好
的,包含了基础的nginx,mysql,php环境,并且会自动运行flag.sh脚本,本题使用php环境。COPY src /home/XXX/GZCTF/WEB/src/	#将你编写的网页源码复制到docker容器中,这里为php网页,因此只需要
复制源码到对应路径下就可以了,其他类型网页按照实际部署情况COPY到docker中相应目录下就可以了RUN mv /home/XXX/GZCTF/WEB/src/flag.sh / \	#把你源码中的flag.sh复制到根目录以便自动执行&& chmod +x /flag.sh		#添加运行权限

编译时记得删除注释内容。

到这里文件就准备完毕了,下面我们进入到阿里云的ACR界面。

点击免费试用。

image.png

创建个人实例。

image.png

设置完密码创建完成后,进入访问凭证,复制登陆实例的语句。

image.png

登陆成功。

image.png

这里需要先安装好docker和docker-compose,具体安装过程可以见我之前的文章。

接下来使用build命令,构建题目镜像,需要回到ACR中创建一个命名空间,建议设置为私有,名字是全局唯一性!

image.png

接下来执行构建命令,name为阿里云命名空间名字,webtest为镜像名(自定义),"."为版本号,代表latest,也可以自定义。

sudo docker build -t name/webtest .

image.png

执行命令查看镜像构建情况:

sudo docker images

image.png

给它打上tag,表明版本:

sudo docker tag IMAGEID 镜像在阿里云里的地址:1.0.0

image.png

再push到我的阿里云镜像仓库,name为命名空间名,webtest为镜像名

sudo docker push 镜像在阿里云里的地址:1.0.0

image.png

这时可以回到阿里云的ACR界面下,进入镜像仓库查看。

image.png

可以看到已经成功了。

image.png

接下来部署题目,类型记得选择动态容器。

image.png

在这个位置填入阿里云地址下的路径地址:

image.png

点击后面的创建测试容器,这里会创建一个入口,点击查看网页。

image.png

可以看到实例创建成功!

image.png

查看源码可以看到就是我们之前编辑的index.php文件。

image.png

我们更换账号去尝试答题。

image.png

点击创建实例。

image.png

可以看到生成的是新的flag。

image.png

再更换个账号,可以看到flag有所变化。

image.png

至此,基于阿里云ACR实现动态flag题型的创建完成。

http://www.lryc.cn/news/360365.html

相关文章:

  • 【面试经典150题】删除有序数组中的重复项
  • 太阳能辐射整车综合性能环境试验舱
  • JS脚本打包成一个 Chrome 扩展(CRX 插件)
  • js事件对象
  • 希捷硬盘怎么恢复数据? 5 个免费希捷数据恢复软件
  • Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:京东无人配送机器人
  • STM32作业实现(七)OLED显示数据
  • elementui el-tooltip文字提示组件弹出层内容格式换行处理
  • Python3 笔记:每天一个函数——str.join()
  • 深入解析Python中的None与null:它们真的不同吗?
  • 论文作图之高压缩比导出PDF
  • SpringBoot的启动流程
  • Kubernetes资源调度策略及实现机制
  • finetuning大模型准备(基于Mac环境)
  • js检验一个字符串是否是正确时间格式的工具方法
  • 大型制造业集团IT信息化总体规划方案(65页PPT)
  • 【LIN】STM32新能源汽车LIN通信实现过程
  • 【LeetCode:575. 分糖果+ 哈希表】
  • 全文检索-ElasticSearch
  • C编程惯用法:深入剖析与实战指南
  • MySQL数据表的设计
  • Flutter开发效率提升1000%,Flutter Quick教程之对写好的Widget进行嵌套
  • 2020编程语言排序:探索编程界的热门与趋势
  • 提高工作效率的招数
  • css特殊效果和页面布局
  • JavaScript中对象的增删改查
  • 技术周总结 2024.05.27~06.02(java bean冲突 软件工程)
  • 「前端+鸿蒙」核心技术HTML5+CSS3(八)
  • 15届蓝桥杯决赛,java b组,蒟蒻赛时所写的题思路
  • 2024蓝桥杯国赛C++研究生组游记+个人题解