如何在GZCTF部署简单的Web和PWN动态flag?

admin 2024年9月2日12:37:59评论90 views字数 4127阅读13分45秒阅读模式
~ 今日之事,尽心尽力 ~

前言

作者想要打造一个属于我们00后自己的CTF平台,欢迎各位有志人士们来投稿题目,后台菜单栏加群,服务器已经备好,上行50M,下行100M,物理机,配置不够再加,里面的题目主打一个有趣,社工,烧脑,不当人,哈哈哈

地址:http://ctf.54cto.com

非常感谢 武汉网盾科技公司 的服务器支持

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901215839189

正式开始

继上一篇:从0-1搭建开源GZCTF比赛平台教程,Docker部署,添加题目,小白都能看懂!

不知道为什么今天,我的dockerHub push到自己仓库的时候,连接超时,只能本地演示了,不上传到自己的dockerhub,如果你们有自己的加速源,当然也可以之际push到自己的dockerHub仓库。

docker的使用教程可以参考我的这篇文章:搭建高效攻防靶场vulfocus与Docker仓库管理实战

Web篇章

web题,首先是需要按照常规逻辑写一个网页,这里就写一个带flag的简单网页,把flag放在源代码里,并注释掉。创建一个html文件,代码如下

<!DOCTYPE html>
<html>
<head>
  <title>签到</title>
</head>
<!--flag{testflag}-->
<body>
<?php
echo "Do u want 2 sign??<br>";
?>

</body>
</html>
如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901170141470

我所使用的平台无需暴露端口,如有需要可以使用EXPOSE 80暴露80端口。接下来实现动态flag,还记得上面提到的flag.sh吗,先来看一下它的代码,同样相关解释写在注释里,正式使用记得删掉注释。

#!/bin/sh #必需的东西没什么好讲的
sed -i "s/flag{testflag}/$GZCTF_FLAG/" /var/www/html/index.php #使用平台的动态flag替换
# index.php中的flag,这里我使用的平台为GZCTF,因此动态flag环境变量为$GZCTF_FLAG,其他平台一般为$FLAG
export GZCTF_FLAG="" #这一句暂时不知道什么作用,但是要写着

flag.sh文件完整内容

#!/bin/sh
sed -i "s/flag{testflag}/$GZCTF_FLAG/" /var/www/html/index.php 
export GZCTF_FLAG=""

接下来编写Dockerfile,各语句解释就写在后面的注释里吧,正式编写请删掉注释

FROM ctftraining/base_image_nginx_mysql_php_56 #web题docker基础镜像,这里使用ctftraing打包好
的,包含了基础的nginx,mysql,php环境,并且会自动运行flag.sh脚本(后面会提到),本题使用php环境。

COPY src /var/www/html #  将你编写的网页源码复制到docker容器中,这里为php网页,因此只需要
复制源码到/var/www/html就可以了,其他类型网页按照实际部署情况COPY到docker中相应目录下就可以了
RUN mv /var/www/html/flag.sh /  #把你源码中的flag.sh复制到根目录以便自动执行
    && chmod +x /flag.sh  #添加运行权限

Dockerfile完整内容

FROM ctftraining/base_image_nginx_mysql_php_56 

COPY src /var/www/html
RUN mv /var/www/html/flag.sh /
&& chmod +x /flag.sh

目录结构

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901174946325

确保你已经docker login,拥有自己的docker账号

使用build命令,构建本地的题目镜像,xiaoyuss为你的docker镜像名,可以参考我以前的文章,webtest为镜像名(自定义),"."为版本号,代表latest,也可以自定义,不过拉取时记得加上版本号

docker build -t name/webtest .
如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901175545428

接下来部署题目,类型记得选择动态容器,不同平台可能有所不同,这里以GZCTF为例。

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901180107010

启动赛题

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901180514607

flag随机生成成功

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901180646201

PWN篇

