远端pwn环境搭建

Sherry 发布于 2025-03-27 66 次阅读 文章 最后更新于 2025-03-27 983 字


linux-socat 搭建 pwn 环境

[!tip]

socat 是一种多功能的网络工具,用于在两个地址之间传输数据。它支持多种传输机制,如 TCP、UDP、Unix 域套接字、文件等。socat 可以创建双向字节流,非常适用于调试、网络分析以及建立代理或端口转发配置。它能够建立加密连接、在系统间传输文件或设置虚拟网络接口,是网络管理员和安全研究者常用的工具。

安装 linux-socat

sudo apt-get install socat

利用 socat 命令来远程搭建 pwn 的环境

socat tcp-l:8887,fork exec:./pwn
  • tcp-l:8887: 这部分告诉 socat 创建一个 TCP 监听器,监听在本地 8887 端口上。
  • fork: 这告诉 socat 在接收到连接时创建一个新的进程来处理连接,而不是在同一个进程中处理所有连接。
  • exec:./string: 这部分告诉 socat 在接收到连接时执行./string 可执行文件,并将连接的输入输出重定向到该程序。

[!note]

综合起来,这个命令的作用是创建一个 TCP 监听器,等待连接到达,然后将连接转发给 string 程序来处理。这个程序可能是一个漏洞模拟器或者一个需要远程访问的服务。

查看远端连接 ip,提供给做题者

192.168.115.128:8887

本地连接攻击

成功连接到

pwn_deploy_chroot 搭建 pwn 环境

[!tip]

项目参考

环境准备
所有环境都在 python 2 和 pip 2 下准备

项目特点

  • 一次可以部署多个题目到一个 docker 容器中
  • 自动生成 flag, 并备份到当前目录
  • 也是基于 xinted + docker + chroot
  • 利用 python 脚本根据 pwn 的文件名自动化地生成 3 个文件:pwn. xinetd,Dockerfile 和 docker-compose. yml
  • 在/bin 目录,利用自己编写的静态编译的 catflag 程序作为/bin/sh, 这样的话,system (“/bin/sh”) 实际执行的只是读取 flag 文件的内容,完全不给搅屎棍任何操作的余地
  • 默认从 10000 端口监听,多一个程序就+1,起始的监听端口可以在 config. py 配置,或者生成 pwn. xinetd 和 docker-compose. yml 后自己修改这两个文件

安装 docker

# 安装docker
curl -s https://get.docker.com/ | sh
# 安装 docker-compose
apt install docker-compose

使用方法
将你要部署的 pwn 题目放到 bin 目录

我的项目已经将一个程序 copy 了 3 分作为示例,注意文件名不要含有特殊字符,文件名建议使用字母,下划线,横杆和数字,当然全字母的当然最好了

root@instance-1:~/pwn_deploy_chroot# ls bin/  
pwn1  pwn1_copy1  pwn1_copy2

2、运行 initialize. py

运行脚本后会输出每个 pwn 的监听端口,

root@instance-1:~/pwn_deploy_chroot# python initialize.py  

pwn1's port: 10000  
pwn1_copy1's port: 10001  
pwn1_copy2's port: 10002

文件与端口信息,还有随机生成的 flag 默认备份到 flags. txt

root@instance-1:~/pwn_deploy_chroot# cat flags.txt   
pwn1: flag{93aa6da5-db45-46fa-a2e1-af2be6698692}  
pwn1_copy1: flag{f9966c51-52e4-4212-ac44-97bf16620b41}  
pwn1_copy2: flag{b17949ce-e3fa-4ca7-9fcc-44b8dc997cb3}  

pwn1's port: 10000  
pwn1_copy1's port: 10001  
pwn1_copy2's port: 10002

启动环境

docker-compose up --build -d

检查环境

root@instance-1:~/pwn_deploy_chroot# netstat -antp | grep docker  
tcp6 0 0 :::10002 :::* LISTEN 19828/docker-proxy  
tcp6 0 0 :::10000 :::* LISTEN 19887/docker-proxy  
tcp6 0 0 :::10001 :::* LISTEN 19873/docker-proxy

停止环境

docker-compose down

编辑 config. py 决定是否用我的 catflag 程序去替换/bin/sh

# Whether to replace /bin/sh

## 替换
REPLACE_BINSH = True
## 不替换(默认)
REPLACE_BINSH = False

项目注意

  • flag 会由 initialize.py 生成,并写入 flags. txt中
  • pwn 程序对应的端口信息也在 flags. txt 中
  • 注意文件名不要含有特殊字符,文件名建议使用字母,下划线,横杆和数字,当然全字母的当然最好了

尝试解题
正常解题