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,其他平台一般
为$FLAG

export 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题型的创建完成。

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值