immerse
友情指路

pwn日记簿--出题篇

2022-04-12 pwn
Word count: 395 | Reading time: 1min

环境配置

安装docker 容器

1
curl -s https://get.docker.com/ | sh

安装 docker compose 和 git

1
apt install docker-compose git

下载

1
git clone https://github.com/giantbranch/pwn_deploy_chroot.git

使用

1.将所有 pwn 题目放入 bin 目录

注意文件名不要含有特殊字符,文件名建议使用字母,下划线,横杆和数字,因为会将文件名作为 linux 用户名

2.运行 initialize.py

运行脚本后会输出每个 pwn 的监听端口,文件与端口信息,还有随机生成的 flag 默认备份到 flags.txt

启动

1.在root权限下执行命令

1
docker-compose up --build-d

利用 initialize.py 脚本根据 pwn 的文件名自动化地生成 3 个文件:pwn.xinetd,Dockerfile 和 docker-compose.yml,之后便可以 docker 启动了

源程序编码

gcc编译
1.关闭DEP/NX(堆栈不可执行)

1
gcc  -z execstack -o 编译完的文件名 待编译的文件名

2.关掉Stack Protector/Canary(栈保护)

1
gcc -fno-stack-protector -o 编译完的文件名 待编译的文件名

3.关掉程序ASLR/PIE(程序随机化保护)

1
gcc -no-pie 编译完的文件名 待编译的文件名

4.关闭整个linux系统的ASLR保护

1
2
3
sudo -s 
echo 0 > /proc/sys/kernel/randomize_va_space
exit

5.打开整个linux系统的ASLR保护

1
2
sudo -s 
echo 2 > /proc/sys/kernel/randomize_va_space

6.64位linux下面的GCC编译出一个32位可执行程序

1
gcc -m32 -z execstack -fno-stack-protector -o 编译完的文件名 待编译的文件名

7.部署

1
socat tcp-l:端口号,fork exec:程序位置,reuseaddr

8.题目访问

1
nc IP地址 端口号

Author: immerse

Link: http://example.com/2022/04/12/pwn%E6%97%A5%E8%AE%B0%E7%B0%BF-%E5%87%BA%E9%A2%98%E7%AF%87/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
websocket开发聊天室
NextPost >
虚拟机网络问题解决方案汇总
CATALOG
  1. 1. 环境配置
  2. 2. 使用
  3. 3. 启动
  4. 4. 源程序编码