首先下载一个库,pwn题基本逻辑一般为利用栈溢出漏洞,打通后得到shell权限,因此把flag文件放在容器的根目录或其他目录下即可,为了安全,这里在ctf_xinetd基础上做出一些修改来进行pwn题的部署

git clone https://github.com/Eadom/ctf_xinetd.git
cd ctf_xinetd
如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901215141316

修改Dockerfile如下内容

FROM ubuntu:16.04

RUN sed -i "s/http://archive.ubuntu.com/http://mirrors.tuna.tsinghua.edu.cn/g" /etc/apt/sources.list && 
    apt-get update && apt-get -y dist-upgrade && 
    apt-get install -y lib32z1 xinetd

RUN useradd -m ctf

WORKDIR /home/ctf

RUN cp -R /lib* /home/ctf && 
    cp -R /usr/lib* /home/ctf

RUN mkdir /home/ctf/dev && 
    mknod /home/ctf/dev/null c 1 3 && 
    mknod /home/ctf/dev/zero c 1 5 && 
    mknod /home/ctf/dev/random c 1 8 && 
    mknod /home/ctf/dev/urandom c 1 9 && 
    chmod 666 /home/ctf/dev/*

RUN mkdir /home/ctf/bin && 
    cp /bin/sh /home/ctf/bin && 
    cp /bin/ls /home/ctf/bin && 
    cp /bin/cat /home/ctf/bin

COPY ./ctf.xinetd /etc/xinetd.d/ctf
COPY ./flag.sh /flag.sh
RUN echo "Blocked by ctf_xinetd" > /etc/banner_fail

RUN chmod +x /flag.sh

COPY ./bin/ /home/ctf/
RUN chown -R root:ctf /home/ctf && 
    chmod -R 750 /home/ctf && 
    chmod 740 /home/ctf/flag

CMD ["/flag.sh"]

EXPOSE 70

修改后的ctf.xinetd

service ctf
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
type = UNLISTED
port = 70
bind = 0.0.0.0
server = /usr/sbin/chroot
# replace helloworld to your program
server_args = --userspec=1000:1000 /home/ctf ./pwn#pwn为二进制可执行文件的文件名
banner_fail = /etc/banner_fail
# safety options
per_source= 10 # the maximum instances of this service per source IP address
rlimit_cpu= 20 # the maximum number of CPU seconds that the service may use
#rlimit_as = 1024M # the Address Space resource limit for the service
#access_times = 2:00-9:00 12:00-24:00
}

把"start.sh"改为"flag.sh",以下为flag.sh的具体内容

#!/bin/sh
# Add your startup script
#!/bin/sh
sed -i "s/flag{pwntestflag}/$GZCTF_FLAG/" /home/ctf/flag
export GZCTF_FLAG=""
# DO NOT DELETE
/etc/init.d/xinetd start;
sleep infinity;

然后修改flag的内容为flag{pwntestflag}这个变量,不然随机不成功

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901212506449

打包到本地Docker仓库

docker build -t xiaoyuss/pwntest .
如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901202601121

编辑题目的时候注意端口

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901213607620

启动实例

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901213341357
如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901213332105

提交flag测试

如何在GZCTF部署简单的Web和PWN动态flag?
image-20240901213452293

记忆犹新

【渗透测试】12种rbash逃逸方式总结

【CTF杂项】常见文件文件头、文件尾格式总结及各类文件头

【渗透测试】ATT&CK靶场一,phpmyadmin,域渗透,内网横向移动攻略

DC-2综合渗透,rbash逃逸,git提权,wordpress靶场渗透教程

最新可用,bp+charles小程序抓包教程

原文始发于微信公众号(泷羽Sec):如何在GZCTF部署简单的Web和PWN动态flag?

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月2日12:37:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何在GZCTF部署简单的Web和PWN动态flag?https://cn-sec.com/archives/3119494.html

发表评论

匿名网友 填写信息