Pwn出题指南
0x00:背景
最近在为社团招新赛出pwn题,发现网上关于出题方面的文章资料特别少,所以打算记录下自己出题的过程,便于网友们参考学习。本次出题采用了ctf_xinetd与pwn_deploy_chroot项目。
0x01:Docker介绍
Docker 将应用程序与该程序的依赖,打包在一个文件里面。只要运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,大大缓解了程序分布时的环境问题。
docker的安装:
#本人系统环境:Ubuntu 22.04
# 更新软件包
sudo apt-get update
# 安装docker
sudo apt-get install docker.io
# 检查docker是否安装成功
docker version
docker的相关指令:
# 查看帮助
docker --help (或者准确点 docker [command] --help)
# (!以下命令若显示权限不够的,请自行添加sudo)
# 查看docker的基本信息,有多少个容器、镜像等等
docker info
# 查看本机上的所有镜像
docker images
# 容器构建
docker build
# 运行容器
docker run
# 停止容器
docker stop
# 强制停止容器
docker kill
# 删除容器
docker rm
更多的docker指令参考:https://blog.csdn.net/u012921921/article/details/116259208
0x02:Dockerfile介绍
Dockerfile 是一个用来构建镜像的文本文件,其中包含了一条条构建镜像所需的指令和说明。
相关指令介绍:
- FROM:FROM指令是最重要的一个且必须为 Dockerfile文件开篇的第一个非注释行,用于为映像文件构建过程指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境。
- COPY:用于从 Docker主机复制文件至创建的新映像文件。
- WORKDIR:用于为 Dockerfile中所有的 RUN、CMD、ENTRYPOINT、COPY和 ADD指定设定工作目录。
- RUN:RUN用于指定 docker build过程中运行的程序,其可以是任何命令,但是这里有个限定,一般为基础镜像可以运行的命令。
- CMD:类似于 RUN指令, CMD指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同 . RUN指令运行于映像文件构建过程中,而 CMD指令运行于基于 Dockerfile构建出的新映像文件启动一个容器时 . CMD指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止;不过, CMD指定的命令其可以被 docker run的命令行选项所覆盖 .在Dockerfile中可以存在多个 CMD指令,但仅最后一个会生效。
Dockerfile制作完成后,用命令docker build
制作基于dockerfile的新镜像。
更详细的介绍及更多的指令可参考:
https://blog.csdn.net/zisefeizhu/article/details/83472190
https://www.runoob.com/docker/docker-dockerfile.html
0x03:docker-compose介绍
docker-compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 docker-compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。docker-compose默认的配置文件为docker-compose.yml,其用YAML语言编写。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
安装docker-compose:
sudo apt install docker-compose
(不知道有没有记错,或者先执行一下docker-compose命令,如果没有的话,会提示你如何去安装)
0x04:ctf_xinetd与pwn_deploy_chroot项目
ctf_xinetd项目:
该项目的文件结构比较简单,容易入手,不过需要一道道题进行部署,适合部署少量题目。
项目地址:https://github.com/Eadom/ctf_xinetd
部署过程:
# 把项目克隆下来
git clone https://github.com/Eadom/ctf_xinetd
# 把flag和二进制程序放入bin目录中,并且按照readme修改ctf.xinetd
# 在ctf_xinetd目录下构建容器(注意后面有个点)
docker build -t "pwn" .
# 运行该镜像(pub_port改成你想要放置的端口)
docker run -d -p "0.0.0.0:pub_port:9999" -h "pwn" --name="pwn" pwn
# 部署完成
相关命令:
# 查看端口连接:
sudo netstat -antp | grep docker
# 查看连接所在进程:
sudo lsof -i:[端口号]
# 断开连接:
sudo kill -9 [PID]
pwn_deploy_chroot项目:
当需要部署多道题时,可以采用该项目,一次部署!
项目地址:https://github.com/giantbranch/pwn_deploy_chroot
对应的教程:http://www.giantbranch.cn/2018/09/24/%E5%A6%82%E4%BD%95%E5%AE%89%E5%85%A8%E5%BF%AB%E9%80%9F%E5%9C%B0%E9%83%A8%E7%BD%B2%E5%A4%9A%E9%81%93ctf%20pwn%E6%AF%94%E8%B5%9B%E9%A2%98%E7%9B%AE/
部署过程:
# 将该项目克隆下来
git clone https://github.com/giantbranch/pwn_deploy_chroot
# 使用
步一:将所有pwn题目放入bin目录(注意名字不带特殊字符,因为会将文件名作为linux用户名)
步二:python initialize.py
该python指python2,该步是设置各种文件
步三:docker-compose up --build -d
根据Dockerfile文件及其配置文件创建容器并开启
(以上步骤的解释基于本人粗浅的理解,可能不太对噢~)
生成的容器的内容是相对固定的,要想进行一定的修改。可对Dockerfile和initialize.py进行修改,不过需要熟悉一定的命令,并且理解不同文件之间的关系及联系。这个我相信通过查阅文章中的资料,修改并不是什么大问题。
最后可以通过nc 0.0.0.0 [端口号]
进行连接测试。
0x05:远程部署说明
部署在远程服务器上,一般通过ssh用服务器ip地址及相应端口连接。图形界面ssh工具有Xshell、FinalShell,个人认为FinalShell界面看起来更好。
当然使用linux命令行工具也可以连接,可以自行百度搜索。
(好像没有其它特别需要注意的了~)
0x06:Pwn 出题注意点
编译的相关参数:
# NX保护机制:
-z execstack / -z noexecstack # (关闭 / 开启) 堆栈不可执行
# Canary:(关闭 / 开启 / 全开启) 栈里插入cookie信息
# !开canary好像会造成栈中局部变量的顺序有所改变
-fno-stack-protector /-fstack-protector / -fstack-protector-all
# ASLR和PIE:
-no-pie / -pie # (关闭 / 开启) 地址随机化,另外打开后会有get_pc_thunk
# RELRO:
-z norelro / -z lazy / -z now # (关闭 / 部分开启 / 完全开启) 对GOT表具有写权限
-s # 去除符号表
参考:https://blog.e4l4.com/posts/%E5%87%BApwn%E9%A2%98%E7%9A%84tips/
#程序需要输出输入时,加上这两段代码,不然部署在docker中运行时要回车才有输出
setvbuf(stdout, 0, 2, 0);
setvbuf(stdin, 0, 2, 0);
tolele
2022.9.11
Pwn出题指南的更多相关文章
- 使用pwn_deploy_chroot部署国赛pwn比赛题目
目录 使用pwn_deploy_chroot部署国赛pwn比赛题目 一.前言 二.Docker 三.部署镜像 四.pwn_deploy_chroot 五.check && exp 六. ...
- PWN二进制漏洞学习指南
目录 PWN二进制漏洞学习指南 前言 前置技能 PWN概念 概述 发音 术语 PWN环境搭建 PWN知识学习途径 常见漏洞 安全机制 PWN技巧 PWN相关资源博客 Pwn菜鸡小分队 PWN二进制漏洞 ...
- Pwn入坑指南
栈溢出原理 参考我之前发的一篇 Windows栈溢出原理 还有 brant 师傅的<0day安全笔记> Pwn常用工具 gdb:Linux下程序调试 PEDA:针对gdb的python漏洞 ...
- elf文件--基于《ctf竞赛权威指南pwn篇》
1.ELF概念: ELF(Executable and Linkable Format),即"可执行可链接格式",最初由UNIX系统实验室作为应用程序二进制接口(Applicati ...
- CTF入门指南
转自http://www.cnblogs.com/christychang/p/6032532.html ctf入门指南 如何入门?如何组队? capture the flag 夺旗比赛 类型: We ...
- CTF入门指南(0基础)
ctf入门指南 如何入门?如何组队? capture the flag 夺旗比赛 类型: Web 密码学 pwn 程序的逻辑分析,漏洞利用windows.linux.小型机等 misc 杂项,隐写,数 ...
- [CTF] CTF入门指南
CTF入门指南 何为CTF ? CTF(Capture The Flag)夺旗比赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客大会 ...
- (笔记)CTF入门指南
[考项分类] Web: 网页安全 Crypto: 密码学(凯撒密码等) PWN: 对程序逻辑分析 系统漏洞利用 Misc: 杂项 图片隐写 数据还原 脑洞类 信息安全有关的 Reverse: 逆向工程 ...
- Hitcon 2016 Pwn赛题学习
PS:这是我很久以前写的,大概是去年刚结束Hitcon2016时写的.写完之后就丢在硬盘里没管了,最近翻出来才想起来写过这个,索性发出来 0x0 前言 Hitcon个人感觉是高质量的比赛,相比国内的C ...
随机推荐
- python小题目练习(一)
题目:输出1+2+3+4+5+--+100的总数,并打印出这行式子 代码展示:# 1.定义一个初识变量total,用于后面每次循环进行累加值 total = 0# 2.利用for循环遍历累加for i ...
- c# 怎样能写个sql的解析器
c# 怎样能写个sql的解析器 本示例主要是讲明sql解析的原理,真实的源代码下查看 sql解析器源代码 详细示例DEMO 请查看demo代码 前言 阅读本文需要有一定正则表达式基础 正则表达式基础教 ...
- Training a classifier
你已经学习了如何定义神经网络,计算损失和执行网络权重的更新. 现在你或许在思考. What about data? 通常当你需要处理图像,文本,音频,视频数据,你能够使用标准的python包将数据加载 ...
- Tapdata Cloud 2.1.2 来啦:大波细节已就绪!字段类型可批量修改、支持微信扫码登录、新增支持 Vika 为目标
Tapdata Cloud cloud.tapdata.net 让数据实时可用 Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前支持 Oracle.MySQL.PG.SQL Ser ...
- java导出excel单sheet超过65535数据报错拆分多sheet导出
在开发过程中,数据导出excel的功能很常见,数据少,到没问题,一旦超过65535条数据就会报错,因此可以考虑导出多个sheet来解决,代码如下: private static void export ...
- 常用类-LocalDate、LocalTime、LocalDateTime
详情解释请看下方代码区 点击查看代码 @Test public void test1(){ //实例化:now()获取当前日期.时间.日期 + 时间 LocalDate localDate = Loc ...
- 题解 $UVA$ 11825【$Hackers$' $Crackdown$】
本题的数学模型是:把\(\mathcal{n}\)个集合\(\mathcal{P1,P2,...,Pn}\)分成尽量多组,使得每组中所以集合的并集等于全集.这里集合\(\mathcal{Pi}\)就是 ...
- led闪烁(时序输入输出,自定义变量,时钟仿真,执行顺序)
1.设计定义 设计一个以200ms亮,200ms暗交替闪烁的led灯,并且有一个复位按钮可以停止工作. 2.设计输入 2.1端口 以固定周期交替闪烁说明由时钟控制,需要一个时钟控制端口clk,要求复位 ...
- 关于微信小程序生产环境体验版获取不到openId的问题(大坑)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_119 我们知道openid是微信用户验证的重要标识,支付功能严重依赖这个东西,之前我们做微信支付的时候是通过在微信客户端直接调用官 ...
- 十分钟教会你如何使用VitePress搭建及部署个人博客站点
使用VitePress可以让我们快速搭建一个静态博客网站,这篇文章将带领大家搭建一个基于VitePress的静态博客网站并且部署到GitHub Pages(github提供的静态网页服务) 快速上手 ...