web和pwn题的简单动态flag实现

这篇具有很好参考价值的文章主要介绍了web和pwn题的简单动态flag实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作为一个出题人需要有一些觉悟,这周花了三天时间去研究Dockerfile的写法,主要还是为了实现动态flag,思路理顺了就会发现,原来Dockerfile和动态flag这么简单,这里直接现写两个简单的题目来演示一下。
web题,首先是需要按照常规逻辑写一个网页,这里就写一个带flag的简单网页,把flag放在源代码里,并注释掉。代码如下,保存为index.php。

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

接下来编写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		#添加运行权限

我所使用的平台无需暴露端口,如有需要可以使用EXPOSE 80暴露80端口。
接下来实现动态flag,还记得上面提到的flag.sh吗,先来看一下它的代码,同样相关解释写在注释里,正式使用记得删掉注释。
PS:flag.sh推荐在linux环境下创建,否则docker build时会报错,泪的教训。

#!/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=""	#这一句暂时不知道什么作用,但是要写着

整体目录结构
web和pwn题的简单动态flag实现
接下来的操作我默认你已经安装了docker和docker-compose,并且已经docker login了
使用build命令,构建题目镜像,name为dockerhub名(自行注册登录),webtest为镜像名(自定义),"."为版本号,代表latest,也可以自定义,不过拉取时记得加上版本号

docker build -t name/webtest .

web和pwn题的简单动态flag实现

push到你的dockerhub镜像仓库,name为dockerhub名,webtest为镜像名

docker push name/webtest

web和pwn题的简单动态flag实现

接下来部署题目,类型记得选择动态容器,不同平台可能有所不同,这里以GZCTF为例。
web和pwn题的简单动态flag实现

测试题目
web和pwn题的简单动态flag实现
web和pwn题的简单动态flag实现
web和pwn题的简单动态flag实现

如上图,成功实现了web题的动态flag,接下来实现pwn题的动态flag,pwn题基本逻辑一般为利用栈溢出漏洞,打通后得到shell权限,因此把flag文件放在容器的根目录或其他目录下即可,为了安全,这里在ctf_xinetd基础上做出一些修改来进行pwn题的部署,github链接:https://github.com/Eadom/ctf_xinetd
修改后的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;

整体目录结构
web和pwn题的简单动态flag实现

flag文件内容
web和pwn题的简单动态flag实现

Dockerfile及flag.sh的相关解释见上面的web题编写部分
剩下的步骤和web题一样,就不再赘述了,直接上图
build
web和pwn题的简单动态flag实现

push
web和pwn题的简单动态flag实现

题目部署
web和pwn题的简单动态flag实现

题目测试
web和pwn题的简单动态flag实现
web和pwn题的简单动态flag实现

成功实现了pwn题的动态flag
如有错误或补充,欢迎评论或直接联系我
更多内容见我的个人博客:www.nh0pe.top
附开源CTF平台GZCTFgithub地址:https://github.com/GZTimeWalker/GZCTF,真的很好的一个平台。文章来源地址https://www.toymoban.com/news/detail-420280.html

到了这里,关于web和pwn题的简单动态flag实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯必备——动态规划“路径问题”以及这种题的小结

    int[][]m=new int[2][3] 表达的含义是,两行,三列。 不同路径 首先这个题我们分五步走 1.状态表示(按照经验+题目要求) 一般都是以···为结尾或者以···为起始 这道题我们就以dp[i][j]为他要求的到达结尾有多少条路径 此时你要思考一个东西,有多少条路径,他是怎么来的来考

    2024年02月08日
    浏览(34)
  • 用Rust设计一个并发的Web服务:常用Rust库如Tokio、Hyper等,基于TCP/IP协议栈,实现了一个简单的并发Web服务器,并结合具体的代码讲解如何编写并发Web服务器的程序

    作者:禅与计算机程序设计艺术 1994年,互联网泡沫破裂,一批优秀的程序员、工程师纷纷加入到web开发领域。而其中的Rust语言却备受瞩目,它是一种现代系统编程语言,专注于安全和并发。因此,Rust在当下成为最流行的编程语言之一,很多框架也开始使用Rust重构,这使得

    2024年02月06日
    浏览(62)
  • 一个简单的Web程序(详解创建一个Flask项目后自带的一个简单的Web程序)

    程序代码截图如下:  在创建 Flask 程序时,通常需要先创建一个应用实例进行应用初始化。 上述代码中,使用 Flask 类创建了一个应用实例 app。 __name__ 参数用于获取当前代码文件的文件名,作为应用实例的名称。 if __name__ == \\\'__main__\\\': app.run(debug=True) 用于启动服务器并运行应

    2024年01月20日
    浏览(50)
  • 我写了一个用来刷题的微信小程序

    目录 土著刷题是一个什么工具? 为什么要做土著刷题这样一个产品? 当前版本的规划 版本效果 土著刷题微信小程序,一款免费的刷题小程序,提供多种刷题模式,可以分享题库给小伙伴一起刷,针对特定题库的用户群体。 对于为什么要开发这个刷题小程序,这可以说是一

    2024年02月10日
    浏览(52)
  • 网络渗透CTF实践:获取靶机Web Developer 文件/root/flag.txt中flag

    实验目的:通过对目标靶机的渗透过程,了解CTF竞赛模式,理解CTF涵盖的知识范围,如MISC、PPC、WEB等,通过实践,加强团队协作能力,掌握初步CTF实战能力及信息收集能力。熟悉网络扫描、探测HTTP web服务、目录枚举、提权、图像信息提取、密码破解等相关工具的使用。 系统

    2024年01月23日
    浏览(44)
  • 基于SpringCloud微服务自动出题题库系统设计与实现

    题库是“在计算机系统中,按照教育测试方案进行完成的某课程题目的总和,是在教学研究模型基础上通过建立发展起来的教育测量工具。”完善的题库管理系统可以减轻教师的出卷工作负担,全面系统的给出规范完整的试卷。目前已有众多专家学者在题库系统领域做了大量

    2024年02月11日
    浏览(32)
  • 简单讲述几种查找图片中隐藏Flag的方法

    flag藏在图片中,使用WinHex软件或者记事本打开,搜索发现flag。 像这种图片很明显是被修改过高度的,我们使用python脚本得出正常图片的宽高。 得出的结果是: 使用软件WinHex打开那张图片,就能看到当前的图片的高是不对的: 在WinHex里把高改成01 df就可以了,得到正常图片

    2024年02月08日
    浏览(55)
  • node.js 简单实验 创建一个简单的web服务

    概要:用一个最简单是例子感受一下node.js 的能力 1.代码 2.运行结果 2.1 node t.js 1.2 http://127.0.0.1:8081       

    2024年02月11日
    浏览(69)
  • 【HTML】简单制作一个动态3D正方体

     目录 前言 开始 HTML部分 JS部分 CSS部分 效果图 总结           无需多言,本文将详细介绍一段代码,具体内容如下:           首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],JS的文件名改为[script.js],CSS的文件名改为[style.css],创建好后右键用文本

    2024年04月11日
    浏览(40)
  • Solon Web 开发:三、一个简单的 Web 模板项目(或示例)

    演示 web 程序的常用能力: 控制器、请求参数、参数校验、跳转 过滤器、全局异常处理 静态文件 动态模板 动态模板公共变量及控制器基类 日志 Json 渲染格式控制 模板下载: 打包成 jar ,可以自启动 helloworld_web_jar.zip (maven) helloworld_web_jar_gradle.zip (gradle) 打包成 war,需

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包